文章目录


提供了必设源码:​https://github.com/abcnull/IndependentPlaneGame​

  以前其实还没听说过本科毕设有多难,研究生和博士生到是知道难度有些大,在网上听很多人说本科的毕业设计很水,虽然目前为止我还没有答辩,还有一周,但是就我的毕设经历来讲,我觉得本科毕设真的不简单,也许是网友们实力太强或者是大学检查的很水,或者说我的实力太差了。

  我的毕设是做个游戏APP,起初我本来选题是连连看APP游戏设计,但是后来遇到一点事情说题目重复了要求更换,于是我在4月初的时候去换题目,结果是换成的俄罗斯方块游戏改进也重复了,我便在导师的要求下换了一个类似于“雷霆战机”那样的飞行射击类游戏APP,当时学校没什么事情,我就一直呆在家里,从四月份开始,要知道5月初就要中期检查了,5月中旬还要论文检查之类的,5月底要答辩了,所以说我做这个APP游戏还是时间很紧迫的,所以这段时间一直没有更新博客,时间都去做毕设了,今天开始的后几天可以连续写博客了。其实我以前只学过一点Android开发,而且忘了很多,Android游戏以前都没做过。

  这次的游戏APP题目是飞机游戏APP设计与实现,幸好我在寒假的时候没有太松懈,复习了Android的一些内容,学习了View的相关知识,还看了网上对于俄罗斯方块的实现(虽然忘了),同时仔细看了安卓游戏从零开始的入门,看了不少东西,对做这么一个题目也不能说完全没有信息。后来我在网上也查过许多的资料,终于在4月快结束的时候基本把项目弄好了。使用的是eclipse,View框架,因为我以前一直用eclipse没用过Android Studio,而且我也没系统的学习过一些游戏引擎,所以只能用View来做游戏,而且View足够用了,虽然逻辑部分可能很复杂。

  还记得我4月份在家做毕业设计,几乎连续12天早上睡醒就直接打开电脑码代码做毕业设计,就这样一直做,做到晚上11点多便去睡觉,除了上厕所偶尔出个门,连吃饭都是在电脑前。4月底终于把项目基本完成,后来我在5月份的时候给项目添加了许多新的功能,而且在5月份前几天先去给另一个老师进行中期检查,老师估计只看了不到一分钟,他直接看了在我手机上运行的游戏的效果,稍微问了几点问题,然后就行了,感觉中期检查好水啊~。当时中期检查我还担心看不看论文,因为我还没写论文,不过幸好中期检查根本不看论文。后来的几天我把论文补上了,一开时论文的格式问题非常让人头痛,什么设置页眉页脚,还有许多需要注意到的格式问题,我调了很久,我还记得我写了2天2夜,包括调整格式,写论文,修改论文,查重等,偶,对了忘了提及了,在写论文前,我添加了许多新功能。论文一开始写了2w多字,然后去查重,发现22%,这个在我意料之外,因为都是我自己写的,竟然这么多重复,后来我把很多句子改的比较刁钻,再一查16%,我还不满意,再改再去查只有5%了。后来我那论文给到时检查,结果导师说不合格,我其实一开始还信心满满的,结果像被破了一票冷的冷水,是我的行间距有问题,再加上由于我过于追求重复率低使得我改的某些句子有点读的不通顺。后来我只得再修改,现在把句子改通顺了,但是改的只剩下1w7的字了,查重是15%,接下来我尽量想办法改到10%以内。导师说10%以内会比较稳。

  现在我谈谈我的项目实现功能,这是一个飞行射击游戏,里头的图片我是从百度图片里头搞的,然后用美图秀秀来抠图(美图秀秀学了半天),游戏进入的界面我后来美化了一下也变得好看了,图片都是从网上弄得然后自己修改。游戏可以设置游戏难度,可以设置音乐,可以查看作者,可以查看玩法,进入游戏,你可以触屏移动控制战斗机,战斗机会一直发射子弹,默认是黄色单发子弹,游戏中有黄色的小敌机,绿色的中敌机,红色的大敌机还有章鱼一样的老板敌机,老板敌机可以发射火球来攻击战斗机,当然老板敌机比较难出现,它是每隔一定时间才会出现,并且界面上只能有一个老板敌机。在游戏中玩家可以获得5中道具,其中有3种是子弹道具,这些子弹道具都是蓝色子弹,子弹道具分别有双发的子弹道具,战斗机为不发射子弹的子弹道具,战斗机两侧发射子弹的子弹道具,还有炸弹道具和生命值恢复道具,在屏幕上点击两下,界面上所有的敌方单位都会爆炸,战斗机最初有3条生命,战斗机每被击中就会变白几帧,每次接收到回血道具就会变绿几帧。音乐是循环播放的,只有背景音乐,没有特效音乐。我还记得当时选音乐时候选了很久,想选一首好听的同时又比较适合的。游戏可以暂停可以重新开始,还可以查看FPS,我是小米5,可以发现非常稳定的维持在60帧/s。

  项目的一些部分是怎么实现的呢?我大致讲一下,因为我在其他博客中会写一点。项目主要是通过View来代表整个游戏界面,在onDraw()中绘制游戏界面,每执行一次绘制其实就是一帧画面,有postinvalidate()方法可以重绘,这个只要在必要时候写就行了。因为手机绘制一帧的画面是非常快的,只要能保证你会的每一帧中图片的位置都不同就行了,在游戏中有许多精灵对象,游戏分三种状态,我只要在游戏进行态时候,执行某一精灵对象的绘制方法,代表该精灵在这一帧中绘制出来了,其实精灵的绘制方法就是安卓graphics包下的drawBitmap之类的方法,将位图绘制在界面上即可,那有人会问,你怎么改变每一帧精灵的位置呢,其实精灵的绘制方法不是直接写drawBitmap之类的,而是分为三个方法,第一个方法负责移动精灵位置,第二个方法负责绘制精灵位置,第三个方法负责检查销毁之类的即可。在游戏进行态的时候,只要战斗机没有被销毁(因为我是根据战斗机是否被销毁来判定游戏是否在结束态),那么最后在执行postinvalidate()方法实现重绘,只要在游戏进行态,就会不断的循环。其中有许多的特殊功能,还不是很好说清楚,一些经验和特殊功能我会在其他博文中写清楚。

  我这个人有点强迫症,有点完美主义,做的不好就非常不安心。接下来的数天我还要改论文,项目做得是差不多了,我也的确做的很累了。项目以后再做些其他的游戏出来,就是通过这次毕设,使我对游戏制作变得非常感兴趣,有时间去学习一下unity3d,再去做做游戏。

  这次毕业设计真的是一个很难得的经历,确实学习到了不少东西。由于我非常怕遗忘,而且我认为经验非常重要,于是写下这篇博文给大家分享我的毕设经历。我码字太快了,一下子就码到这里来,可能有很多错别字还有语句不通的问题,希望提醒(#​.​#)。