300000
English | Français | فارسی | 中文 | Українська | Azerbaijani | ខ្មែរ | Tiếng Việt | Bahasa Melayu | Deutsch | O'zbek | РусскийTurtle Walk
胜局数: 213148
Blockly是什么?
怎么玩?
你的目标是编写代码让乌龟爬进池塘内,要想完成这一任务,你需要将模块从中间灰色部分添加到右侧白色框中。点击 '运行'按钮,即可运行排列好的代码 开始 模块。点击提示按钮可以看到一种前进方式,但使用的模块数量不一定是最少的。
如何通关?
你编写的代码能让乌龟爬进池塘就通关了,使用有限数量的模块会增加游戏难度。
新手须知
代码是什么?
"代码" 听起来似乎很难,让人望而却步,但事实并非如此
事实上,你无时无刻不在使用代码!如果你之前使用过app、玩过电脑游戏、点击过按钮,那么你就使用过代码。代码只是一系列指令,你使用的设备(手机、平板、电脑、仪表板等)能够识别并执行这些指令。
Blockly可以让你编写代码,并应用一些编程原则,比如变量、函数、循环等,这些原则也是计算机程序员和app/游戏开发者在日常工作中所遵循的。
什么是 "好" 代码
首先,好代码一定能够正常运行,也就是说必须是“正确”的,这个游戏中,乌龟能爬进池塘就意味着代码正确。不过这里不止有一种“正确”方法能通关。让我们来看一下乌龟需要沿着直线爬进池塘的情况。
下面是一个正确代码:
开始:
⇧ 向前移动 ⇧
⇧ 向前移动 ⇧
⇧ 向前移动 ⇧
⇧ 向前移动 ⇧
⇧ 向前移动 ⇧
这个代码正确吗?
乌龟可以爬进池塘,所以这个代码是正确的。
这是个好代码吗?
不是。好代码除了要保证正确性之外,还应该是高效的:即采用尽可能少的代码(模块)。乌龟应该采取最径直的路线,当然了,这一关只有一条路线可选,但在后面的关数中不止一条路线.
如何用更少的模块完成任务?
循环块可以实现重复模块里面的指示内容,重复次数不限。
如何使用循环模块完成这一任务?
下面是一个更好的代码:
开始:
↺ 重复5次 ↺
⇧ 向前移动 ⇧
想象一下,假设乌龟距离池塘不是10步远,而是100步远,这个代码的高效性是不是又体现出来了?
要想让乌龟前进100步,而非10步,你需要进行哪些调整?
你不需要再增加90次“向前移动”的模块,只需要改变循环模块的数字。这是个好代码,因为它不仅正确高效,而且容易调整。
开始:
↺ 重复100次 ↺
⇧ 向前移动 ⇧
比起“重复”循环模块,哪种循环模块更为高效?
"执行直到" 循环模块。比起重复模块,这个循环模块更为高效,因为向前移动5步或者移动100步甚至1000步,这个代码也是不变的:
开始:
↺ 直到进入池塘 ↺
⇧ 向前移动 ⇧
再举个例子:你可以写出更好的代码吗?
在这一关中,乌龟需要爬上一个 \"阶梯\" 才能进入池塘。下面是乌龟进入池塘需要执行的代码,这个代码是正确的,但并不算很好。你可以写出一个更好的代码吗?切记好代码应该是正确高效且容易调整的。
开始:
⇧ 向前移动 ⇧
← 向左转 ←
⇧ 向前移动 ⇧
↑ 向右转 ↑
⇧ 向前移动 ⇧
← 向左转 ←
⇧ 向前移动 ⇧
↑ 向右转 ↑
⇧ 向前移动 ⇧
← 向左转 ←
⇧ 向前移动 ⇧
答案
要写出这个代码,我们需要重复模块组合\"向前移动 + 向右转 + 向前移动 + 向左转\",如果我们把这几个模块放在一个循环模块中,代码会更简短,且更为高效。
开始:
↺ 直到进入池塘 ↺
⇧ 向前移动 ⇧
← 向左转 ←
⇧ 向前移动 ⇧
↑ 向右转 ↑
你应该如何调整这个代码
这个阶梯有些不一样,你如何调整前面一个代码用于这个代码?
答案
你可以用之前的代码:同样可以让乌龟爬进池塘。这一关中,乌龟会尝试向上移动,但会撞到墙,然后继续移动。但是,乌龟会绕很多弯,因为即使不能向上移动时也会去尝试。但不需要采用这种方式,你可以在一个循环模块里面增加两次\"向前移动\"模块,如图所示,在这一关中,最短的运行代码并非是最好的移动方式,因为乌龟需要花费更长时间才能爬进池塘。
开始:
↺ 直到进入池塘 ↺
⇧ 向前移动 ⇧
⇧ 向前移动 ⇧
← 向左转 ←
⇧ 向前移动 ⇧
⇧ 向前移动 ⇧
↑ 向右转 ↑
小结
希望你玩得开心!能够写出准确高效且容易调整的好代码。
一般策略
只用简单的方向模块(比如:向前移动,转弯)进行编程。
然后检查可以放进循环模块的重复代码序列,如果代码序列相似但不完全相同,可以检查是否有代码模块可以添加进更短的代码序列,比如撞墙行为就可以用完全相同的循环模块来替代,并且可以执行多次。
循环
乌龟爬行过程中有两种循环模块。
重复 [X] 次
无论代码执行过程中发生什么情况,循环模块都会执行固定次数。
直到进入池塘,执行...
直到乌龟爬进池塘,循环模块才结束。
嵌套
你可以在其他循环模块中加入另一个循环模块,甚至可以在一个循环模块中加入一个如果...那么...(否则)语句模块。
减少模块数量的小技巧
要想写出简短更好的代码,可以尝试下面的方法(点击可看到相应举例):
如果有重复动作,可以把这些动作放在一个循环模块里面。
在关卡3中,如何使用一个循环模块以减少其他模块数量?
使用一个循环模块重复以下动作 \"向前移动 + 向左转 + 向前移动 + 向右转\"
盘旋式移动
关卡8使用4个模块就可以通关,应该如何操作?
要想进入池塘,乌龟只需要前进和向右转,这些动作可以嵌套进一个循环模块中。乌龟第一次右转后前进会撞到墙也没有关系,之后几次右转就可以顺利前进了。我们可以把这一系列动作想成一个盘旋动作,只需要转向(向右或向左)以及前进就可以了。
沿着阶梯方向移动
关卡9使用5个模块就可以通关,应该如何操作?
乌龟需要从右下角爬行到左上角,它无法直接沿对角线方向移动,所以只能以阶梯样式前进(在这一关中需要沿向左、向上方向移动)。虽然这个阶梯样式不是最佳路线,但也可以到达池塘。再次声明,如果乌龟在爬行过程中撞到墙也没有关系。
组合盘旋样式和阶梯样式
关卡12使用9个模块就可以通关,应该如何操作?
首先以 \"盘旋\" 样式前进,即在一个循环模块中,朝某个方向转动,然后向前移动尽可能多的步数(这一关向前移动5次即可) -- 再次声明一下,如果乌龟在爬行过程中撞到墙也没有关系。
接下来以 \"阶梯\" 样式前进,虽然这条路线不是最佳的阶梯样式路线,重复向左和向上移动仍然可以进入池塘。
使用 "如果路线" 模块。
关卡5使用4个模块就可以通关,应该如何操作?
组合 "执行 直到进入池塘" 模块和 "如果道路向右" 模块,这样乌龟右转之后要么撞墙要么直行。
尝试一下其他挑战
多尝试一下其他关卡,有些关卡只有一条走廊,但有些关卡设置了支路,还有些关卡设置了陷阱、连接门、门锁钥匙、带障碍或者迷宫的区域等。
有些关卡看起来像迷宫
比如,关卡36、44、48看起来像一个简单的迷宫。
假设你进入一个迷宫,周围的墙挡住了你的道路 -- 你能用什么方法走出迷宫?
一个简单的方法是沿着右边或者左边的墙前进。
如何编程这种方法?
提示:只需要6个模块,之后你可以计算一下。
有一些关卡数,比如第44关,乌龟沿着一边的墙壁前进会掉进陷阱,而沿着另一边的墙壁前进就能进入池塘。
什么情况下这种方法完全行不通?
比如关卡10,乌龟不论沿着左边的墙走还是右边的墙走,都不会到达池塘。
其中蕴含的数学问题是什么?
迷宫中存在闭合环路,且乌龟在环路内侧、池塘在环路外侧或者乌龟在环路外侧、池塘在环路内侧时,这种方法就行不通了。不论哪种情况,乌龟沿着某一面墙走永远都到不了池塘。
这种方法如果失败应该怎么办
遇到这种情况,你可以让乌龟沿着墙走之前尝试其他前进方式,要么变换墙壁,要么先沿着墙走一小段,然后再变换其它前进方式以进入池塘。
你有发现以这种方式编程的关数吗?
关注或订阅更新: