最近开始玩 Karel game,我觉得是一个训练逻辑思考不错的游戏,而且一但陷入,就不知不觉的一直解下去XD!
Karel简介
Karel is an educational programming language for beginners, created by Richard E. Pattis in his book Karel The Robot: A Gentle Introduction to the Art of Programming. Pattis used the language in his courses at Stanford University, California.
(From Wikipedia)
Karel Reader
Learn to Karel: Start Game
熟悉一下语法后,一路过关斩将到 Unit 8,Unit 8 Lesson 5 我真的卡蛮久的,
题目如下:
必须如同右下角的目标,所有点点都要贴上菱形贴纸,且Karel机器人要在右上角,且是面向右边的!
以下是我的解法:
//Make Karel fill the world//with beepersfunction main() { //your code here while(leftIsClear()){ putBeeperLine(); turnBack(); } putBeeperLine();}function putBeeperLine(){ putBeeper(); while(frontIsClear()) { move(); putBeeper(); }}function turnBack(){ turnAround(); while(frontIsClear()){ move(); } turnRight(); move(); turnRight();}
他预设写好一个function putBeeperLine()
,把第一排每个点点都贴上菱形贴纸,接下来就是我得将剩余的每一排都像第一排一样贴上贴纸,我的想法是,让机器人回到起始位置后,往上走一格,然后重複第一个function,就完成了!
那该怎么做呢?
step1. 让机器人到下一行的左边
我新增一个function turnBack()
,叫他先转身(turnAround),然后用while的指令,让他可以重複执行,下move的指令回到起点,这时机器人是面向左边的,所以叫他右转,并往上一格,到第二行,然后再右转,面向右边后,再执行第一行的function,这样第二排就完成了!
step2. 让机器人走到最后一格
现在第一排第二排都完成了,但是要怎么让他重複执行到最后一格呢?
就要回到function main()
,一样用while的指令重複执行程式,
一组putBeeperLine()
function turnBack()
让他重複,他会到前一行,然后后面再加上一组putBeeperLine()
,就完成拉~