最近開始玩 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 beepers
function 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()
,就完成拉~