由于疫情影响,宅在家里,突然想写一系列掌控板的游戏出来玩玩,于是贪吃蛇,算是入门游戏了。贪吃蛇很常见,看似简单,却蕴含非常丰富的游戏基础知识。
接下来,会继续写一些掌控板的游戏,欢迎大家关注!
重要知识点:
(1)列表
(2)字典
(3)队列(数据结构)
1. 蛇的构成
使用列表she存放一整条蛇,而蛇又有若干节蛇身组成。每一节蛇身都有它的位置和方向,固定义字典sheshen表示一节蛇身,xx表示该节蛇身的横坐标,yy表示该节蛇身的纵坐标,direc表示该节蛇身的运动方向。
当然,整条蛇拥有一个共同的移动速度speed,速度,我们设计游戏关卡的时候在做讨论。
(1)假设一条长5节的蛇,可以分为一下5个部分
蛇头sheshen0,控制着整条蛇的方向,蛇的其他部分依次跟着自己的上一节操作。
(2)蛇身字典
(3)蛇列表
2. 蛇移动的方向
蛇移动的方向有4个,即右上左下,分别用1-4表示。
实际上,游戏中蛇不能直接后退。因此,蛇只能往前或左右移动。我们设置N、T、P、H这4个按键控制蛇头移动的方向。
列表she的第0项为蛇头,蛇头字典中direc键代表方向,假如需要蛇向右移动,则蛇当前的方向不能向左,即不能为3.
3. 食物
食物也是一个4*4px的闪动方格,它出现的位置是随机的,但不能出现在蛇头当前位置。
定义变量foodState表示食物的状态:1显示和0隐藏。
定义变量xFood作为食物所在的横坐标,数值是0~123之间的随机数。
定义变量yFood作为食物所在的纵坐标,数值是0~59之间的随机数。
那么,为什么是123和59这两个数呢,因为食物大小为4,而OLED显示屏的大小为128*64,所以取127-4和63-4。
设置定时器1,用于显示食物。当前食物状态为1时,才显示食物,并且将其状态修改成0。如果状态为零,直接不显示,并将其状态值修改成1。
4. 游戏主循环控制
设置gameStart变量,该变量为“真”时,启动游戏主循环,否则停止游戏循环。游戏主循环如下图标志所示。
5. 绘制整条蛇。
先获取蛇的长度,再由蛇头到蛇尾一节一节绘制蛇身。
6. 闯关成功和闯关失败的判定。
建立函数gradeFun,如果成绩大于5,则闯关成功,可以进入下一关。此时,停止游戏主循环,停止计时器1食物的生成。
点赞