简介:
周五在天码营看到一个java-snake的学习任务,地址https://course.tianmaying.com/java-snake。看了挺有意思,然后就花了几个小时按照其描述给实现了,因很多地方都是伪码,或者中文描述。所以 写起来也挺有意思,会让你自己去考虑细节代码实现。
项目:
相信大家好多人都玩过这个游戏,在看到怎么实现的逻辑,自己在之前还从未去考虑。写完了小游戏,把几个游戏的小细节给大家描述下。蛇的身体结构是个LinkedList<Node>,其中Node是棋盘Grid上面的点,非像素点;
1,蛇的移动:首先根据移动方向和Snake的head生成一个新的Node,然后把node添加到头部,最后把尾部给删除。就完成了snake的一次移动;
2,吃到食物:上一步生成的新头部节点和当前棋盘上的一个food节点比较,如果是同一个节点。则再把刚才干掉的尾部给添加上去即可;
3,边界检查:碰到边界,也就是Direction方向上的0或者width-1。如果当前head是这个,next时候就失败了。游戏game over;还有一种是碰撞自身,其实拿到新生成的node遍历对比Snake的body即可。也可以维护一个表格覆盖情况,其实觉得还是对比body比较简单些;
4,分层设计:任务的分层还是很好的,Grid,Snake,Node,Direction的基础类,其中Snake的移动,食物生成都是在Grid处理。GameView负责具体Grid里面对象的打印。蛇就是遍历body然后画N个矩形;KeyListener就是监听键盘事件,然后改Grid里面的Direction即可。
5,贪吃蛇详细代码地址见:https://github.com/iruimeng/gluttonous-snake,碰撞自身没写;可能有未测得到的bug,但是已经可以正常玩了。
还有就是看到的轻拍砖。