控制面板比较容易,使用while和switch语句就可以解决了,It's too easy.
但是如何控制海龟就成了难点和重点,只要这个一旦解决,所有的问题就将迎刃而解。
首先需要一个函数用于输出当笔在海龟下时的轨迹:
在数组floor[50][50]中,首先将二维数组初始化为0。如果海龟走过,就将走过的数组元素修改为1,当然这不是此函数的功能。此函数只是输出值为1的元素。
最关键的问题是,如何判断海龟的方向?
海龟在方格中爬行,有自己的方向,我们将其称为“相对方向”。也就是说,海龟先向右走,再向右走,再向右走,再向右走,就回到了原来的位置,这个“向右”是相对海龟自己而言的。然而,我们以方格为参照物,那么海龟的方向就是右>下>左>上,我们称此为“绝对方向”。如果能够确定绝对方向,那么问题就变得很容易了。我很顺利的写下来四个函数(绝对方向):
其中参数row是二维数组的第一维,column是第二维。
用数组体现方格方格如下:
<0, 0> <0, 1> <0, 2> <0, 3> <0, 4> ... <0, 49>
<1, 0> <1, 1> <1, 2> <1, 3> <1, 4> ... <1, 49>
<2, 0> <2, 1> <2, 2> <2, 3> <2, 4> ... <2, 49>
...
<49,0> <49, 1> <49, 2> <49, 3> <49, 4> ... <49, 49>
参数step是向前走的步长。
参数pen是代表笔在海龟上或下。pen=1是代表笔在海龟上,这样pen - 1的值为0,这样就不会产生轨迹;pen=2是代表笔在海龟下,这样pen - 1的值为1,这样数组元素为1,就可以通过print函数输入轨迹了。
返回值是非常关键的,它反映了海龟位置的变化。用于定位海龟位置。
可是题中只有相对位置的左右,没有上下。如何将海龟的相对方向转换为绝对方向呢。知道电灯泡是如何发明出来的么?是一万次实验么?记不得了,反正爱迪生经过了许多试验之后才发明了电灯泡。我为了这个问题也做了许多试验,在本上画了无数的图,终于得出一个结论:
当海龟
向右(相对方向)时:+1
向左(相对方向)时:-1
默认海龟在<0,0>位置上方向向上,经过多次相对方向的组合得出的数字除以4。如果
余数为0,绝对位置向上;
余数为1,绝对位置向右;
余数为2,绝对位置向下;
余数为3,绝对位置向左。
这样就可以通过if语句实现相对位置向绝对位置的转换。主文件的代码如下: