90坦克小游戏基本核心开发完成

来源:互联网 发布:新手淘宝网卖什么 编辑:程序博客网 时间:2024/05/22 08:01

接触java一年了,在过去的一年里,忙忙碌碌自学完了java基础知识,从零电脑基础,javaSE,mysql,oracle,servlet,jsp,struts,hibernate,spring等基础知识完完全全学了一遍,学完之后写代码感觉自己代码没有规范,因此考虑将java学习第二遍,这一遍不仅仅学习基础知识,更重要的是学习OO编程思想,学习代码书写规范等等。

这个经典的90坦克游戏,很多初学者都开发过,同样我也不例外,其中具体的元素:

坦克类型:敌人坦克一共5种类型,浅蓝色坦克是最普通的一种,在敌人坦克中70%的概率都会出现浅蓝色坦克。粉色坦克发射出的炮弹速度快,战斗力比浅蓝色坦克要强一些。红色坦克移动速度快,比较灵活。绿色坦克是重型坦克,击中4次才能将其消灭。最后一种深蓝色坦克是所有坦克中战斗力最强的,它有着以上几种坦克具有的所有特性,不仅射击,移动速度快,而且生命值也很长,需要击中它6次才能将其消灭。我的坦克是黄颜色的。

墙的类型:在游戏界面中除了坦克还有障碍物,障碍物分为3种,一种是砖墙,砖墙可以阻止坦克移动,但用炮弹可以打穿;一种是铁墙,用炮弹是不能打穿的;一种是河流,可以阻止坦克移动,但炮弹可以穿过去。

游戏运行效果图:


开发这个游戏大概花了3天的样子,开发的过程中加深了对某些知识点的理解,以下总结几点:

1.线程安全:整个游戏中多次用到集合对坦克,子弹,墙的砖等对象的存放,而这些对象大部分都是线程,此时必须考虑线程安全的问题,ArrayList和Vector如何取舍?ArrayList是异步的,Vector是同步的,因此在此游戏中应当毫不犹豫的使用Vector,因为它是线程安全的,他能保证存放在里面的对象数据不会被并发访问破坏

2.对集合的操作:基于线程安全的考虑,存放键值对的时候同样选择Hashtable,当一辆坦克被击中后,应当从Hashtable中移除此坦克,当遍历Hashtable的时候必然使用Iterator,在找到此坦克时,并不能直接使用Hashtable的remove方法,否则会报出当前线程更改的异常,必须使用Iterator的remove方法,因为API中明确注明了:在创建 Iterator 之后,如果从结构上对 Hashtable 进行修改,除非通过 Iterator 自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出ConcurrentModificationException;一开始没注意这句话,在报了错误之后,深刻理解了这句话的含义

3.对对象的理解:游戏中,各个元素都是一个对象,坦克是一个对象,子弹是一个对象,墙是一个对象,组成墙的砖也是一个对象,这些对象应该具有哪些属性,必须提供哪些方法,怎样设计坦克和坦克,坦克子弹墙之间的关系,都必须考虑得清清楚楚

当然,这个游戏有点简单,但对于我这种初学者来说,还是有必要加深一下对这些对象的理解的。

同时里面还配上了经典90坦克游戏的声音,玩着自己开发的小游戏,找到了童年的感觉,别有一番滋味……