显示走棋位置

4.1 大体原理

  1. 获取被点击的棋子
  2. 计算被点击的棋子可以走棋的位置坐标
  3. 根据位置坐标创建对应的对象(就是用来标记可以落子位置的对象)
  4. while True循环中显示当前所有的可以落子对象的图片

4.2 本节目标

我们先做一个简单的demo:点击任意一个棋子之后,在这个棋子的4个临近的位置显示可以落子的图片,当实现了这个功能后,我们只需要对不同的棋子做不同的算法就可以正在的实现对应棋子可以落子的位置了

4.3 代码实现

class Dot(object):
    group = list()  # 这个类属性用来存储所有的“可落子对象”的引用

    def __init__(self, screen, row, col):
        """初始化"""
        self.image = pygame.image.load("images/dot2.png")
        self.rect = self.image.get_rect()
        self.rect.topleft = (60 + col * 57, 60 + row * 57)
        self.screen = screen
        self.row = row
        self.col = col

    def show(self):
        """显示一颗棋子"""
        self.screen.blit(self.image, self.rect.topleft)

    @classmethod
    def create_nums_dot(cls, screen, pos_list):
        """批量创建多个对象"""
        for temp in pos_list:
            cls.group.append(cls(screen, *temp))

    @classmethod
    def show_all(cls):
        for temp in cls.group:
            temp.show()

image-20210821185016601

def get_put_down_postion(self, clicked_chess):
    """获取当前被点击棋子可以落子的位置坐标"""
    put_down_chess_pos = list()
    put_down_chess_pos.append((clicked_chess.row - 1, clicked_chess.col))
    put_down_chess_pos.append((clicked_chess.row + 1, clicked_chess.col))
    put_down_chess_pos.append((clicked_chess.row, clicked_chess.col - 1))
    put_down_chess_pos.append((clicked_chess.row, clicked_chess.col + 1))
    return put_down_chess_pos

image-20210821185121327

# 计算当前被点击的棋子可以落子的位置
put_down_chess_pos = chessboard.get_put_down_postion(clicked_chess)
# 根据当前被点击的棋子创建可以落子的对象
Dot.create_nums_dot(screen, put_down_chess_pos)

image-20210821185234940

# 显示可以落子的位置图片
Dot.show_all()

image-20210821185318606

4.4 运行效果

img

如果点击多个棋子的效果如下:

img

想想看为什么会出现这个bug?下节修复这个bug

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