Karel機(jī)器人學(xué)Java_第1頁
Karel機(jī)器人學(xué)Java_第2頁
Karel機(jī)器人學(xué)Java_第3頁
Karel機(jī)器人學(xué)Java_第4頁
Karel機(jī)器人學(xué)Java_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、卡雷爾機(jī)器指令集2013年3月10日12:51卡雷爾機(jī)器人指導(dǎo)文檔:卡雷爾基本動作指令:move() 要求卡雷爾向前推進(jìn)一步。當(dāng)一堵墻擋在卡雷爾面前的時候,卡雷爾不能響應(yīng) move()這個命令。turnLeft() 要求卡雷爾向左轉(zhuǎn)90度(逆時針轉(zhuǎn)動)。pickBeeper() 要求卡雷爾撿起街角上的蜂鳴器,把這個蜂鳴器放到它的蜂鳴器收藏包里,這個包可容納無限多的蜂鳴器。除非這個蜂鳴器恰好在卡雷爾所在的街角上,卡雷爾不能響應(yīng)這個pickBeeper()命令。putBeeper() 要求卡雷爾從蜂鳴器收藏包里拿出一個蜂鳴器,放在卡雷爾所在的街角上。除非卡雷爾的蜂鳴器收藏包里有蜂鳴器,卡雷爾不能響

2、應(yīng)這個putBeeper()命令??ɡ谞柕倪@些命令,不能自己自動執(zhí)行。在卡雷爾可以執(zhí)行這些命令之前,你需要先把它們寫在一個卡雷爾程序里。需要特別注意的是,這幾個命令對卡雷爾的行為進(jìn)行了限制。如果卡雷爾試圖做些非法的舉動,像穿墻或者撿起一個不存在的蜂鳴器,一個錯誤就發(fā)生了。在這時,卡雷爾會顯示一條錯誤的信息,同時拒絕執(zhí)行剩余的命令。卡雷爾控制語句:1. 條件語句。條件語句是指在程序里這樣一些語句,只有當(dāng)特定的條件成立了,才會被執(zhí)行。在卡雷爾編程里,你可以使用 “if”來指定條件語句。a. “if的條件形式If(條件檢測)只有當(dāng)條件滿足時才會執(zhí)行的語句 b. if的擴(kuò)展形式If(條件檢測)只有當(dāng)條

3、件滿足時才會執(zhí)行的語句 else 只有當(dāng)條件不滿足時才會執(zhí)行2. 迭代語句。迭代語句是指在一個程序里,某些語句需要被反復(fù)執(zhí)行,程序員稱這個為“循環(huán)”。卡雷爾支持兩種不同的迭代語句?!癴or”語句用于當(dāng)你想按預(yù)定的次數(shù)重復(fù)執(zhí)行一組命令的時候,“while”語句用于當(dāng)你想在某些條件滿足時,重復(fù)執(zhí)行一組命令的時候a. ”for的語法for(int i=0;icount;i+)重復(fù)執(zhí)行的語句這里的count是一個整數(shù),指需要重復(fù)的次數(shù)。b. While的語法While(條件檢測)重復(fù)執(zhí)行的語句3. 卡雷爾可以判斷的環(huán)境條件(一共九組十八個判斷方法,兩兩相對)測試條件相反的測試條件判斷的內(nèi)容frontI

4、sClear() 前面無墻返回肯定值frontIsBlocked() 面前被檔返回肯定值面前是否有墻leftIsClear() 左面無墻返回肯定值leftIsBlocked() 左面被檔返回肯定值左面是否有墻rightIsClear() 右面無墻返回肯定值rightIsBlocked() 右面被檔返回肯定值右面是否有墻beepersPresent() 所在位置有方塊返回肯定值noBeepersPresent() 所在位置無方塊返回肯定值所在位置是否有方塊beepersInBag() 包里目前有方塊返回肯定值noBeepersInBag() 包里目前無方塊返回肯定值包里是否有方塊facingNo

5、rth() 面朝北返回肯定值notFacingNorth() 沒有面朝北返回肯定值是否面朝北facingEast() 面朝東返回肯定值notFacingEast() 沒有面朝東返回肯定值是否面朝東facing South 面朝南返回肯定值notFacingSouth 沒有面朝南返回肯定值是否面朝南facingWest 面朝西返回肯定值notFacingWest 沒有面朝西返回肯定值是否面朝西基本動作指令編程演進(jìn)2013年3月27日16:28卡雷爾基本動作指令:import stanford.karel.*;public class StoneMasonKarel extends SuperKa

6、rel / You fill in this part/* * 檢起正上方的方塊并返回起點(diǎn) * * 首先卡雷爾機(jī)器人左轉(zhuǎn)(turnLeft)并向正前方移動(move)到方塊的位置撿起方塊(pickBeeper) * 卡雷爾機(jī)器人撿完方塊后返回原點(diǎn):2次右轉(zhuǎn)(turnRight),移動了4步回到原點(diǎn)后左轉(zhuǎn)1次 */public void run() turnLeft();move();move();move();pickBeeper();move();pickBeeper();turnRight();turnRight();move();move();move();move();turnLeft

7、();卡雷爾控制語句條件語句的引用:import stanford.karel.*;public class StoneMasonKarel extends SuperKarel / You fill in this part/* * 檢起正上方的方塊并返回起點(diǎn) * */public void run() /卡雷爾機(jī)器人左轉(zhuǎn)turnLeft();/條件設(shè)定:執(zhí)行PickBeepersAndMove指令4次for (int i=0;i4;i+)PickBeepersAndMove();/卡雷爾機(jī)器人右轉(zhuǎn)2次turnRight();turnRight();/條件設(shè)定:向正前方移動4次,以返回起點(diǎn)f

8、or (int i=0;i4;i+)move();/卡雷爾機(jī)器左轉(zhuǎn)還原成初如狀態(tài)turnLeft();/* * 設(shè)定PickBeepersAndMove指令集 * 判斷當(dāng)前位置是否有方塊,如果有撿起方塊然后前移1步,如果沒有就直接前移1步 */public void PickBeepersAndMove()if(beepersPresent()pickBeeper();move();elsemove();if(beepersPresent()pickBeeper();習(xí)題一 基本指令2013年4月2日13:24任務(wù)要求:本任務(wù)主要練習(xí)基本動作指令的使用。1. 移動到方塊所在位置2. 撿起方塊3

9、. 回到初始位置任務(wù)代碼:使用基本的動作指完成任務(wù)。需要確定卡雷爾機(jī)器人到達(dá)方塊位置的走法、方向及卡雷爾機(jī)器人回到原點(diǎn)的走法、方向。以下為代碼正文:import stanford.karel.*;public class CollectNewspaperKarel extends SuperKarel / You fill in this partpublic void run() /移動到方塊所在位置move();move();turnRight();move();turnLeft();move();/撿起方塊pickBeeper();/返回到原點(diǎn)turnLeft();turnLeft();

10、move();move();move();turnRight();move();turnRight();習(xí)題二 修復(fù)拱門2013年4月2日13:42任務(wù)要求:卡雷爾被雇去修復(fù)1989 年大地震對斯坦福大方院造成的損壞。補(bǔ)全支撐拱門石頭(當(dāng)然還是用菱形方塊表示),如左圖所示。規(guī)則: 卡雷爾的初始位置位于第一列、第一行,面向東,攜帶無限的支撐石(灰色方塊); 每隔三列有一個支撐柱,分別位于第一、五、九和十三列,依此類推; 最后一個支撐柱右側(cè)緊貼一堵墻,本題中,墻壁緊貼第十三列右側(cè),但無論有多少組支撐柱,你的程序都應(yīng)該能正確運(yùn)行; 每組支撐柱頂端為墻體,但卡雷爾不知道每個支撐住是否只有5 塊石頭,也

11、不知道是否所有的支撐柱都等高。 有些支撐柱中的石頭并未完全缺損,你的程序不能在已有石頭的位置再次置放。任務(wù)代碼:import stanford.karel.*;public class StoneMasonKarel extends SuperKarel /* * 逐個檢查柱子,沒有方塊的補(bǔ)齊,檢查完成后返回到原點(diǎn)。 */public void run() while (notFacingWest() CheckStoneMason();NextStoneMason();Return();/* * CheckStoneMason開始 * 從下往上檢查StoneMason,如果沒有方塊的補(bǔ)全,完

12、成后回到StoneMason底部 */private void CheckStoneMason() if (facingEast() turnLeft();if (noBeepersPresent() putBeeper();while (facingNorth() if (noBeepersPresent() putBeeper(); else if (frontIsClear() move();if (noBeepersPresent() putBeeper();if (frontIsBlocked() turnAround();while (frontIsClear() move();/

13、CheckStoneMason結(jié)束/* * NextStoneMason開始 * 到達(dá)下一個柱子 * (如果左邊無阻礙,即為還有下一個柱子需要Check;如果左邊有阻礙,則說明當(dāng)前柱子為最后一個柱子,右轉(zhuǎn),準(zhǔn)備返回) */private void NextStoneMason() if (leftIsClear() turnLeft();for (int i=0;i4;i+) move();turnLeft(); else turnRight();/NextStoneMason結(jié)束/* * Return開始 * Rteurn到原點(diǎn) */private void Return() while (

14、facingWest() if (frontIsBlocked() turnAround(); else while (frontIsClear() move();turnAround();/Return結(jié)束執(zhí)行結(jié)果:思路:過程:Karel檢查柱子完成后到達(dá)下一個柱子所有柱子檢查完成返回原點(diǎn)1. CheckStoneMason:由于本任務(wù)中需要檢查和放置的方塊為直線擺放,柱子的高度不固定,每Check完成一個柱子都返回到柱子的底部。2. 柱子位置的定位規(guī)則:本任務(wù)中,每隔三列有一個支撐柱,分別位于第一、五、九和十三列,依此類推?!癴or (int i=0;i4;i+)”的使用就是為了匹配這一規(guī)

15、則。3. 控制方向:a. 根據(jù)柱子位置的定位規(guī)則,要到達(dá)下一個柱子,就需要保證向東前進(jìn)4步;b. CheckStoneMason返回到柱子底部后,為面向南,NextStoneMason通過判斷左側(cè)是否存在阻礙,來確定是否需要繼續(xù)檢查下一個柱子;c. 左側(cè)存在阻礙,則NetStoneMason判斷當(dāng)前位置為最后一個柱子。這時向右轉(zhuǎn),CheckStoneMason完成;if (leftIsClear() turnLeft();for (int i=0;i4;i+) move();turnLeft(); else turnRight();d. Return判斷面向西則為CheckStoneMason

16、完成,這時Return回到原點(diǎn)。習(xí)題三 將空白矩形變成跳棋板2013年4月3日13:46任務(wù)參考信息: 需要保證卡雷爾能在各種規(guī)格的棋盤上正確執(zhí)行操作; 界面在初始狀態(tài)下沒有任何內(nèi)墻或灰色方塊; 界面不一定是正方形,但你可以假設(shè)它的長寬相等; 另外一個需要考慮的特殊情況是長或?qū)挒?執(zhí)行結(jié)果:import stanford.karel.SuperKarel;public class Chessboard extends SuperKarel public void run() if (frontIsBlocked() OneRank(); else while (frontIsClear() C

17、heckChessboard();private void CheckChessboard() while (frontIsClear() if (noBeepersPresent() move();putBeeper(); else if (frontIsClear() move();if (noBeepersPresent() if (frontIsClear() move();putBeeper(); else if (frontIsClear() move();NextLine();private void OneRank() if (frontIsBlocked() if (righ

18、tIsBlocked() turnLeft(); else turnRight();while (frontIsClear() if (noBeepersPresent() move();putBeeper(); else if (frontIsClear() move();if (noBeepersPresent() if (frontIsClear() move();putBeeper(); else if (frontIsClear() move();private void NextLine() if (frontIsBlocked() if (facingEast() turnLef

19、t(); else turnRight();if (frontIsClear() if (beepersPresent() move();if (rightIsBlocked() turnLeft(); else turnRight(); else move();putBeeper();if (rightIsBlocked() turnLeft(); else turnRight();import stanford.karel.SuperKarel;public class Chessboard extends SuperKarel / You fill in this partpublic

20、void run() if (frontIsBlocked() OneRank(); else while (frontIsClear() CheckChessboard();private void CheckChessboard() while (frontIsClear() if (noBeepersPresent() putBeeper();move(); else if (frontIsClear() move();if (noBeepersPresent() if (frontIsClear() move();putBeeper(); else if (frontIsClear()

21、 move();NextLine();private void OneRank() if (frontIsBlocked() if (rightIsBlocked() turnLeft(); else turnRight();while (frontIsClear() if (noBeepersPresent() move();putBeeper(); else if (frontIsClear() move();if (noBeepersPresent() if (frontIsClear() move();putBeeper(); else if (frontIsClear() move(

22、);private void NextLine() if (frontIsBlocked() if (facingEast() turnLeft(); else turnRight();if (frontIsClear() if (beepersPresent() move();if (rightIsBlocked() turnLeft();move(); else turnRight();move(); else move();putBeeper();if (rightIsBlocked() turnLeft(); else turnRight();習(xí)題四 在第一行的中央放置一個方塊2013

23、年4月4日15:30任務(wù)參考信息: 卡雷爾的起始位置是第一列第一行,面朝東,攜帶了無限的灰色方塊; 界面在初始狀態(tài)下沒有任何內(nèi)墻或灰色方塊; 界面不一定是正方形,但你可以假設(shè)它的長寬相等。你還可以參考如下信息簡化過程: 如果界面的寬是奇數(shù),卡雷爾必須把灰色方塊放置在中間的位置;如果是偶數(shù),卡雷爾可以把灰色方塊放在中間的兩個位置中的任意一個。 程序運(yùn)行結(jié)束時卡雷爾的朝向不作要求。執(zhí)行結(jié)果:import stanford.karel.SuperKarel;public class A1 extends SuperKarel / You fill in this partpublic void ru

24、n() while (frontIsClear() move();putBeeper();pickBeeper();turnAround();move();while (beepersPresent() KeralPickBeepers();if (noBeepersPresent() putBeeper();while (notFacingEast() turnRight();/private void KeralPickBeepers() if (beepersPresent() pickBeeper();move();while (beepersPresent() & frontIsCl

25、ear() move();turnAround();move();/思路:要找到中央位置可以采用結(jié)繩對折取中點(diǎn)的方法,即是在直線方向上布滿方塊,然后從兩端向中間各取一個方塊向中間匯聚,最后停留的位置即為中間點(diǎn)。習(xí)題五 在任意矩形的正中央放置一個方塊2013年4月14日17:36任務(wù)參考信息: 卡雷爾的起始位置是不確定,方向不確定,攜帶了無限的灰色方塊; 界面在初始狀態(tài)下沒有任何內(nèi)墻,卡雷爾起始位置沒有方塊,但是不確定其他位置是否存在方塊及存在的數(shù)量; 界面不一定是正方形,但你可以假設(shè)它的長寬相等。你還可以參考如下信息簡化過程: 如果界面的寬是奇數(shù),卡雷爾必須把灰色方塊放置在中間的位置;如果是偶

26、數(shù),卡雷爾可以把灰色方塊放在中間的兩個位置中的任意一個。 程序運(yùn)行結(jié)束時卡雷爾的朝向不作要求。執(zhí)行結(jié)果:import stanford.karel.*;public class CenterPutBeepers extends SuperKarel public void run() /先通過轉(zhuǎn)動方向來確定前方?jīng)]有阻礙while (frontIsBlocked() turnLeft();/* * 判斷左、右是否有阻礙(如果有阻礙則為單行或單列): * 左、右同時有阻礙則執(zhí)行PutBeepers和CheckBeepers,執(zhí)行完成后,Karel停留的位置為中央點(diǎn),放置一個方塊; * 左或者右沒有

27、阻礙則判斷是否向東,不是則轉(zhuǎn)向東。向東無阻礙則執(zhí)行PutBeepers和CheckBeepers,執(zhí)行完成后,Karel停留的位置為中央點(diǎn),放置一個方塊; * 接下來判斷左或右的阻礙,如果沒有則向該方轉(zhuǎn),然后執(zhí)行PutBeepers和CheckBeepers,執(zhí)行完成后,Karel停留的位置為中央點(diǎn),放置一個方塊。 */if (leftIsBlocked() & rightIsBlocked() PutBeepers();CheckBeepers();putBeeper(); else while (noBeepersPresent() if (facingEast() if (frontIs

28、Clear() PutBeepers();CheckBeepers();putBeeper(); else turnAround();PutBeepers();CheckBeepers();putBeeper(); else turnLeft();if (beepersPresent() if (leftIsClear() turnLeft(); else if (rightIsClear() turnRight();if (beepersPresent() if (frontIsClear() PutBeepers();CheckBeepers();putBeeper();/完成后Karel轉(zhuǎn)向東while (notFacingEast() turnLeft();/* * PubBeepers開始 * 首先移動到盡頭,然后開向

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論