如何写一个国际象棋的游戏(第一部分)

972 阅读3分钟

“我正在参加掘金社区游戏创意投稿大赛个人赛,详情请看:游戏创意投稿大赛

写在前面

代码仓库,走过路过点一个 Star ✨

在小时候接触过一些棋类游戏:五子棋、中国象棋、国际象棋等等,其中五子棋玩的最好,最近机缘巧合下重新接触了国际象棋,看了一遍规则(我已经忘记的差不多了,当然可能小时候也没有仔细的研究过,比如王车易位,分短易位和长易位两种)。我下载了一些APP,国象联盟、Lichess 这些体验了一下,周末把 Neflix 网剧《后翼弃兵》刷完了,实际上我的代码上周就开始写了,写下这个文章是因为代码也写了好几个版本出来了,顺便分享一下写代码的过程和心得体会。

国际象棋规则

认识棋子

  • ♙ 兵(Pawn)从起始位置开始,第一步能走一格或者两格,此后都只能拱一下,斜吃;
  • ♘ 马(Knight)直走一格斜走一格,不会和中国象棋一样卡马脚;
  • ♗ 象(Bishop)能斜着一直走,走 X 形状;
  • ♖ 车(Rock)能横着竖着一直走,和中国象棋一样,走十字形状;
  • ♕ 后(Queen)那就牛皮了,可以理解为是 Bishop 加 Rock,走米字形状;
  • ♔ 王(King)也是走米字,不过只能走一格;

当然以上翻译是对照中国象棋里面的棋子,实际上可能叫骑士,城堡,主教。

一些简单的规则

Promotion 升兵

兵拱到最后一格的时候,能变成除了王和自己以外其他所有棋子;

Castling 王车易位

需要满足三个条件:

  1. 王或者车在本局没有移动过
  2. 王车之间没有阻碍,马和象都在外面
  3. 王在被将军的时候和移动的过程中被攻击是不能使用这个规则的

易位分为长易位和短易位:

  • 长易位,王向后的方向移动两格,然后车放在王移动方向的另一边
  • 短易位,王向后相反的方向移动两格,然后车放在王移动方向的另一边

En passant 吃过路兵

依国际象棋的规则,一个在其第五行的兵,若敌方相邻列的兵从启始位置前进一格,前者可以将后者吃掉。依照吃过路兵的规则,即使敌方相邻列的兵从启始位置前进二格,前者仍可以将后者吃掉,而且吃掉后前者占据的位置就和敌方兵只前进一格后被吃掉的情形一样。吃过路兵有以下几个条件。

  • 要吃子的兵需在其第五行。
  • 被吃子的兵需在相邻的列,而且一次就移动二格。
  • 吃过路兵是选择性的,若要进行,就要在对方走棋后的下一步马上进行,否则就失去机会。