飞机大战小游戏
1.面向对象与面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
2.游戏需求
- 游戏通过键盘操作,键盘上的上下左右分别控制飞机的移动,空格键控制飞机的开火,击败敌人。
- 开始游戏时,飞机的血量是100,当敌人遇到飞机的时候,在相遇的过程中飞机的血量递减1,如果飞机的生命数为0,则游戏结束,界面上没有任何敌人只有飞机。
- 普通敌人被飞机打击一次就死亡;一般敌人 被飞机打击二次就死亡;高级敌人被飞机打击三次就死亡;
- 背景每次启动是不同的界面;
- 背景会自动向上移动
- 飞机移动会有背景音乐;
- 所有的敌人都是随机不停的从界面最上面的外部进入界面;
- 游戏死亡界面只有自己的飞机;
3.飞机大战基于面向对象分析
基于上述需求,可以抽象出背景类BackGround,敌人类Enemy,飞机类Hero,子弹类Missile。整个游戏是由这些对象组成,这些对象的行为组合在一起就是游戏进行时的各种操作和反应。
4.开发详细步骤
①基本界面的绘制
public class PlaneClient extends JFrame{
public PlaneClient() {
/*绘制窗口*/
//设置左上角那个图标
this.setIconImage(Toolkit.getDefaultToolkit()
.createImage(PlaneClient.class.getResource("../img/w_zdd.jpg")));
this.setTitle("飞机大战");
this.setSize(512,768);
//尺寸固定不能被改变
this.setResizable(false);
//设置窗口相对于指定组件的位置。 null就是中央
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
②设置随机背景并使其移动
主要方法是用两个背景,一个正好在窗口内,一个在窗口上方,然后两个一起向下移动,当完全移出窗口时就跳到窗口正上方,循环这个过程。
背景类:
public class BackGround {
public int x1,y1,x2,y2;
public BufferedImage bg1,bg2;
//定义随机对象
Random r=new Random();
public BackGround() {
int i=r.nextInt(5)+1;
bg1=Tool.getImage("bg"+i+".jpg");
bg2=Tool.getImage("bg"+i+".jpg");
x1=y1=x2=0;
y2=-768;
}
public void move1() {
y1+=8;
if(y1>=768) {
y1=-768;
}
}
public void move2() {
y2+=8;
if(y2>=768) {
y2=-768;
}
}
}
在PlaneClient中:
//绘制画面
public void paint(Graphics g) {
g.drawImage(bg.bg1, bg.x1, bg.y1, this);
g.drawImage(bg.bg2