"兵"走棋算法

2.1 说明

对于“兵”,它可以走棋落子的位置计算可能稍加复杂

  1. 判断走棋的方向,整体来说黑方的“兵”不能向上移动,红方的“兵”不能向下移动
  2. 判断是否过河,未过河之前只有1个可以走棋落子位置,过河后就可以对3个方向进行判断,如果不是同一方的棋子,那么就可以标记为可以落子
  3. 当“兵”达到另外一方的边界后,只能有左右2个方向进行判断是否可以走棋落子

2.2 代码实现

        team = clicked_chess.team
        row = clicked_chess.row
        col = clicked_chess.col
        map_ = self.chessboard_map

        if clicked_chess.name == "z":  # 卒
            if team == "r":  # 红方
                if row - 1 >= 0:  # 只能向上移动
                    if not map_[row - 1][col] or map_[row - 1][col].team != team:
                        put_down_chess_pos.append((row - 1, col))
            else:  # 黑方
                if row + 1 <= 9:  # 只能向下移动
                    if not map_[row + 1][col] or map_[row + 1][col].team != team:
                        put_down_chess_pos.append((row + 1, col))
            # 左右判断
            if (team == "r" and 0 <= row <= 4) or (team == "b" and 5 <= row <= 9):  # 左、右一步
                # 左
                if col - 1 >= 0 and (not map_[row][col - 1] or map_[row][col - 1].team != team):
                    put_down_chess_pos.append((row, col - 1))
                # 右
                if col + 1 <= 8 and (not map_[row][col + 1] or map_[row][col + 1].team != team):
                    put_down_chess_pos.append((row, col + 1))

image-20210821190033816

2.3 运行效果

运行程序,点击“兵”,效果如下:

img

Copyright © itprojects.cn 2021 all right reserved,著作权归itprojects.cn所有,由王铭东编写该文件修订时间: 2021-08-21 20:32:55