今天从零开始完成这个小游戏。 完成的方法也是通过一步一步追加功能的方法实现的。

第一步完成的功能:写一个界面

大家看到的吃蛇游戏,一定少不了界面。 因此,第一步是写一个小接口。

实现代码如下:

第二步完成的功能:在界面上画成一格一格的

我们看到的吃蛇游戏,有格子,由格子构成,蛇在里面移动。

重写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扫描关注免费获取更多资源