上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.1 走法表示
走法就是一个棋子从一个位置移动到另一个位置。所以走法包含三要素:棋子、起点、终点,要表示走法就要包含这三要素。中国象棋的记谱规则是,马二进三,车1平2等。前面两个字表示棋子及其所在位置,后面两个字表示行棋的方向及位置。拿“马二进三:走法来说,马表示要走的棋子,二表示第2列,即第2列上的马,进表示向前(退表示向后,平表示左右移动),三表示第3列。这步棋表示第二列的马前进到第3列。
终点可能有对方棋子,这叫吃子走法;也可能没有对方棋子,这叫不吃子走法。如果允许悔棋,那么必须记下走法吃过的棋子。不吃子走法直接将棋子从起点移动到终点,悔棋时将棋子从终点移动到起点。吃子走法,先将终点对方棋子拿掉,再将起点棋子移动到终点;悔棋时,先将终点棋子移动到起点,再将被吃掉的棋子还原到终点。
如果知道一个走法的起点,我们可以从棋盘数组中得到要走的棋子。如开局时红方走马二进三,马的起始位置是202,终点位置是169,那可以从board[202]=22,知道走的是马,board[202]=0,得知终点位置为空,是一个不吃子走法。一般情况下,计算机并不需要知道走的是哪个棋子,所以走法只需要保存起点和终点。
走法的数据结构可以定义如下:
typedef struct { short from, to; } move;