「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」
11. 让蛇动起来
1. 创建一个定时器Timer,第一个参数为多长时间比如:100毫秒,第二个参数当时间到了以后找谁this
需要实现ActionListener接口,重写actionPerformed()方法,也就是当时间到了调用actionPerformed()方法
2. 在构造方法中启动定时器,当到100毫秒就调用重写actionPerformed()方法
3. 在重写actionPerformed()方法体中,实现蛇移动
移动蛇的思路:
假如蛇水平向右移动,最后一个身体移动到前面一个身体的位置,也就是x坐标更改,y坐标不动
假如蛇的头部也水平向右移动,蛇的头部x坐标应该在当前位置+25
4. 调用重新画的方法,再重新启动定时器
编写具体代码如下:
运行效果如下:
12. 实现暂停
在重写actionPerformed()方法中进行判断,当标记的值为true时,则蛇进行移动
编写具体代码如下:
运行效果如下:
当按空格键时,提示信息不显示同时蛇开始水平向右移动,运行效果如下:
当再按空格键时,则游戏暂停并且显示提示信息,运行效果如下:
13. 实现转向功能
1. 通过键盘按键更改变量direction的值
2. 在actionPerformed()方法中,通过判断变量direction方向进行蛇头的上下左右移动
编写具体代码如下:
运行效果如下:
当运行后按空格键,然后再按向下方向键,运行效果如下:
当运行后按向左方向键,运行效果如下:
当运行后按向上方向键,运行效果如下:
14. 添加食物
1. 随机生成食物,声明两个变量foodX和foodY表示食物的位置,声明一个随机的变量random,声明食物图片food
2. 在无参构造方法中,生成食物foodX和foodY的坐标
foodX = 25 + 25 * random.nextInt(20);
foodY = 25 + 25 * random.nextInt(20);
3. 在paintComponect()方法中添加食物
编写具体代码如下:
运行效果如下:
15. 吃掉食物
当蛇的头部和食物的坐标完全重叠时,则表示吃到食物,同时蛇的长度加1,并且生成一个新的食物
具体实现思路如下:
1. 在actionPerformed()方法中,判断蛇头x的坐标与食物x坐标foodX相同,并且蛇头y坐标与食物y坐标foodY相同,则长度加1
2. 再重新生成食物的x和y坐标
编写具体代码如下:
运行效果如下:
当吃到食物时蛇的长度加1,然后生成新的食物,运行效果如下: