友情提示:380元/半年,儿童学编程,就上码丁实验室。
昨天忙过头了,来不及发文。抱歉,久等。
闲话就不多说了,今天我们来完成“自动移动”的部分。
正常的贪吃蛇游戏,是自动产生移动的,并且,每吃掉一个苹果,移动速度就会加快一点。
上面这句话,其实就是我们的明确需求。
那么如何让蛇产生自动移动呢?
首先来看下操作的体验是如何的:
我们要从技术角度去理解这个问题。
条件一:
按键这个动作,其实是产生了一个数据。所以我们要改变的,是一个数据的“用法”。
条件二:
而蛇头的坐标,其实是一组数据。每一次蛇头的移动,都是这组数据产生了改变。
结合上面两点,其实自动移动,就可以理解为:
用按键产生的数据变化,通过一种计算,改变蛇头坐标的移动计算方式,并自动循环。
这样是不是就可以理解,之前我们当时为什么要独立出movex和movey两个变量了?
没错,这两个变量代表的就是每个按键所对应的“移动方式”
当按,
上,x轴不变,y轴减10;
下,x轴不变,y轴加10;
左,x轴减10,y轴不变;
右,x轴加10,y轴不变。
而这个移动方式的改变,直接影响了我们的蛇头坐标改变方式。
所以一旦按了某个按钮,改变了movex和movey后,只要循环这个程序,就可以做到自动移动啦!
但这里还有一个关键部分需要改动,就是按键控制的本身。
我们会发现,现在的程序里面,按键是这个循环的触发条件。
而我们需要的,是蛇每吃一个苹果,速度加快一次。
所谓速度,其实就是时间,或者理解为蛇的数据刷新一次的所需时间。
一秒循环一次,肯定比两秒循环一次的移动速度快。
另外一点就是,movex和movey是一个实时变化的数据(只要你按了按键),它本身是不影响蛇的持续移动的。
所以需要在程序的“创建部分”加入新的变量speed,然后同时设定出movex和movey的初始值(即蛇的初始移动方向)。
先把按键部分,移除原来的主程序,让其独立成为一个实时控制movex和movey的部分。与主程序并列自主循环。
在计算apple数据的部分后,加上一个计算speed的部分,并设定其最小值。
最后,在蛇数据的循环里,加入由speed值控制的循环等待时间,作为数据循环刷新的条件。
这样一来,蛇就能够自动移动啦!
接近尾声咯!是不是觉得之前看上去挺复杂的贪吃蛇,已经不那么复杂了?
最后我们还遗留的一个问题就是:如何gameover……
下期见!