最新消息:

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

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

上节课我们做到两个点的显示,和其中一个点的移动。

 

大家可以看一下这个程序,一定要先明确这些代码(模块)的“分工”,这对我们后面的延伸有着很重要的意义。

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

有一些朋友问如何用一个显示模块,显示多个(种)数据?

这个问题要一步步来,我们先要完成这几节课的内容哈。

 

所以不要急,每一行代码(每一个模块)都有它在程序中不可替代的功能。

 

我们现在用mindstorms做的程序,更像是一个流程图。

这个流程图其实包含了所有的逻辑过程在其中。

 

逻辑是要求很严密的东西,所以,忽略其中任何一个思考环节都是很致命的。

 

我们要编写更复杂的程序之前,先拿这个相对简单的项目练手。

 

今天继续完成后半部分——

怎么吃掉苹果


这个问题我们可以用数据的思考方式来理解:

 

当snake的坐标跟apple坐标相同时,视为点被吃掉了。

那么我们很容易就可以产生一个判断逻辑。

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

snakex=applexsnakey=appley同时相等时,意味着两个点重合。

 

这里,我们还是要重新来理解一下逻辑合并的那些事。

这玩意如果学到了高一数学,叫作“集合”,有些地方至少也是初三才学习的数学知识点。

 

小朋友们要清楚一件事,数学学科,在代数阶段(初一以下)都只能算得上是“算术”,也就是计算的方法。年级越往上,对“逻辑”的要求越高。

 

为什么要在初二才开始学物理?

 

因为要有数学的逻辑基础,这样才能很好的分析各种“适用条件”,不然就算给你计算公式,也不知道用在哪里合适!

 

所有理科的共同特点就是,要求逻辑严密。

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

And,表示两种逻辑同时达成;

Or,表示两种逻辑任一达成;

Xor,表示两种逻辑任一达成,但都达成时反而不达成;

Not,表示除了一种逻辑之外,其他都算达成。

 

两个坐标点重合的情况,要的是x和y都相等的情况。所以这里必然是选and。

 

那如果选or会产生什么情况呢?大家可以自己尝试,一看便知。

 


 

这部分完成后,我们继续设定出,加分项(score)

当逻辑成立时:score写入+1。

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

而与此同时,另一个要求产生了

 

即,当获取1分时(也就是上面那个两点重合的逻辑达到要求时),要同时生成一个新的apple坐标,也就是出现一个新的apple。

 

所以,当score加一的时候,这个循环会结束,回到外层,重新生成一个新的apple坐标。

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

这里,要注意循环的开始和结束条件。

 

在这个程序里面,可以理解为:生成apple,开始循环,吃掉apple,循环结束,再生成apple,开始循环……

 

而像初始的snake坐标、初始的score数值,则是在循环外的,因为这只需要操作一次即可。

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

做到这里,建议停一下,认真的梳理一下这个程序,运行测试一下。再进入下一步。

 


 

运行完后,你会发现问题,这个程序虽然能够做到两件事:1、移动点。2、随机产生点。

 

但一运行就会碰到问题。两个点碰不上。找过原因了吗?

 

无法重合,意味着数据出错,而这个程序中,数据错在哪里呢?

 

我们看一下,snake的坐标10是倍数取值,每次移动后,也是取10的倍数;而apple是一个随机点,这个点的横纵坐标,都在一个1~100+的取值范围中。

很显然,它是会取到78,96这样的非10的倍数的。

 

虽然它们并非完全不会重合,但这两个数据取值方法,明显不是相同的,也可以被称为不在一个“数据体系”下。

 

要让它们能够保证重合,我们就需要让apple只出现在横纵坐标为10的倍数的情况下。

 

所以,要修改随机坐标的取值方式。

 

取0-17的随机数(超过这个数字,apple就会生成到屏幕之外了),乘以10,作为applex的取值方法。

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

同理appley也这样来取。

 

这样一来,apple就能保证与snake重合啦!

 

整个程序编到现在,如下:

【EV3进阶】制作小游戏:搞清数据体系和程序结构(二)

(点开应该可以看大图,这是我压的最精细的尺寸了……)

重申一下文头的要求——请一定认真的理解每个部分,每个代码的作用。

因为我们后面的东西,会更难!

 

下次见!

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