求拼图代码,有注释的

想要一个拼图代码。要有注释!!!求大神分享一下啊


import random

# 拼图游戏类
class Puzzle:
    def __init__(self, size):
        self.size = size  # 拼图大小,即行列数
        self.board = [[str(i + j * size + 1) for i in range(size)] for j in range(size)]
        self.board[size - 1][size - 1] = ''  # 最后一个格子为空
        self.moves = []  # 记录移动步骤

    # 打印当前拼图状态
    def print_board(self):
        for row in self.board:
            print(' '.join(str(cell).rjust(2) for cell in row))

    # 执行一次随机移动
    def move(self):
        empty_pos = self.find_empty()  # 找到空白格子位置
        moves = [(0, 1), (0, -1), (1, 0), (-1, 0)]  # 可能的移动方向
        valid_moves = [(i, j) for (i, j) in moves if self.is_valid_move(empty_pos[0] + i, empty_pos[1] + j)]  # 找到可行的移动方向
        if valid_moves:  # 如果有可行的移动方向
            direction = random.choice(valid_moves)  # 随机选择一种移动方向
            self.swap(empty_pos, (empty_pos[0] + direction[0], empty_pos[1] + direction[1]))  # 执行移动
            self.moves.append(direction)  # 记录移动步骤

    # 判断一个位置是否在棋盘内且不是空白格子
    def is_valid_move(self, row, col):
        return row >= 0 and row < self.size and col >= 0 and col < self.size and self.board[row][col] != ''

    # 找到空白格子位置
    def find_empty(self):
        for row in range(self.size):
            for col in range(self.size):
                if self.board[row][col] == '':
                    return (row, col)

    # 交换两个格子的值
    def swap(self, pos1, pos2):
        self.board[pos1[0]][pos1[1]], self.board[pos2[0]][pos2[1]] = self.board[pos2[0]][pos2[1]], self.board[pos1[0]][pos1[1]]

    # 判断是否已完成拼图
    def is_solved(self):
        return all(self.board[row][col] == str(col + row * self.size + 1) for row in range(self.size) for col in range(self.size - 1)) and self.board[self.size - 1][self.size - 1] == ''

# 主程序
size = 4  # 设置拼图大小
puzzle = Puzzle(size)  # 创建拼图游戏实例
for i in range(1000):  # 打乱拼图
    puzzle.move()
puzzle.print_board()  # 打印初始拼图状态
while not puzzle.is_solved():  # 循环直到拼图完成
    row, col

移动

def move(self, direction):
    row, col = self.find_blank()
    if direction == 'up':
        if row > 0:
            self.grid[row][col], self.grid[row - 1][col] = self.grid[row - 1][col], self.grid[row][col]
    elif direction == 'down':
        if row < self.size - 1:
            self.grid[row][col], self.grid[row + 1][col] = self.grid[row + 1][col], self.grid[row][col]
    elif direction == 'left':
        if col > 0:
            self.grid[row][col], self.grid[row][col - 1] = self.grid[row][col - 1], self.grid[row][col]
    elif direction == 'right':
        if col < self.size - 1:
            self.grid[row][col], self.grid[row][col + 1] = self.grid[row][col + 1], self.grid[row][col]

还原

def reset(self):
    self.grid = [[i * self.size + j + 1 for j in range(self.size)] for i in range(self.size)]
    self.grid[-1][-1] = 0