JavaOO项目TankWar 项目总结

来源:互联网 发布:淘宝待配货是什么意思 编辑:程序博客网 时间:2024/06/05 15:23
项目语言:Java

项目软件:Eclipse

项目时间:6月6日——6月22日

项目内容:TankWar(类似坦克大战1990的小游戏)

项目过程:6日开始,由项目经理闫老师开始带着我们写,把基础的 显示界面、控制移动、碰撞监测、播放声音等事件代码,边讲解 边写并最后发送给了我们,然后让我们自发的理解代码,并接着 代码去衍生的去写其它功能,完善等。比如游戏道具、使得地方 坦克种类变的更加丰富,自定义其他规则等。于22日结束该项目。

项目难点:

1.界面问题:整个游戏界面是不断更新的,所以需要启动一个线程在后台不断的画出新的界面,同时删除旧的界面,一直不停的刷新。就需要用到Timer类,该类实例化需要两个形式参数:int类型(例如:传入50,就代表每50毫秒执行一次ActionListener监听事件),ActionListener监听事件(系统要执行的操作,例如:刷新界面)。其实刷新界面并不是在ActionListener监听事件中完成,而是在Swing图形界面中的Windows类下的print()方法,print()方法需要一个参数Graphics画笔类,来画图形界面。而在ActionListener监听事件中只需要调用repaint()方法实现调用paint()方法。

2.碰撞检测:项目中有地形障碍物,不同类型的坦克,所以需要使用碰撞监测,判断坦克是否发生碰撞,能否继续移动。碰撞检测原理是两个物体是否有交集,所在的面积是否有重叠补分,有则为发生了碰撞。在Java中,Rectangle矩形类中有一个intersects()方法是监测两个矩形是否发生了碰撞,所幸的是我们并不需要去写检测碰撞,只需要实现Rectangle矩形类和调用Rectangle矩形类中的intersects()方法,就可以检测两个矩形物体是否发生了碰撞。

3.播放音频:坦克的移动和发射子弹还有击中物体都有与之对应的声音,那么怎么播放声音呢?在网上搜了一下,发现可以使用如下代码播放音频:



但是这样,必须用设置一定的休眠时间来让音频播放,但是这样会造成线程的停止,所以并不好,我尝试把段代码放入一个新new的线程中,但是好像并没有什么用。最后只能抛弃这种方法,使用老师给我们封装好的声音播放类。

4.出现坦克:战场(界面)上的坦克数量是在一定的范围内,每击毁一辆敌方坦克,战场上就会出现一辆新的坦克,直到达到关卡限制(每个关卡地方坦克数量是一定的)就不会再出现,然后击爆敌方所有坦克进入下一关。那么战场上出现一辆新的坦克并不是在战场上随机出现(因为如果这样的话,敌方坦克出现在自己后方结果就太糟糕了。)所以我设定了四个出口提供地方坦克出现,每一次出现坦克就需要去检测该出口是否被占用,没有的话就派出一辆新的敌方坦克,被占用的话就需要去检测下一个出口。如何检测出口是被占用就需要把场上所有可能出现在敌方坦克出口位置的物体拿去和出口位置做碰撞检测,如果发生碰撞就判断下一个出口,如果所有物体都没有与该出口发生碰撞,那么这个出口可以派出一个新的坦克了。

5.道具效果:该项目我设计了共六个道具,如下介绍:


每个道具都有不同的功能,其中较为难点的是:时间、铁锹、金星(根据图片形状命名)。暂停就是在敌方坦克执行事件的时候加个判断,如果满足条件才执行地方坦克执行事件,反之跳过。铁锹需要找出BOSS的位置,并且在BOSS的周围的创建钢铁墙,在一定时间后,删除创建的钢铁墙(创建墙的时候加在集合里面,世间到了只需要把集合清空就行了)。金星就需要去改数据,判断拾到金星击中铁墙是击毁,而不是子弹被铁墙阻挡(添加一个boolean属性),在检测子弹碰撞其他的物体的时候判断是否有金星效果(我设置的是int类型,持续一定的时间),有就实现金星的效果。其余的道具就相对比较简单了。

6.双人游戏:添加一个玩家,并不是添加一组按键那么简单,需要改的地方有很多,出现位置不同。不同的玩家重生的位置也是不同的。具有不同的属性,要执行不同的操作,拾到道具自己对应的属性也将改变。每次执行的时候也需要判断是哪个玩家在执行什么操作,这些都需要在适当的地方进行判断,确保程序不会分辨错误玩家,造成系统bug。

7.封装:我们要尽可能实现类的单一性,规定每个类都是单一的职责,类的行为也尽可能通过实现接口来完成,实现低耦合、高类聚的特点。

项目总结:

这此项目为期十三天(除去假期),其主要目的是回顾JavaOO所学的知识,回顾并巩固,如何创建对象、实现接口、资源共享、引用传递、变量的应用等等,通过本次项目,我认识到了自己不足的地方,例如项目开始的设计分析没做足,编写代码的时候思路、逻辑等还不够清晰,导致编程的过程中,写了之后又改,改了写,写了改这样的情况反复出现。编程的过场中也出现了较多的异常和bug。还有Scoket编程,对Scoket编程理解不够,所以TankWar联网并没有做出来,只做了一个有很多bug的半成品。在学习完JavaOO之后,我对书本的知识也是一知半解,或许知道个大概,但是问个所以然,我就迷茫了,对理论基础知识掌握的并不牢靠,问一个问题,换一种问法或许我就答不上来了,这也证明了我们课外的阅读量太少,积累的也太少了。同样的,本次项目我们也学到了些许东西:在编程的路上,或许会遇见bug和难点,但是我们静下心,仔细思考,难点和bug终将会被解决的,实在不懂的,也可以虚心向他人请教,这也是学习的过场,每解决一个问题,都是一份收获。出的错误越多,你收获也就越多。编程需要一个冷静的头脑,不是遇到问题就说好难,不会等,当我们根据代码一步一步的检查、调试等,总会发现代码的地方在哪,同时也说明了清晰的逻辑思维对编码的重要性。

项目结语:项目虽然结束,但是学习并没结束,通过项目了 解到了自己的不足,接下来就是弥补和以更高的热情和严 谨的态度投入到学习新的知识中。


0 0
原创粉丝点击