Linux中國

只有幾百個位元組大小的國際象棋程序

我最喜愛的 ZX81 遊戲有: 模擬飛行(Flight Simulation), 3D 版怪物迷宮(3D Monster Maze), 小蜜蜂(Galaxians), 以及最重要的 1K ZX Chess。 只有最後一個程序是為未擴展版的 ZX81 電腦設計的。事實上,David Horne 開發的 1K ZX Chess 只使用了僅僅 672 位元組的 RAM(LCTT 譯註:如果讀者有興趣,可以看看這裡對該程序的代碼及解釋)。儘管如此,該遊戲儘力去實現大多數的國際象棋規則,並提供了一個計算機虛擬對手。雖然一些重要的規則被忽略了(如:王車易位,兵的升變,和吃過路兵) (LCTT 譯註:參考了這裡這裡),但能夠和人工智慧相對抗,這仍然令人驚訝。這個遊戲佔據了我逝去的青春里的相當一部分。

1K ZX Chess 保持了在所有計算機上國際象棋的最小實現的地位長達 33 年之久,直到今年由 BootChess 打破了該記錄,緊接著由 Toledo AtomChess 打破。這三個程序都沒有實現所有的國際象棋規則,所以為了完整性,我介紹了我最喜愛的那些實現了所有國際象棋規則的極小的國際象棋。

Linux 有著一系列極其強大的國際象棋引擎,如 Stockfish, Critter, Togo II, Crafty, GNU Chess 和 Komodo 。 在這篇文章精選的國際象棋程序雖敵不過這些好的國際象棋程序,但它們展示了使用微不足道的代碼庫究竟可以實現多少東西。

Toledo Atomchess

你可能已經看到了大量有關 BootChess 新聞報道,這個只用 487 位元組寫就的國際象棋程序,一舉打破了先前最小的國際象棋程序 1K ZX Chess 的記錄。所以,Óscar Toledo Gutiérrez 挽起袖子自己編寫了一個更加緊湊的國際象棋遊戲。Toledo Atomchess 是僅有 481 位元組的 x86 彙編代碼,都能放到引導扇區里。 在難以置信的代碼大小下,這個引擎實現了一個可玩的國際象棋遊戲。

特點包括:

  • 基本的棋子移動
  • 用 ASCII 文本表現的棋盤
  • 以代數形式來輸入移動(註:如 D2D4)
  • 3 層的搜索深度

顯然,為了將這個國際象棋程序壓縮到 481 位元組中,作者必須做出某些犧牲,這些局限包括:

  • 沒有兵的升變
  • 沒有王車易位
  • 沒有吃過路兵
  • 沒有移動確認

該作者也使用 C,JavaScript 和 Java 來寫這個國際象棋程序,每種實現都非常小。

BootChess

BootChess 是一個國際象棋的極其小巧的計算機實現。這個程序被塞進到僅僅 487 位元組里,並可運行在 Windows, Mac OS X 和 Linux 等操作系統。BootChess 的棋盤和棋子單獨用文本表示,其中 P 代表兵, Q 用來代表王后,以及「點」代表空白格子。

特點包括:

  • 象棋棋盤和用戶輸入的形象的文本表示
  • 引導扇區大小(512 位元組)的可玩的象棋遊戲
  • 只需 x86 bios 硬體引導程序(沒有軟體依賴)
  • 所有主要的正規移動包括雙兵開局
  • 兵升變為王后(與 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

Micro-Max 是一個用 133 行 C 語言寫就的象棋源程序。

作者實現了一個 hash 變換表,該引擎檢查輸入移動的合法性,以及支持 FIDE(註: World Chess Federation 縮寫,參見其官網) 的全部規則,除了低升變。

特點包括:

  • 遞歸的 negamax 搜索
  • 反奪的靜態搜索
  • 反奪規則的擴展
  • 迭代深化
  • 最佳移動優先的 排序
  • 存儲分數和最佳移動的 Hash 表
  • 完整的 FIDE 規則(除了低位升變)和移動合法性檢查

還有一個 1433個字元的較大版本,但允許你使用完整的 FIDE 規則的低升變。

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

作者:Frazer Kline 譯者:FSSlc 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國