学习了Java的基础的知识后,我们可以做一个小的飞机游戏来锻炼一下自己的编程,并且,通过这个小游戏可以让我们更好的理解我们之前所学过的对象,类,封装,多态,和继承等的实际含义,当然,一个程序并不能让我们充分理解这些知识,但多次实践之后,我们对这些知识的理解更加透彻。
我们所建的游戏想要达到这个这样的效果:我们通过键盘控制飞机前后移动,躲避炮弹,看谁坚持的时间长!如果碰到炮弹,则发生爆炸,游戏结束!并显示本次生存的时间。并且飞机不能碰撞边界,碰撞后也会爆炸。
这个小游戏的思路大致上是这样的,首先建立一个可以显示出来的窗格,因为要画一个可以显示的窗格出来,所以我们的类要继承自JFrame。在类里面建立一个一个launchFrame的方法,即调用一个窗格来实现我们要画的内容。这时就要使用AWT技术了,虽然该技术是Java中最老的GUI技术,非常简单,但是实际开发中很少用到。我们用到的也就仅限于画出基本的窗口和图形加载。这是要单独创建一个
大致的效果图为:
建造完窗口之后呢,我们要把游戏的背景和飞机小图标添加到游戏中去。 我们可以将一些辅助性的工具方法通通放到GameUtil中,便于重复调用,所以要建一个GameUtil的类,大致可以这样去写:
创建好类之后,要将该方法调用到MyGameFrame类中去,大致写法为:
做出来大致效果图为,在这里呢我们首先要将飞机和背景的图片传进去,可以在src下新建images文件夹,将图片粘贴至images文件夹中。
因为我们要做动态的效果,所以必须加上多线程才能达到我们所想要的效果。可以这样来做
写完这一步呢只是写了一个让多线程帮我们重画的方法,而真正要实现,还必须让它启动,所以要在launchFrame中写入
只有这样才能启动这个效果。
因为我们要做这个小游戏,里面涉及到了飞机,子弹,爆炸效果类,所以我们可以建立一个GameObjec这个父类,然后建立像飞机,子弹这些子类,所以呢我们可以定义好这些类
然后呢我们要将这些方法在MyGameFrame中调用我们可以这样去写
因为我们刚刚在游戏中给飞机加了动画,效果如下:
因为时游戏吗,所以我们要自己有所操控,可以写入键盘监听功能,达到键盘控制飞机的功能。
在MyGameFrame中刀调用这个功能,写入;
当然还要在launchFrame构造窗口中启动键盘监听功能:
这时呢效果就如下
能够被键盘所控制。
接下来了就要做出子弹的效果了,所以我们要建一个类实现炮弹的功能
之后在MyGameFrame中刀调用这个功能,在这里呢我们建立了50个子弹
并且在paint方法中将他们赋值
大致效果是这样子的
然后我们为了游戏的效果要让飞机碰到子弹时就爆炸并且写出一共花了多长时间,判断是否碰撞呢就涉及到界面中怎么样时碰撞了,在java中呢通常使用通常是用“矩形检测”原理实现的。 我们在前面提到,游戏中所有的物体都可以抽象成“矩形”,我们只需判断两个矩形是否相交即可。对于一些复杂的多边形、不规则物体,实际上是将他分解成多个矩形,继续进行矩形检测。
public
Rectangle getRect(){
return
new
Rectangle((int)x,(int) y, width, height);
}
并且呢,我们之前加入过这段代码去获取到图片的矩形的坐标。这时就要写plane类了
并且在MyGameFrame中写入
在飞机类中加入判断是否还活着的live属性,然后做出判断是否还存活。 因为我们想达到爆炸效果,所以我们找了一系列图做出一个动画。还是首先将图片粘贴至images文件夹下面。然后开始写爆炸exploed类
就可以达到爆炸的效果。这时大致上就已经完成了这个小游戏,还有一个计时的功能有兴趣的同学可以仔细去了解一下,最后放上效果图和百度云源码地址:
百度云源码地址为:
链接:
https://pan.baidu.com/s/1AlK1Xnr6LFkeozaxv3qE1g
提取码:3grl