0%

Aircraft Wars by Java

Aircraft Wars by Java

前言

  1. 这是一个算是自己第一个小项目吧,在学校的短学期完成的一个实验报告,老师有参考代码,网上也有七七八八的,但是,这是我完完全全自己一步步思考一步步按下手下的键盘敲击而成的第一个,或许不是特别完美,及其简陋的小项目,或许这终于能称得上是项目了吧,写了一个叫雷霆战机的游戏。

  2. 这一次的课程设计,使我受益匪浅,我从仅仅是“纸上谈兵“到可以编写出一个小游戏的过程,这个过程所经历的努力,和对面向对象的深刻理解让我终生难忘,那种从单纯上课无法学到的东西,就例如:让我知道了有Java适配器并且使用这个东西,非常的巧妙,就像手机是Type-c接口,但是只有一个传统的MicroUSB的充电线,那么就弄一个转接头就可以充电了,而适配器就像这么一个转接头,还知道了我若想实现一个接口而不想把所有的方法实现,可以通过匿名内部类去只实现其中的一个接口,比如Timer中的schedule,还初步了解了Swing的用法,通过自学将数组改成集合,让我知道了Java集合有多么的好用。

  3. 而那种面向对象编程,和多态的美妙,那种使用父类或者一个接口去归类几种类,在主函数中统一调用,若是A类对象则用A方法,若是B类对象则用B方法。面向对象去编程,需要哪一些对象,去为之做一个类,去编写他的行为,还有封装,面对一项功能,我们可以尽可能封装在外面或者别的类内,从而更加有层次,在代码量特别多的时候更好去理解,去梳理思路等等,我认为这是我收获最大的,让我深刻的了解了面向对象的三大特性:封装、继承、多态。

游戏规则

  1. 首先是点击游戏开始,需要有游戏开始界面
  2. 其次是消灭一个敌机要加分,消灭大敌机加的分要更加的多
  3. 再然后是消灭蜜蜂加一倍的火力或者加一条生命,如果是宝箱就直接四倍火力加两条命
  4. 当英雄机碰到其他任何飞行物(包括宝箱或蜜蜂),都掉一条命
  5. 火力5秒钟减少一条子弹
  6. 当生命值为0的时候游戏结束
  7. 再次点击可以重新开始游戏

设计思想

  1. 拿到素材后首先对界面的大小进行设置,界面需要显示的素材有三张图片,开始(start)(400x654)、结束(pause)(400x654)、背景(background)(480x852),然后当然选择了400x654作为界面的长宽,因为如果用背景图480x852的长宽作为界面的宽度,那么会发生暂停界面出现的时候,边缘会露出背景图片。
  2. 首先想清楚有哪些对象、有蜜蜂、大宝箱、敌机、大敌机、子弹、英雄机、然后呢蜜蜂和大宝箱可以作为一类,都是获取奖励的,敌机和大敌机可以作为一类、都是获取分数的、所以就想到了接口,给前一种类型,写一个接口去定义一个抽象函数,用来返回奖励类型,进行在子类中实现,后一种类型、写一个接口定义一个抽象函数,用来返回得分,在子类中实现,然后,因为当子弹碰到蜜蜂、大宝箱、敌机或者是大敌机,都会被消灭,而英雄机碰到蜜蜂、大宝箱、敌机或者是大敌机,都会掉一条命,而子弹碰上敌方单位也会消失,英雄机也需要有以下的功能,所以这所有的类可以给他们建立一个飞行物的父类,因为他们都同样有x,y坐标、有速度、有图片、并且有图片的宽高、并且要为他们定义一个outOfBorder()是否出界的方法、和一个step()每下一秒移动改变位置的方法。
  3. 在老师最初的要求上我加入了大宝箱和大敌机还有大宝箱和蜜蜂出来的方向我希望他随机,所以写了一个随机方法、所以在大宝箱和蜜蜂,除了实现父类的方法和接口外,添加了初始运动方向的随机变量,就没有了。
  4. 而大敌机和敌机仅仅是实现父类的方法和接口外就没有添加额外的方法了
  5. 子弹实现了父类的方法后就没有进行添加了
  6. 英雄机不仅实现了父类的方法和接口后,需要有鼠标的位置值、还需要有鼠标移动的方法moveTo(int x, int y)、需要有判断撞到敌机的方法hitEnemy(FlyingObject flyingObject)、需要还需要两个set和get函数去获取私有变量的火力和生命值。
  7. 最终的便是带有main函数的主类、主类就需要获取图片、需要使用Java Swing进行显示游戏、需要监听鼠标、需要有自动生成敌人对象、自动生成子弹、自动进行下一次屏幕刷新后,所有飞行物飞行的下一个位置的计算、需要一个游戏规则(进行子弹与敌方单位碰撞,敌方单位与英雄机碰撞会发生什么)的方法。

项目代码

当然也是我第一次将自己的第一个项目学着用git通过IDEA将项目公开的存在我的GitHub的仓库上链接在下,感兴趣可以下载来玩一玩,但是别嫌弃它简陋 0.0

链接在这 ≖‿≖✧

游戏的部分截图

1

2