想要一个拼图代码。要有注释!!!求大神分享一下啊
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