作为一个来到黑马接近一个月的新生,这一个月的时间真的体会良多。现在JavaEE的基础班快结束了,我跟大家分享一下基础班的毕业项目——坦克大战。
由于本人之前没有计算机专业的背景,也不是科班出来的,纯菜鸟,而且学的过程也很一般,所以以下分享只能让各位看官见笑了,谢谢包涵。
坦克大战的话其实主要有两个要点(我认为):1、坦克是怎么移动的?2、如何检测到坦克与障碍物发生了碰撞?
对于第一个问题,经过学习以后,我认为可以概括地认为:在游戏里,坦克其实一张图片,想要坦克移动,其实只要改变图片对应的坐标;通过键盘监测到对应方向按键,从而增加或者减少对应坐标的值即可;首先写个坦克的移动方法,根据传入的方向发生坐标的改变;再写个方向direction的枚举类,指定上下左右四种方向;最后,在键盘监测方法里,通过监测到不同方向按键,调用坦克的移动方法,并传入对应方向。
第二个问题,跟坦克一样,其实铁或者墙都是图片,只需要获取到两者的x,y坐标值,宽高,借助工具包的碰撞检测方法,传入对应数据即可判断。但是该方法需要两者相交才可以判断出碰撞,但是实际上,我们需要在两者刚好接触到的时候即判断为碰撞。因为障碍物是静止的,坦克是移动的,所以根据不同的方向,对坦克当前的坐标值增或减,导致碰撞方法能在两者刚好接触的时候就检测到碰撞了。当检测到碰撞后,输出一个标记到坦克移动方法,使该方法提前返回,不走下面坐标改变的逻辑,故坦克不能移动了。由于我们输出到坦克移动方法的标记为坦克碰撞方向,而移动方法的判断是当碰撞方向不为空值时,就返回提前结束,这样会出现问题,就是碰撞方向一直都有值,坦克就卡死了;解决方法为:在移动方法里增加多一个判断条件,即当碰撞方向与按键方向一致时,才返回提前结束,这样子,其他方向就能继续移动了。但是就算当你离开障碍物后,之前的碰撞方向还是不能走,因为碰撞方向的值一直都没有改变;因此在检测碰撞方法里面增加:当当前不为碰撞时,还原碰撞方向的值为null,这样,在你离开障碍物后,也能继续走之前的碰撞方向。
最后分享一下,我的学习体会吧。我觉得学习Java最重要的是坚持,要有坚定的目标。这一点有点老生常谈了,但是事实就是如此,你如果静不下心,如果耐不住寂寞,如果不能坚持,那么你永远都无法真正掌握一门技能。纵然你再有天赋,不坚持,永远到不了终点。我觉得你只有想清楚了自己得而学习目的,你才能更好的坚持,也才能更好的继续学习。
其次,多思考,这一点学什么都一样,不思考,不多问几个为什么,你永远都领悟不到更深层次的东西,同时,有问题尽可能的去查找,比如上网搜索或者查阅书籍资料,如果找不到再去请教身边的同事、盆友或者老师。这样做,一方面能够增强你查阅资料的能力,另外一方面能够让你养成独立思考问题的习惯,而这两者都是对你以后很有帮助的,特别是随着你的能力的增长,研究的领域慢慢深入,能帮到你的人会越来越少,这时候你只能靠自己。
最后,要善于总结和分析。就是在自己学完一个板块要自己总结一下,这样有助于你梳理知识点,同时也方便以后查阅和复习。
|