坦克大战课程设计论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
坦克大战游戏设计
1.课程设计的目的
随着手机的日益普及,java功能在移动设备上的实现及java 应用程序产生的影响力,对丰富人们的生活内容,提供便捷的咨询起着不可忽视的作用。本项目介绍了坦克大战的基本构建方法、java的相关技术及本程序的结构分析和具体功能的实现。游戏是在Eclipse3.2环境下编程。本项目重点运用了图形化用户界面GUI,Thread多线程的有关知识,其中涉及了绘图工具的运用,事件处理操作以及图形的碰撞检测等知识点。通过此课程设计,使学生巩固所学知识、培养学生动手能力,了解Java的面向对象的体系结构。学生用Java语言设计一个完整的应用程序,综合应用所学知识完成软件的分析、设计、调试和总结,提高学生对Java语言的综合应用能力和解决问题的能力。
2.设计方案论证
2.1设计思路
本项目介绍了坦克大战的基本构建方法、java的相关技术及本程序的结构分析和具体功能的实现。游戏是在Eclipse3.2环境下编程。
一、游戏基本元素:坦克,炮管,子弹,墙壁,地雷
二、它的主要功能:
(1)能够朝四个方向移动:上、下、左、右键。
(2) 按下鼠标左键发射普通子弹;按下鼠标右键发射散弹;子
弹爆炸的效果,普通子弹和炮弹的效果
(3)敌人能够移动
(4)能够模拟爆炸
(5)能够产生障碍
(6)能够增长生命
玩家控制主坦克(上方有血条的)的移动以及炮弹的发射。若玩家将敌方坦克全部打掉则玩家胜;若期间由玩家控制的主坦克被打掉则视为玩家失败。游戏中只有普通墙作为障碍物,玩家无法穿越它们并且普通子弹不能将墙打穿
;但是玩家可以用炮弹将普通墙打掉。桃心可以将坦克的血加满。
2.2简要的设计流程:
键盘监听器
2.2设计方法
2.2.1构建游戏主类
在主类中构造一个主Frame框架,设置它的大小和位置,并将其显示。在主类中编写一段代码,构造一个窗口。并添加窗口关闭的处理事件,将窗口设置成打小不可变。
主要代码如下:
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
2.2.2构建坦克类Tank
构造主窗口中所需要的Tank类,并将坦克加到窗口中,实现坦克的四个方向的移动
创建一个坦克类,用画图工具构造出简单的图形代表坦克,并将坦克加入到主窗口当中。
主要代码如下:
abstract class Tank
{
boolean init=false; //第一次画时将图片载入内存
static final Toolkit TLK=Toolkit.getDefaultToolkit(); //用来将图片读入Image数组
public static Image[] turretImg={
TLK.getImage(Tank.class.getClassLoader().getResource("I mage/Tank/turret1.png")),
TLK.getImage(Tank.class.getClassLoader().getResource("I mage/Tank/turret2.png"))};
BufferedImage bTurretImg=null;
Graphics2D g2=null;
AffineTransform trans=new AffineTransform();
public static final int SHOTSCOUNT=5; //同时可发射的子弹数
int shotsCount=0; //已经发射的子弹数
public static final int TANKSPEED=5; //Tank移动速度
public static final int TANKWIDTH=36; //Tank的尺寸
public static final int TANKHEIGHT=38;
public static enum TANK_DIR {U,D,L,R,STOP};
TANK_DIR tankDir; //Tank主体的方向
TANK_DIR moveDir; //Tank的运动方向
boolean camp; //Tank的阵营
boolean isNPC; //是否是有电脑控制的机器人Tank
boolean isLive=true; //Tank是否存活
int x,y; //Tank主体的中心点坐标
int oldx,oldy; //存储Tank前一步的坐标
int turretDirx, turretDiry; //大炮端点的坐标
public static final int TURRETLENGTH=30; //炮筒的长度double oldAngel=0;
double nowAngel;
double turnAngel;
TankClient tc=null; //主界面类的引用
Bomb tankBomb=null;
HitPoint tankHitPoint; //Tank的生命值
static Random rn=new Random(); //随机数发生器
让坦克朝四个方向运动起来,在主类TankClient中启用多线程机制,让系统不断的进行重画。
class RepaintThread implements Runnable //画面重画线程{
public void run()
{
while(repaintFlag)
{
try