今天从零开始完成这个小游戏。 完成的方法也是通过一步一步追加功能的方法实现的。
第一步完成的功能:写一个界面
大家看到的吃蛇游戏,一定少不了界面。 因此,第一步是写一个小接口。
实现代码如下:
第二步完成的功能:在界面上画成一格一格的
我们看到的吃蛇游戏,有格子,由格子构成,蛇在里面移动。
重写paint方法时,单元格只需要在旁边画几条线,在垂直方向画几条线。
代码如下。
效果如下。
第三步完成的功能:建立另外的线程来控制重画
为什么这么说呢,因为蛇的动作是指改变蛇所在的位置,重新画画,是我们看到的动作。 因此,这里用一个线程控制重绘。
1、建立了新的MyPaintThread类,实现了Runnable接口
2、将代码添加到SnakeFrame的launchFrame方法中:
newthread(newmypaintthread () ).start ); 很好。
完成功能:利用双缓冲来解决闪烁的问题
第四步完成的功能:在界面上画一个蛇出来
吃蛇游戏中的蛇用一系列的点来表示。 现在我们来模拟一下链表。 链表中的每个元素都表示一个节点。
首先,创建一个新的表示构成蛇的节点的Node类,运用面向对象的思想,发现该类应该具有以下属性和方法:
1、位置
2、大小,即长度、宽度
3、方向
4、结构方法
5、draw方法
节点类的代码如下:
irection是枚举,具体如下:
另一方面,在Snake类中,使用面向对象的思维,Snake类应该具有以下属性和方法
1、头节点
2、尾部节点
3、构造函数
3、draw方法
具体代码如下。
您只需要在SnakeFrame类中新建Snake对象,然后调用Snake对象的draw方法。
效果如下。
第五步完成的功能:通过键盘控制蛇的上下左右移动
首先想到的是将keyPressed方法添加到Snake类中,然后在SnakeFrame的键盘事件中调用Snake对象的keyPressed方法。
注意:蛇的移动是通过向头部添加单元格,向尾部删除单元格的思想实现的。
具体如下。
将keyPressed方法添加到Snake类中。 主要根据键盘上的上下左右键确定蛇头节点的方向,move方法根据头部节点的方向向头部添加单元格。
由此,实现了通过键盘移动蛇。
完成的功能:蛇吃蛋
首先新建鸡蛋Egg班。
类的属性和方法如下:
1、位置、大小
2、结构方法
3、draw方法
4、getRect方法:用于碰撞检测
5、reAppear方法:复产鸡蛋的方法
代码如下。
怎么能判断蛇吃了蛋,蛇吃了蛋呢? 这需要碰撞检测。
在这里,我们将eatEgg方法添加到Snake类中。 蛇吃了蛋之后,蛇的长度需要增加到1。 这里要处理的是给蛇头添加节点,鸡蛋吃完后,再次随机下蛋。
代码如下。
publicRectanglegetRect (
返回新恢复(head.col * block_width,head.row*BLOCK_HEIGHT,block _ width,BLOCK_HEIGHT ); }
至此,蛇吃蛋的功能完成了。
完成的功能:添加边界处理
在我们熟知的吃蛇游戏中,众所周知,当蛇撞到墙上或撞到自己身体的一部分时,游戏就会结束。 让我们实现这个功能吧。
向Snake类中添加checkDead方法
如果蛇撞到墙上或者撞到了自己的某个部分。 调用SnakeFrame类的gameOver ()方法进行一定的处理。
处理此游戏的方法是通过设置布尔变量来停止游戏并提供相关信息。
具体代码如下。
至此,蛇是否撞到墙壁或撞到自己的一部分的功能已经完成。
总结
以上基本实现了吞噬蛇的基本功能。 其他一些功能不再介绍,如添加得分记录、用键盘上的按钮控制游戏停止、重新开始、再次玩游戏等。
虽然没有介绍以上功能,但代码具有实现这些相应功能的功能。
完整的代码可以在这里获得。 https://github.com/wojiushi mogui/snake
扩展阅读
微信页面代码注册实战(带代码) ) ) ) ) ) ) )。
干货|京东购物车Java架构的实现与原理!
Spring MVC Spring Mybatis实现支付宝(Alipay )的支付功能(文字详细) ) )。
资料来源: https://www.Jian Shu.com/p/e 7d 72 be 38 BC 4
微信公众号: javafirst扫描关注免费获取更多资源