TranslateProject/translated/share/20150227 Chess in a Few Bytes.md

6.8 KiB
Raw Blame History

几 KB 的国际象棋程序

当我提及到我用来介绍计算(注:这里翻译的有问题)的是一台 ZX81 电脑时我已经暴露了我的年龄。ZX81 是一个由英国(UK,the United Kingdom) 开发者Sincilair 研究所)生产的家庭电脑,它拥有"高达" 1KB 的随机存储器(RAM)。上面的 1kB 并不是打印错误,这个家庭电脑确实只配置有 1KB 的板载内存。但这个内存大小上的限制并没有阻止爱好者制作种类繁多的软件。事实上,这个机器引发了一代编程奇才的出现,这迫使他们掌握让程序在该机上正常运行的方法。这个机器可以通过一个 16 KB 的 RAM 包来进行升级,这就提供了更多的编程可能。但未经扩展的 1KB 机器仍然激励着编程者发布卓越的软件。

1K ZX Chess

我最喜爱的 ZX81 游戏有: Flight Simulation, 3D Monster Maze, Galaxians, 以及最重要的 1K ZX Chess。 只有最后一个程序是为未扩展的 ZX81 电脑设计的。事实上David Horne 开发的 1K ZX Chess 只使用了仅仅 672 字节的 RAM(注:如果读者有兴趣,可以看看 这里对该程序的代码及解释)。尽管如此,该游戏尽力去实现大多数的国际象棋规则,并提供了一个计算机虚拟对手。虽然一些重要的规则被忽略了(如:王车易位,兵的升变,和吃过路兵) (注:参考了这里这里),但能够和人工智能相对抗,这仍然令人惊讶。这个游戏占据了我逝去的青春里的相当一部分。

1K ZX Chess 保持着在任何计算机上国际象棋的最小实现的地位长达 33 年,直到今年由 BootChess 打破了该记录,紧接着由 Toledo AtomChess 打破。这三个程序都没有实现所有的国际象棋规则,所以为了完整性,我介绍了我最喜爱的,实现了所有国际象棋规则的极小的国际象棋。

Linux 有着一系列极其强大的国际象棋引擎,如 Stockfish, Critter, Togo II, Crafty, GNU Chess, 和 Komodo 。 在这篇文章精选的国际象棋程序虽敌不过一个好的国际象棋程序,但它们展示了使用微不足道的代码库究竟可以实现多少东西。

你可能已经看到了大量有关 BootChess 新闻报道,一个只用 487 字节写就的国际象棋程序一举打破了先前最小的国际象棋程序1K ZX Chess 的记录。Óscar Toledo Gutiérrez 拿起外套并决定编写一个更加紧凑的国际象棋游戏。Toledo Atomchess 是仅有 481 字节的 x86 汇编代码,它适合在引导扇区里。 在给定的极小代码库限制下,这个引擎实现了一个适当的国际象棋游戏。

特点包括:

  • 基本的象棋移动
  • 象棋盘的 ASCII 文本表现
  • 以代数形式来输入移动(注:如 D2D4)
  • 3 层的搜索深度

显然,为了将这个国际象棋程序压缩到 481 字节中,作者必须做出某些牺牲,这些局限包括:

  • 没有兵的升变
  • 没有王车易位
  • 没有吃过路兵
  • 没有移动确认

该作者也使用 CJavaScript 和 Java 来写这个国际象棋程序,每种实现都非常小。

  • 网站: nanochess.org/chess6.html
  • 开发者: Óscar Toledo Gutiérrez
  • 协议: 对非商业使用免费Free for non-commercial use
  • 版本号: -

BootChess 是一个国际象棋的极其小巧的计算机实现。这个程序被塞进到仅仅 487 字节里,并可运行在 Windows, Mac OS X 和 Linux 等操作系统。BootChess 的棋盘和棋子单独用文本表示,其中 P 代表兵, Q 用来代表王后,以及输入的任何停顿代表空白方块。

特点包括:

  • 象棋棋盘和用户输入的图形化文本表示
  • 引导扇区大小(512 字节)的可玩的象棋游戏
  • 只需 x86 bios 硬件引导程序(没有软件依赖)
  • 所有主要的正规移动包括 double square pawn start(注:这个我没有查到是什么意思)
  • 兵升变为王后(与 1k ZX Chess 相反)
  • 名为 taxiMax > minMax half-ply 的 CPU 人工智能
  • 硬编码的西班牙白子开局

同样,它也存在一些重要的限制。这些遗漏包括:

  • 正在推广

  • 吃过路兵

  • 没有王车易位

  • 3 次位置重复和局规则(注:下一步之前,同样的移动出现了两次;可以参考这里)

  • 50 步移动和局规则(注在连续的50个回合内双方既没有棋子被吃掉也没有兵被移动过则和局可以参考这里)

  • 没有开放或封闭的书籍

  • 一个或多个 minMAX/negaMax 全层人工智能

  • 网站: www.pouet.net/prod.php?which=64962

  • 开发者: Olivier "Baudsurfer/RSi" Poudade

  • 协议: WTFPL v2

  • 版本号: .02


Micro-Max 是一个用 C 写就的 133 行象棋源程序。

作者实现了一个 hash 变换表,该引擎检查输入移动的合法性,以及支持 FIDE(注: World Chess Federation 缩写,这里为其官网) 的全部规则,除了正在推广的规则。

特点包括:

  • 递归的 negamax 搜索
  • 重新夺回的静态搜索
  • 重新夺回规则的扩展
  • 迭代深化
  • 最好的先走策略 排序
  • 存储分数和最佳移动的 Hash 表
  • 完整的 FIDE 规则(不包括正在推广的规则) 和移动合法性检查

同样存在一个简装的 1433个字符的版本但允许你使用符合 FIDE 规则的正在推广的规则。


via: http://www.linuxlinks.com/article/20150222033906262/ChessBytes.html

作者Frazer Kline 译者:FSSlc 校对:校对者ID

本文由 LCTT 原创翻译,Linux中国 荣誉推出