最新消息:

【EV3进阶】制作小游戏:蛇头、蛇尾和长度,咋整?——局部清屏技巧(七)

乐高 少儿编程 2636浏览 0评论
简易贪吃蛇

之前的内容结束后。大家会有一些懵了,这是正常滴。

好像大家对这方面的编写不是很感兴趣的样子,太复杂了?

 

但我还是先要把这一章给写完。

 

随着程序啊,数据啊,越来越多。

检查起来都比较费精力,是吧。

 

别急,其实这种看着很大的家伙,都是可以拆散来看待的!后面马上要做这件事。

今天我们来进一步优化这个程序。

 

很多朋友说,经过上一节课的内容修改后,蛇不见了!(多数是因为显示模块没调试正确)

 

那我的问题就是:你有找过原因吗?

 

之前的程序里面,显示模块特别多,光是理清楚这些显示模块的清屏顺序,就够费劲的。

 


这里有两个问题产生:

 

1、我们要解决清屏的问题。

因为EV3模块里面,清屏是把整个屏幕都给清干净的。

这就意味着,屏幕上很多需要保留的点,也会被清掉。

 

要解决这个问题,只能让程序每一次刷新数据后,判断出哪些点是需要保留的,哪些点是需要清除的。

 

这……………………

工程好像大了点,是吧。。。

 

2、我们要解决数据读取的问题。

因为贪吃蛇每吃一个苹果,会自动延长一格,意味着显示的内容会增加。

这就意味着,程序里要增加更多的显示模块?

 

当然,我们上节课用阵列解决了数据记录的问题。

即,记录下贪吃蛇蛇头的行动轨迹

 

而蛇尾,其实是上一次,或者再上一次的蛇头位置。

这句话一定要理解!

 

要解决这个问题,我们要研究一下如何合理的显示出我们需要的数据部分。

 


这两个问题,我们可以独立出来思考,不需要急于去修改原来整体的程序。

 

首先,来解决2#。

拷贝出蛇的移动部分,和读取部分,重新作出如下这个独立的控制蛇的程序。

【EV3进阶】制作小游戏:蛇头、蛇尾和长度,咋整?——局部清屏技巧(七)

这个程序,和直接控制“一个点”移动的程序,在运行后,得到的体验几乎是一样的。但区别就在背后,我们的程序是记录下了点的每一个操作步骤的!即,所有移动过的轨迹,都被保存了下来。

 

只要我们的程序中,没有清屏的指令,这个蛇就可以一直延长下去。

 

但蛇是有长度的。

那么,假设蛇的当前长度为3,该如何设置呢?

 

可以这样来理解这个问题。

 

蛇的长度为1的时候,我们的需要从阵列索引中,读取最新的那个数据。

这个时候,索引值就是循环次数+1。

 

为什么是+1?

 

因为初始值,是我们自己已经输入的了,我们读取的最新数组,是第二个索引值,也就是1的索引位置。如果是第100次移动,那就要读取索引100的位置而不是99。

【EV3进阶】制作小游戏:蛇头、蛇尾和长度,咋整?——局部清屏技巧(七)

这个操作,可以借助一个新的变量来完成。

times(次数)。这个参数,我们用以读取蛇头的位置。

请在大循环的一开始增加这个变量。

 


那么蛇尾如何处理?我们不是不清屏了吗?

 

这里就要解决上文中1#的那个问题了。

如果每次都要重复读取多次数据,蛇越长,读取的工程量就越大,这显然是不靠谱的。

 

其实清屏还有更方便的方法!

 

假如在白板上,画一个黑色的点,除了用板擦擦掉它,还有什么办法可以让它消失?

【EV3进阶】制作小游戏:蛇头、蛇尾和长度,咋整?——局部清屏技巧(七)

答案:在黑色部分上涂上白色呗……

 

如果每一次运行,都在蛇尾上,涂上白色的点,蛇之前的轨迹,不就消失了么?!哈哈哈。

 

这被我叫作“局部清屏”

 


操作起来很简单。

 

我们复制黏贴一下黑色点的部分。(我们成为蛇头)

在它的后面,增加一块,蛇尾部分。

【EV3进阶】制作小游戏:蛇头、蛇尾和长度,咋整?——局部清屏技巧(七)

修改一下显示的方式:填充,真,显示,白。

 

而根据上面的逻辑,蛇头是time读取的,那么蛇尾,当然就是times-1啦!

【EV3进阶】制作小游戏:蛇头、蛇尾和长度,咋整?——局部清屏技巧(七)

那我们思考一下,如果是蛇的长度为3的时候。

蛇头和蛇尾跟times的关系又如何?

 

蛇头,当然是不变的;

蛇尾,times-2不就行了?!

 

理解之后,我们就可以把这部分程序合并到原来的大程序里面去啦!

 


注意,上面的这个独立的蛇头蛇尾程序,在独立运行的时候,只能设置为1的长度,不然会报错,这是为什么呢?请自行思考,我们下节课,要把整个程序来整理一遍思路,大家就会清楚了!

 

为之后继续优化,打好基础!

一定要动手尝试,然后多次修改进一步去理解各部分的功能!

 

下次见!

您必须 登录 才能发表评论!