老哈 发表于 2016-7-27 09:08:35

Light-Bot编程智力游戏

         机器人点灯(Light-bot)是一款益智类游戏,用你的头脑风暴,让机器人走到固定的地方,将灯点亮即可。并且在游戏结束后会统计你的走法.看看谁能用最少的步数通关!
      个人感觉这是挺有意思的一个游戏,值得用心玩一下,可以让你体验一下程序员的思维方式。对程序员而言,可以简单体会到函数及递归的妙用,因为运用函数和递归可以减少需要的指令数。


下面是个人的通关情况:总指令数(146)
第一关:3
MAIN METHOD:前、前、亮

第二关:9MAIN METHOD:右、F1、F1、亮
FUNCT.1:前、前、左、前、前

第三关:9
MAIN METHOD:F2、左、F2
FUNCT.1:前、跳、亮
FUNCT.2:F1、F1、F1

第四关:10
MAIN METHOD:F1、右、F1、F1
FUNCT.1:前、跳、跳、前、前、亮

第五关:11
MAIN METHOD:F2
FUNCT.1:前、跳、前、跳、前、亮、左、跳
FUNCT.2:F1、F2

第六关:15
MAIN METHOD:F1、F2、跳、F2、右、F2、F1
FUNCT.1:前、跳、跳、前、前、亮
FUNCT.2:右、F1

第七关:9
MAIN METHOD:F2
FUNCT.1:右、亮、前、右
FUNCT.2:F1、F1、前、F2

   
这一关我刚开始玩时采用的方法是是一行一行走,左边走完了转过来走右边。
后来对方法进行了改进,引入递归,具体思路
前-右-前-右 两次就回到了原来的地方,那每做两次再加一步前,之后重复前面的动作,这样就可以遍历所有的格子,在合适的地方加上亮即可实现。
最后又进行了改进,将上面前-右-前-右改为右前右,即将两行的环缩为一行,加上亮就是第一个函数FUNCT.1
FUNCT.2就是执行两次FUNCT.1然后加一步前,之后便递归调用即可。
最后将总指令数降到了9。
第八关:13
MAIN METHOD:F1、F2、F2、F2、右、F2
FUNCT.1:前、跳、前、亮
FUNCT.2:F1、右、F1

第九关:13
MAIN METHOD:跳、F1、跳、F2
FUNCT.1:跳、亮、左
FUNCT.2:跳、前、F1、F1、F1、F2


该关页采用递归的方法,如图,首先可以分成四等分,只要完成一份,调用递归即可,上面就采用了这种思想,比刚开始少用了好几个指令。第十关:20
MAIN METHOD:F2、F2、F2、跳、左、F1、F2、右、F2
FUNCT.1:跳、前、前、前、亮
FUNCT.2:F1、左、F1、右、F1、左



第十一关:17
MAIN METHOD:F2
FUNCT.1:跳、亮、跳、跳、亮、跳、跳、亮
FUNCT.2:左、F1、左、左、F1、左、前、F2



该关采取了同第7关一样的策略,即每行一个来回,去时奇数,来时偶数(二者是对称),然后到下一行重复刚才的操作,通过构造对称性及采用递归策略,将总指令数由20多个降到了17个。第十二关:17
MAIN METHOD:前、跳、F2、F1、右、F2、亮
FUNCT.1:跳、亮、跳、亮、跳、亮、左
FUNCT.2:F1、F1、F1


游戏之中最常用的思维逻辑就是递归,通过递归可以简化指令数,而我们可以通过对称性,添加无效操作是的可以采用递归或者对步骤合并提取。充分的利用函数和递归可以降低你的步数,快来试试吧
页: [1]
查看完整版本: Light-Bot编程智力游戏