“炮”走棋算法

8.1 说明

之所以将”炮“这个棋子的走棋算法放到最后来实现,是因为真的太复杂了

  1. 不仅要考虑同一行、同一列
  2. 还要考虑”隔山打“的情况

8.2 代码实现

elif clicked_chess.name == "p":  # 炮
    # 一行
    direction_left_chess_num = 0
    direction_right_chess_num = 0
    for i in range(1, 9):
        # 计算当前行中,棋子左边与右边可以落子的位置
        # 左边位置没有越界
        if direction_left_chess_num >= 0 and col - i >= 0:
            if not map_[row][col - i] and direction_left_chess_num == 0:
                # 如果没有棋子,则将当前位置组成一个元组,添加到列表
                put_down_chess_pos.append((row, col - i))
            elif map_[row][col - i]:
                # 如果当前位置有棋子,那么就判断是否能够吃掉它
                direction_left_chess_num += 1
                if direction_left_chess_num == 2 and map_[row][col - i].team != team:
                    put_down_chess_pos.append((row, col - i))
                    direction_left_chess_num = -1  # 让其不能够在下次for循环时再次判断
        # 右边位置没有越界
        if direction_right_chess_num >= 0 and col + i <= 8:
            if not map_[row][col + i] and direction_right_chess_num == 0:
                # 如果没有棋子,则将当前位置组成一个元组,添加到列表
                put_down_chess_pos.append((row, col + i))
            elif map_[row][col + i]:
                # 如果当前位置有棋子,那么就判断是否能够吃掉它
                direction_right_chess_num += 1
                if direction_right_chess_num == 2 and map_[row][col + i].team != team:
                    put_down_chess_pos.append((row, col + i))
                    direction_right_chess_num = -1
    # 一列
    direction_up_chess_num = 0
    direction_down_chess_num = 0
    for i in range(1, 10):  # 这样就让i从1开始,而不是从0
        # 计算当前列中,棋子上边与下边可以落子的位置
        # 上边位置没有越界
        if direction_up_chess_num >= 0 and row - i >= 0:
            if not map_[row - i][col] and direction_up_chess_num == 0:
                # 如果没有棋子,则将当前位置组成一个元组,添加到列表
                put_down_chess_pos.append((row - i, col))
            elif map_[row - i][col]:
                # 如果当前位置有棋子,那么就判断是否能够吃掉它
                direction_up_chess_num += 1
                if direction_up_chess_num == 2 and map_[row - i][col].team != team:
                    put_down_chess_pos.append((row - i, col))
                    direction_up_chess_num = -1

        # 下边位置没有越界
        if direction_down_chess_num >= 0 and row + i <= 9:
            if not map_[row + i][col] and direction_down_chess_num == 0:
                # 如果没有棋子,则将当前位置组成一个元组,添加到列表
                put_down_chess_pos.append((row + i, col))
            elif map_[row + i][col]:
                # 如果当前位置有棋子,那么就判断是否能够吃掉它
                direction_down_chess_num += 1
                if direction_down_chess_num == 2 and map_[row + i][col].team != team:
                    put_down_chess_pos.append((row + i, col))
                    direction_down_chess_num = -1

image-20210821190717067

8.3 运行效果

img

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