JAVA课程设计-飞机大战
1.Gitee部分
项目git地址:https://gitee.com/alpha-beta2001/java-code/tree/master/PlaneWar
提交记录:https://gitee.com/alpha-beta2001/java-code/commits/master
2.程序功能流程图
3.项目包设计
4.关键UML图
5.程序运行截图
(项目已打包为exe文件)
6.部分项目代码
鼠标监听部分:
@Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub //开始游戏判定区域 if((e.getX()>145&&e.getX()<330&&e.getY()>350&&e.getY()<800)) { if(this.bFrame.nPanel.plane.hp != 0) { this.bFrame.nPanel.isStart = true; this.bFrame.nPanel.hasBullet = true; this.bFrame.nPanel.hasEnemy = true; //this.bFrame.nPanel.plane.hasPlane = true; this.change = false; } } //主界面选择 if(this.change == true) { //飞机选择 if((e.getX()>0&&e.getX()<120&&e.getY()>560&&e.getY()<773)) { if(this.bFrame.nPanel.plane.choose>1) { this.bFrame.nPanel.plane.choose--; // this.bFrame.nPanel.bts.get(this.bFrame.nPanel.i).choose--; if(this.bFrame.nPanel.hasBullet == true) System.out.println(this.bFrame.nPanel.bts.get(this.bFrame.nPanel.j).choose); } } else if((e.getX()>360&&e.getX()<480&&e.getY()>560&&e.getY()<773)) { if(this.bFrame.nPanel.plane.choose<4) { this.bFrame.nPanel.plane.choose++; // this.bFrame.nPanel.bts.get(this.bFrame.nPanel.i).choose++; // this.bFrame.nPanel.bts.get(this.bFrame.nPanel.i).ChooseType(); if(this.bFrame.nPanel.hasBullet == true) System.out.println(this.bFrame.nPanel.bts.get(this.bFrame.nPanel.j).choose); } } //背景选择 if((e.getX()>0&&e.getX()<120&&e.getY()>350&&e.getY()<413)) { if(this.bFrame.nPanel.back.flag>1) { this.bFrame.nPanel.back.flag--; } } if((e.getX()>360&&e.getX()<480&&e.getY()>350&&e.getY()<413)) { if(this.bFrame.nPanel.back.flag<7) { this.bFrame.nPanel.back.flag++; } } } //死亡对话框 if(this.bFrame.nPanel.isDead == true) { //返回开始界面 if((e.getX()>67&&e.getX()<405&&e.getY()>500&&e.getY()<606)) { this.bFrame.nPanel.isStart = false; this.bFrame.nPanel.isDead = false; this.bFrame.nPanel.hasBullet = false; this.bFrame.nPanel.bts.clear(); this.bFrame.nPanel.hasEnemy = false; this.bFrame.nPanel.ens.clear(); this.bFrame.nPanel.plane.hasPlane = true; this.bFrame.nPanel.plane.hp = 100; this.bFrame.nPanel.plane.i = 0; this.bFrame.nPanel.plane.mode = 1; this.bFrame.nPanel.plane.count = 0; this.change = true; } } }
背景滚动部分:
public void drawBack(Graphics g) { g.drawImage(this.Bg, 0, top-800, 480,800,null); g.drawImage(this.Bg, 0, top,480,800,null); time++; if(time == 10000) { time = 0; } if(time%10==0) { top++; if(top>=800) { top = 0; } } }
让背景每10毫秒下移1个像素
道具绘制部分:
public void drawItem(Graphics g) { g.drawImage(this.Image[index], x, y, width, height, null); if(this.bPanel.time%rspeed==0) //图片翻转速度 { index++; if(index == this.Image.length) { index = 0; } } if(this.bPanel.time%speed==0) //下落速度 { y++; if(y>=BFrame.pageHeigh) { this.bPanel.its.remove(this); } } }
一些判定节点设置:
public Boolean isStart = false; //控制开始动画 public Boolean isDead = false; //控制死亡动画 public Boolean hasBullet = false; //控制子弹绘制 public Boolean hasEnemy = false; //控制敌机绘制 public boolean hasPlane = true; //控制飞机绘制 public boolean change = true; //是否允许选择飞机或地图 //道具元素控制 public boolean hpUp = false; public boolean modeUp = false; public boolean planeChange = false;
7.改进与感想
1.内部成员使用public修饰,不够安全
2.没有成功实现一种飞机对应一种子弹类型
3.背景音乐没有成功实现循环播放,只有一些简单的打击音效
4.敌机路径单一
5.绘制不同子弹的代码较为繁琐
6.飞机在HP=0时瞬间吃到血包会触发伪两命bug
7.可以尝试使用数据库记录每个用户的分数,加入多人对战模式
8.可以尝试使用键盘操控