更新啦!
本次更新添加了一個分支,目的在於創建“下一步”功能,另外修復了block白邊的難看界面!
目前更能沒有任何修改,run.swift文件更加清爽,再也不用雙線程啦!
用數組靜態化儲存Karel的狀態,感謝香蕉君!
調節速度的偉大夢想指日可待!?
寫這個軟件總共花了我11個小時,中間坑住無數次。而且到現在我也不知道為什麼這樣實現多隊列它就可以停頓,也不知道為什麼這貨不能調整速度……
停止的按鈕是無效的,我覺得一個是用不著它,另一個是我做不來?
最困難的是要如何移動Karel,這個問題的解決點在於
不能完全依賴storyboard,關鍵時刻還得用代碼繪製View!
這個問題解決之後如何在規定的坐標放下Beeper又成了難題!最後我索性一不做二不休,用代碼把地圖畫滿了Beeper!然後隱藏掉,作了個數組,用哪個就顯示哪個………………
這種蛋疼的算法恐怕也就只有我自己了!
好了,下面來介紹下這個東西的用法吧!
Karel用來學習Java的,我會抽空單獨寫一篇文章來講講它的歷史,這裡我就先直接說用法:
Karel是個機器人,只會最簡單的指令:
- move 往前走
- turnLeft 左轉
- putBeeper 放一個標記
- pickBeeper 拾起一個標記
由於我水平有限,所以我無法做到讓你在單獨的一個文件裡寫這些指令,你只能在我預留的位置來寫啦?
另外,由於隊列的問題,實際上你寫出的代碼基本上會是這個樣子:
1 2 3 4 5 6 |
…… self.move() self.move() self.turnLeft() self.putBeeper() …… |
使用窗口底部的滑動條,默認在左端是快速模式,方便你直接看結果;右邊則會一秒一動作,方便你看過程。
地圖的初始化我在代碼中註明了,你應該能在 Karel.swift 中找到如下的部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
func initBlockAndBeeper() {//×××如果要创建地图则在这里修改坐标即可!×××××××× let initBlock = [(9,0), (8,0),(9,1), (8,1)] //这里创建墙壁,两个整形的元组代表墙壁的坐标(x,y)~ for (x,y) in initBlock { let be = Int(x) * 10 + Int(y) block[be].hidden = false } let initBeeper = [(5,0,4), (2,0,3)]//这里创建Beeper! 三个整形元组,第三个数字是Beeper的堆叠数量!前两个是坐标。 for (x,y,number) in initBeeper { let be = Int(x) * 10 + Int(y) beeperNumCount[be] = number beeperCount[be].stringValue = "\(beeperNumCount[be])" beeperCount[be].hidden = false beeper[be].hidden = false } }//End of initkarel |
好了,在我弄好了git之後我會在這裡貼上鍊接。
我終於成功的創建了git的目錄,你可以到這裡查看
本文由 落格博客 原創撰寫:落格博客 » 我自己用 Swift 2 寫了個簡陋的 Karel Robot
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1088.html
贊,期待出教程哈