美文网首页少儿科技教育智能硬件教育
少儿编程游戏CodeMonkey通关攻略:第61-65关

少儿编程游戏CodeMonkey通关攻略:第61-65关

作者: 君君玩科技 | 来源:发表于2017-03-04 11:33 被阅读704次

    周末啦!又可以更新CodeMonkey的闯关教程啦~

    这次我们接着闯关,上一次咱们一起闯过了关于for循环的第56-60关,这次我们再接再厉,再闯过与for循环有关的第61-65关。

    你准备好了接受挑战了吗?跟着我直接进入游戏吧!

    第61关

    这是进入第61关的画面:

    猴博士告诉我们,for循环可以用来指定其他对象。在前五关中,for循环多用来指定香蕉。在这5关里,我们还可以用for循环指定小龟龟。事实上,我们可以用for循环指定任意对象做同样的动作,只要这个对象不止一个。

    看看这个画面,我们分析一下:猴子如果要吃到香蕉,那么就需要跨过三条小河,但是我们这个游戏是假定猴子不会游泳的。这时候,就需要小龟龟走过来,帮助猴子跨过这三条河,从而让猴子吃到香蕉。

    我们可以看看代码:

    如果直接点击运行,可以看到如下画面:

    上图中,小龟龟没有走到猴子面前,自然猴子也就无法跨过小龟龟的背部,也就无法吃到香蕉。

    我们估计小龟龟还需要再走10步才能到猴子面前,所以x最好设置为x=20。如果不确定距离,别忘了我们还有左上角的小尺子呢。

    可以看到,x=20正好让小龟龟稳稳地停在了猴子面前。不过为了让小猴子吃到香蕉,还需要在代码下面加一句,比如:

    这最后一句是让小猴子走向香蕉的。效果如下:

    闯关成功!

    第62关

    仔细观察这一关,我们发现猴子站在石头上,遥望着可能是他的家乡(五指山?)的地方,在这里,他可能要背几首古诗:滚滚长江东逝水?湛湛长江去,冥冥细雨来?

    背完了古诗,猴子觉得肚子有点饿,想吃几根香蕉。可是这茫茫大海中,哪里有香蕉呢?他不免悲从心来,又吟诗一首:无边落木萧萧下,不尽长江滚滚来?

    到这里,我们要告诉猴子一个生活中的哲学:只要你转身,生活中处处都是惊喜!

    猴子的背后有四根香蕉呢!

    为了帮助猴子吃到香蕉,我们来改改代码:

    代码中,turnTo raft这句只是让猴子转身,面向木筏。可是为了让猴子吃香蕉,我们需要让猴子走到木筏上,然后就可以开始循环了:面向香蕉0,走向香蕉0;面向木筏,走向木筏;面向香蕉1,走向香蕉1,;面向木筏,走向木筏;。。。。。。

    这可以用一个循环表示:

    代码的含义是:

    1. for b in bananas:对于bananas里的每一个香蕉b

    2. turnTo raft:让猴子面向木筏

    3. step distanceTo raft:让猴子走向木筏

    4. turnTo b:让猴子面向香蕉b

    5. step distanceTo b:让猴子走向香蕉b

    运行效果如下:

    猴子终于不用吟诗了!闯关成功!

    吃完了香蕉猴子会干嘛呢?也许什么都不想吧。

    巨海一边静,长江万里清。

    第63关

    猴子棉铃的挑战越来越复杂了,这一关的界面如下:

    可以看到,猴子不能直接去吃到香蕉,因为在程序里,猴子还没有学会自动拐弯的技能。

    也就是说,如果我们写的代码如下:

    那会把猴子带到沟里去的,那到底要怎么写呢?

    我们如果点击猴子脚下和面前的这些像土豆一样的小岛,就会发现,其实他们也是对象,也可以用于for循环!

    那么我们自然会想到,如果让猴子沿着这些小岛(islands)走,就可以经过这些香蕉,那顺便吃到香蕉,不是自然而然的事情吗?代码如下:

    点击运行,效果如下:

    看来这个挑战也没有那么复杂嘛!

    有时候,只要我们换个正确的对象(把香蕉换成小岛),一切都会变得容易起来。

    这句话没有引申义,不要多想。

    第64关

    随着猴子越来越厉害,也就是小朋友运用编程解决问题的能力越来越强,小猴子面临的挑战也越来越复杂!

    在这一关里,猴子怎么才能吃到三个香蕉呢?

    猴子需要先走到最上面那条河里的小龟龟的背上,然后小龟龟背着猴子游到第一条河里的香蕉;

    然后猴子走到中间那条河里的小龟龟的背上,然后小龟龟背着猴子游到中间那条河里的香蕉;

    然后猴子走到最下面那条河里的小龟龟的背上,然后小龟龟背着猴子游到最下面那条河里的香蕉。

    我们看看代码:

    如果直接点击运行,我们可以看到这个效果:

    遇到失败,第一反应是找出问题并且解决问题,不要有失败的情绪。

    我们分析一下:第一个问题,猴子没动。这个好解决:把step 0改成step 7即可,7是猴子和小龟龟之间的距离,用尺子测量出来的。第二个问题,小龟龟只走了与香蕉之间距离的一半。这个也好解决,把t.step 10改成t.step 20即可,20是小龟龟和香蕉之间的距离,这也是用尺子测量出来的。

    于是,改正之后的代码如下:

    点击运行,效果如下:

    猴子的确吃到了三个香蕉,但是我们发现,我们只得到了一颗星!

    原因是我们用step 7这行代码让猴子走到小龟龟背上,这个是不那么聪明的做法。其实我们不需要测量猴子和小龟龟之间的距离,用代码step distanceTo t就可以让猴子自动走到小龟龟的背上。

    不过,为什么小龟龟到香蕉的距离不用step distanceTo b之类的代码呢?

    这是因为小龟龟和香蕉都是变动的,也就是小龟龟0游到香蕉0,小龟龟1游到香蕉1,小龟龟2游到香蕉2。所以我们需要用一个标量去完成for循环,for循环的对象应该是标量0,1,2,而不是小龟龟0,小龟龟1, 小龟龟2。
    一个可能的代码是:

    for b in [0 1 2]

          step distanceTo turtles[t]

          turtles[t].step distanceTo bananas[t]

    但是这个代码在这里是无法运行的。也许是目前还没有学到这个知识点。这里我们知道真实的代码中可以这么做就可以了。

    修正后的代码如下:

    点击运行,看看效果:

    挑战成功!

    第65关

    这一关里,我们会遇到哪些新的挑战呢?

    我们可以看到,每个香蕉的上面有一个坑。我们的猴子只能吃到香蕉,吃到香蕉猴不能多走一步,这也好说,用step distanceTo b就可以了。但是如何让猴子往回走到小龟龟背上,并且正面朝上呢?有两个方案:

    方案1:转身180度,走回小龟龟的背上,然后再转身180度;

    方案2:倒着走小龟龟与香蕉之间的距离;

    我个人觉得方案2更简洁一些,不过为了实施方案2,我们需要用一个变量明确定义猴子与香蕉之间的距离。

    所以我们要把原来的代码:

    改成:

    这段代码里,每一行的含义是:

    1. for b in bananas:对于bananas里的每个对象b

    2. d = distanceTo b:d是猴子与对象b之间的距离

    3. step d:往前走距离d

    4. step -d:往后走距离d

    5. turtle.step 8:小龟龟往左走距离8,让猴子面对下一个香蕉。

    点击运行,效果如下:

    挑战成功!

    这一周的5关又这样被攻克了,在这5关里,我们知道了for循环里的对象可以是任何一个对象。

    这算是对上一周的for循环给出了新的玩法。

    希望大家的孩子们玩的开心~

    周末愉快!

    相关文章

      网友评论

      本文标题:少儿编程游戏CodeMonkey通关攻略:第61-65关

      本文链接:https://www.haomeiwen.com/subject/qludgttx.html