建炮弹类,并让屏幕中的坦克能发射炮弹添加敌方坦克AI和红蓝两阵营效果添加碰撞检测,实现子弹击中敌人加入爆炸图片,实现爆炸效果添加红心,实现加血功能添加障碍物墙鼠标移动控制鼠标点击空格后移:S或方向键向下右移:D或方向键向右
3
二、游戏的详细设计(一)构建游戏主类构建游戏主类由主类继承Frame类,并在其中编写一段代码,构造一个窗口。并添加窗口大小位置标题,将窗口设置成打小不可变,设定背景颜色为黑色。主要代码this.setLocation(200,100);thisthis.setSize(WIN_WIDTH,WIN_HEIGHT);thisthis.setTitle("TankWar");thisthis.setResizable(false//不能改变窗口大小false);thisfalsethis.setBackground(Color.black);this
(二)构建坦克类Tank构建坦克类创建一个坦克类,用多个图片构造出简单的图形代表坦克,并将坦克加入到主窗口当中。让坦克朝四个方向运动起来,在主类TankClient中启用多线程机制,让系统不断的进行重画。并在Tank类中建立处理按键的方法,实现坦克的手动移动;根据坦克类修改TankClient主类,在主类中
注册事件监听器,并调用Tank类中的方法。主类TankClient中使用双缓冲机制消除坦克的闪烁现象。
(三)添加炮弹Shot类在Shot类当中添加sx,sy等属性。在Shot类当中添加构造方法,draw方法等必要方法。根据不同的方向,子弹要进行不同的运动。在TankClient当中new一颗子弹出来。(四)实现坦克的互相攻击1.让主战坦克打出炮弹①在主类当中增加对鼠标点击的处理,使每当点击鼠标的时候,坦克打出一发炮弹。②通过鼠标移动控制炮筒方向,即子弹发射方向③为了能够打出多发炮弹,使用容器填装多发炮弹,每当点击鼠标的时
4
候就往容器中加入新的炮弹④解决炮弹不消亡的
问题,加入控制炮弹生死的量islive,当炮弹已经死去就不需要对其重画,当炮弹飞出边界就死亡,当炮弹死亡就从容器中移去。2.实现坦克的互相开火①加入区分敌我的红蓝阵营,根据敌我设置不同颜色的坦克②子弹无法打中同一阵营的坦克③进行碰撞检测,打中敌方阵营坦克则减少敌方坦克生命。④增加控制坦克生死的Boolean量islive,如果islive为false就不画了。当炮弹击中敌人坦克时,坦克被打死,子弹也死去。3.添加多辆坦克建一容器向里面添加敌人的TankList
tanksList=Collections.synchronizedList(new
ArrayList());//存储界面上的Tank4.让坦克更加智能①让敌军坦克向随机方向移动。通过我方坦克位置,来设定坦克的下一个方向。②让敌方坦克超我方坦克所在方向发射炮弹。③当我方炮弹向敌方打去时,一定程度上躲避.
(五)创建Bomb类①加入位置属性x,,y,加入帧数变量step②加入draw方法,一帧一帧的画出爆炸图片来模拟爆炸效果③在TankClient当中创建容器,将爆炸存放与容器当中,击毙一辆坦克就产生爆炸,将爆炸逐一画出
(六)添加道具Item添加道具总共两种道具,爱心和超级炮弹当主战Tank与爱心接触的时候,血自动增加。
5
publicvoidraisesHitPoint(intraises)//血量增加int{number+=raises;if(number>topNumber){number=topNumber;}if}当主战Tank与超级炮弹接触的时候,超级炮弹数量增加。publicvoidaddHydraShots(){this.hydraShotsNum++;this}(七)添加障碍物墙添加障碍物墙①建立Wall类,建立WallImage对象,用图片将墙画出来②让每一颗子弹打击每一堵墙,当子弹接触到墙时子弹消失,墙壁消失。让坦克不能穿过墙。三、游戏最终运行界面游戏最终运行界面
6
四、结论本项目重点运用了图形化用户界面GUI,Thread多线程的有关知识,其中涉及了绘图工具的运用,事件处理操作以及图形的碰撞检测等知识点。通过此课程设