更新啦!
本次更新添加了一个分支,目的在于创建“下一步”功能,另外修复了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
赞,期待出教程哈