1447914606599144.jpg

  大概接触过一些有趣的益智游戏,能够锻炼人的思考能力或者掌握一些知识。不过知识的定义很广泛,而且通过游戏来学习,效率并不高(无法代替专业学习),但重在趣味性。

  有三类游戏:
  一者是本身游戏过程中出现真实的知识(如大航海,P 社四萌)。
  一者是游戏某些问题的解决需要玩家去查找学习知识,或自行想出算法(如 Minecraft 的红石电路,各种策略游戏的布阵)。
  一者是游戏无真实知识考察,但能够锻炼玩家通过逻辑思考解决问题的能力(如 Valve 的 Portal,braid)。
  (注:这三类并不是互不重叠的,下面主要侧重于前两者)

  1. 编程算法设计相关
  之前答案已经说过的CodeCombat就很不错,适合娱乐性学习。
  下面是几个有趣的非直接编程游戏,难度逐渐上升。
  所谓的非直接编程,就是你可以控制放置某些基本物件,然后要合理组合物件可以完成任务。不过其编程方式是非常原始的,更没有 C++,python 那种便利性。甚至你根本不能输入自己的代码!而只能组合已有的元件,所以很考验逻辑和算法设计能力。
  这种游戏就和 OJ 一样,会有给定的输入,要求得到给定的输出。有时会有几组数据,全过了才能到达下一关。玩家可以在游戏中体会一下从 0,1 进制开始搭建到完成简单的输入 A,B 输出 A+B 的函数功能的过程(游戏过程有时甚至会出现堆栈等数据结构)。
  不夸张地说,能够独立完成这些游戏的大部分关卡后,你也学到了很多经典而巧妙的设计方法,逻辑思考能力应该有所提升,这些对于数学,CS 等学科的理论学习是有帮助的。

  编程机器人
  lightbot 1 & 2

1447914829227633.jpg

  一张图说明这个游戏的操作方式:

1447914839236459.jpg

  • 将这些命令用鼠标拖拽到右侧空白格子里面,按照从上到下,从左到右的顺序摆好。
  • 你的目的就是让机器人通过你自己的指令点亮所有的蓝色格子,便可过关。
  • 然后点击下方的绿色按钮,小机器人就会按照指令的顺序行动。

  如某一关,通过拖动放置了图中如右指令:

1447915395918720.jpg

  点击开始后,机器人便会先执行主函数,主函数调用函数 F1,机器人会跳跃,点灯,顺时针转,跳跃,点灯,顺时针转,顺时针转。然后 F1 又调用自身,机器人继续重复 F1 内操作,最终点亮所有蓝格子。

1447915408128990.jpg

  评价:
  曾经是 Kongregate 上最火的游戏之一。后续关卡引入了函数递归和条件判定的规则,让游戏更有挑战性,2 代比 1 代要复杂一些(以上均为 2 代的游戏图)。
  这个游戏后期的某些关卡就会变得有些困难,如最后一关:

1447915582778662.jpg

  (是不是有一种不知所措的感觉……)
  游戏地址:
  lightbot 1 Play light-Bot, a free online game on Kongregate
  lightbot 2 Play Lightbot 2.0, a free online game on Kongregate
  PS:已出手机版,名字是一样的,AppStore下载(链接地址)。

  ★☆Boxes

1447916110420907.jpg

  有过前面的游戏,可以来正式介绍一些有一些难度的程序设计游戏了,如这个流程不算特别长的 Boxes。

1447916125497945.jpg

  说明:
  你是一个盒子工厂的盒子检测师,你的任务是把坏盒子识别出来,只让好盒子通过生产线,然后你可以通过放不同的部件来识别盒子(后期还会有各种奇怪的物件,如 +1,-1),每关最上方有黄色的框写明了过关要求。
  部件如下:

1447917473967436.jpg

  分别为:
  1. 传送盒子
  2. 盒子数字 +1
  3. 盒子数字 -1
  4. 检查盒子数字符号,不同符号运送方向不同
  5. 烧毁盒子
  6. 将盒子复制一份
  7. 当有盒子从上面经过时可以提供能源,使红色箭头等激活,盒子经过后就会停止供能
  8. 红色箭头一旦激活,能够无视其覆盖的元件,将盒子向指定方向运送(不激活时就和杂鱼一样不起作用)
  9. ???
  是不是感觉部件功能挺少的,其实它可以解决很多问题,比如部件图中的元件就可以实现将盒子数字乘以 2 的功能!(后面还能做到除法,加 50,返回十位数字等等神奇功能)
  评价:
  通过条件判定,+.-1 等基础功能,来实现关卡的要求,要求思维是比较灵活的。当然也比之前的游戏难了许多(特别是 19,20 关,还有 challenge level)。
  地址:Play Boxes, a Free online game on Jay is games

  ★☆Jahooma's LogicBox

1447917632126688.jpg

  和上面的 Boxes 类似,不过玩法略有不同:

1447917676684884.jpg

  即要控制字符串从黑色的圆盒子出发,然后按照箭头经过不同的盒子,最后从给定的方向离开。
  输入和期待的输出都已经写在右边了,是不是感觉越来越像编程作业题了……
  有趣的一点在于,那些功能盒的功能就是你自己做出来的,也就是类似于你在第 3 关写了个函数,然后能够在第 4 关用这个函数来完成目标……
  相比之下它可以做到更多功能,如读写,字符串删除 \ 写入,甚至还可以求字符串长度:

1447917752540783.jpg

  可是不要忘记,它的种种功能都是基于简单的功能,这就体现了编程设计算法的强大性。
  游戏地址:逻辑盒子,Jahooma's LogicBox

  ★★The Codex of Alchemical Engineering

1447917832227736.jpg

1447917838785833.jpg

1447917845754249.jpg

  这个游戏将会是给多只机械手臂进行符号编程,然后来运输元素,最终完成炼金工作。
  点击 RUN 之后机械臂会同时开始工作,因此时间的把握也是很重要的。
  如第一关两只机械臂的编程:

1447917891552172.jpg

  评价:
  这个游戏的关键其实在于合理布局……后期会出现比较复杂的组合。
  地址:http://www.kongregate.com/games/ ... hemical-engineering

  ★★★ Manufactoria

1447918115642384.jpg

  真程序设计之作(难度较大,至今未独立通关),当年借助攻略到达最后一关的我被吓哭了,最后一关即输入 A,B,用绿色点隔开,然后输出 A+B(二进制意义下)。
  Solution:

1447918151199453.jpg

(这个是在网上找的图片,实在不想再打一次了……)

  这是来自 Matrix67 的博客的介绍:Manufactoria:非常好玩的自动机编程游戏
  这是我所见过的程序设计类 Puzzle 游戏中最好玩的一个。它是真正意义上的程序设计游戏,游戏不但提供了完备的读写和流程控制功能,甚至还引入了随机测试数据。游戏很快就会引入算法的思想,因为玩家渐渐会发现,这些谜题并不是单靠模拟就能解决的;后面的谜题则越发困难,需要相当有技巧性的算法设计,对脑力绝对是一个大挑战。如果你热爱算法与程序设计,你一定会爱上这个游戏的。
  游戏背景是在一个机器人工厂里你要对机器人的芯片数据进行测试,机器人的芯片数据是一个红、黄、蓝、绿点组成的序列。你需要判断这个数据是否满足特定的格式;或者把它按照规则进行改写。
  游戏有一些难度,但部件很简单:

  • 传送带:把机器人移动到箭头指向的地方,注意传送道可以交叉,交叉的话会依照机器人是以横向或纵向移入传送道决定机器人的走向
  • 红蓝分支器:移掉序列中第一个点,然后判断它的颜色,如果是红色,把它移动到红色箭头指向的格子;如果是蓝色则移动到蓝色箭头指向的;其他状况(包括序列是空的)则移动到灰色箭头指向的。黄绿分支器和红蓝分支器原理相同。注意分支器从任意方向都可进入,不是只能从黑色粗线处进入
  • 写入器:把特定颜色的点写到序列的末尾
    评价:

  游戏设计比较容易上手,到后期游戏要求实现的功能咋一看几乎都是 impossible,比前面的游戏还是要难很多的,牵涉了一些自动机理论。
  地址:
  K 站(kongregate)
  Matrix67 Blog Manufactoria:非常好玩的自动机编程游戏
  官网 PleasingFungus Games! [Manufactoria]

  额外

1447918587830133.jpg

  人工智能入门:BugBrain 游戏中文教程
  一个让你构造神经网络来指挥一只虫子活动的游戏,比较老的游戏,不过内容还是非常丰富的,可以学习到神经网络的一些知识。
  BugBrain 游戏

1447918618669080.jpg

  最后的补充,其实还有一些简单的直接编程的游戏可以推荐,如:

  1. 手机游戏 Hacked

1447918671579351.jpg

  2. 诸如 P 社的游戏还有 MC 等别的答案应该也有提到了,像某些构思精彩的游戏,见以前的巨长回答:有什么神构思的游戏? - 陆 zz 的回答
  这些编程游戏应该能够让人学到一些有趣的算法小知识了……