友情提示:380元/半年,儿童学编程,就上码丁实验室。
之前的内容结束后。大家会有一些懵了,这是正常滴。
好像大家对这方面的编写不是很感兴趣的样子,太复杂了?
但我还是先要把这一章给写完。
随着程序啊,数据啊,越来越多。
检查起来都比较费精力,是吧。
别急,其实这种看着很大的家伙,都是可以拆散来看待的!后面马上要做这件事。
今天我们来进一步优化这个程序。
很多朋友说,经过上一节课的内容修改后,蛇不见了!(多数是因为显示模块没调试正确)
那我的问题就是:你有找过原因吗?
之前的程序里面,显示模块特别多,光是理清楚这些显示模块的清屏顺序,就够费劲的。
这里有两个问题产生:
1、我们要解决清屏的问题。
因为EV3模块里面,清屏是把整个屏幕都给清干净的。
这就意味着,屏幕上很多需要保留的点,也会被清掉。
要解决这个问题,只能让程序每一次刷新数据后,判断出哪些点是需要保留的,哪些点是需要清除的。
这……………………
工程好像大了点,是吧。。。
2、我们要解决数据读取的问题。
因为贪吃蛇每吃一个苹果,会自动延长一格,意味着显示的内容会增加。
这就意味着,程序里要增加更多的显示模块?
当然,我们上节课用阵列解决了数据记录的问题。
而蛇尾,其实是上一次,或者再上一次的蛇头位置。
这句话一定要理解!
要解决这个问题,我们要研究一下如何合理的显示出我们需要的数据部分。
这两个问题,我们可以独立出来思考,不需要急于去修改原来整体的程序。
首先,来解决2#。
拷贝出蛇的移动部分,和读取部分,重新作出如下这个独立的控制蛇的程序。
这个程序,和直接控制“一个点”移动的程序,在运行后,得到的体验几乎是一样的。但区别就在背后,我们的程序是记录下了点的每一个操作步骤的!即,所有移动过的轨迹,都被保存了下来。
只要我们的程序中,没有清屏的指令,这个蛇就可以一直延长下去。
但蛇是有长度的。
那么,假设蛇的当前长度为3,该如何设置呢?
可以这样来理解这个问题。
蛇的长度为1的时候,我们的需要从阵列索引中,读取最新的那个数据。
这个时候,索引值就是循环次数+1。
为什么是+1?
因为初始值,是我们自己已经输入的了,我们读取的最新数组,是第二个索引值,也就是1的索引位置。如果是第100次移动,那就要读取索引100的位置而不是99。
这个操作,可以借助一个新的变量来完成。
times(次数)。这个参数,我们用以读取蛇头的位置。
请在大循环的一开始增加这个变量。
那么蛇尾如何处理?我们不是不清屏了吗?
这里就要解决上文中1#的那个问题了。
如果每次都要重复读取多次数据,蛇越长,读取的工程量就越大,这显然是不靠谱的。
其实清屏还有更方便的方法!
假如在白板上,画一个黑色的点,除了用板擦擦掉它,还有什么办法可以让它消失?
答案:在黑色部分上涂上白色呗……
如果每一次运行,都在蛇尾上,涂上白色的点,蛇之前的轨迹,不就消失了么?!哈哈哈。
这被我叫作“局部清屏”!
操作起来很简单。
我们复制黏贴一下黑色点的部分。(我们成为蛇头)
在它的后面,增加一块,蛇尾部分。
修改一下显示的方式:填充,真,显示,白。
而根据上面的逻辑,蛇头是time读取的,那么蛇尾,当然就是times-1啦!
那我们思考一下,如果是蛇的长度为3的时候。
蛇头和蛇尾跟times的关系又如何?
蛇头,当然是不变的;
蛇尾,times-2不就行了?!
理解之后,我们就可以把这部分程序合并到原来的大程序里面去啦!
注意,上面的这个独立的蛇头蛇尾程序,在独立运行的时候,只能设置为1的长度,不然会报错,这是为什么呢?请自行思考,我们下节课,要把整个程序来整理一遍思路,大家就会清楚了!
为之后继续优化,打好基础!
一定要动手尝试,然后多次修改进一步去理解各部分的功能!
下次见!