import tkinter as tk
import random
# 游戏板的行数和列数
ROWS = 10
COLS = 10
# 地雷数
MINES = 10
class MineSweeper(tk.Tk):
def __init__(self):
super().__init__()
# 创建一个游戏板
self.game_board = tk.Frame(self, borderwidth=2, relief='sunken')
self.game_board.pack(side='top', padx=5, pady=5)
# 初始化游戏板
self.create_board()
def create_board(self):
# 创建一个空的游戏板
self.board = [[None for _ in range(COLS)] for _ in range(ROWS)]
# 添加地雷
self.add_mines()
# 计算每个方块周围的地雷数
self.calculate_numbers()
# 在游戏板上显示每个方块
for row in range(ROWS):
for col in range(COLS):
# 创建一个方块
cell = tk.Label(self.game_board, text=' ',
width=2, height=1, relief='raised')
cell.grid(row=row, column=col)
cell.bind('
cell.bind('
# 将方块添加到游戏板上
self.board[row][col] = {
'cell': cell,
'mine': False,
'number': None,
'revealed': False,
'flagged': False
}
def add_mines(self):
# 在游戏板上随机添加地雷
mines_added = 0
while mines_added < MINES:
row = random.randint(0, ROWS - 1)
col = random.randint(0, COLS - 1)
if not self.board[row][col]['mine']:
self.board[row][col]['mine'] = True
mines_added += 1
def calculate_numbers(self):
# 计算每个方块周围的地雷数
for row in range(ROWS):
for col in range(COLS):
if not self.board[row][col]['mine']:
# 计算周围的方块
neighbors = []
for d_row in range(-1, 2):
for d_col in range(-1, 2):
n_row = row + d_row
n_col = col + d_col
if n_row >= 0 and n_row < ROWS and n_col >= 0 and n_col < COLS:
neighbors.append(self.board[n_row][n_col])
# 计算周围地雷数
num_mines = sum(1 for n in neighbors if n['mine'])
# 将地雷数保存在方块上
self.board[row][col]['number'] = num_mines
def handle_left_click(self, event):
# 点击方块左键时的处理函数