写一个python游戏程序:扫雷
以下是一个简单的扫雷游戏程序,使用Python的tkinter库进行图形界面的开发:
import tkinter as tk
import random
class Minesweeper:
def __init__(self, master):
self.master = master
self.master.title("Minesweeper")
self.width = 20
self.height = 20
self.mines = 40
self.board = [[0 for x in range(self.width)] for y in range(self.height)]
self.mine_board = [[0 for x in range(self.width)] for y in range(self.height)]
self.button_board = [[0 for x in range(self.width)] for y in range(self.height)]
self.game_over = False
self.create_board()
def create_board(self):
# create mine board
mine_positions = random.sample(range(self.width * self.height), self.mines)
for pos in mine_positions:
y = pos // self.width
x = pos % self.width
self.mine_board[y][x] = 1
for i in range(-1, 2):
for j in range(-1, 2):
if x+i >= 0 and x+i < self.width and y+j >= 0 and y+j < self.height:
self.board[y+j][x+i] += 1
# create buttons
for y in range(self.height):
for x in range(self.width):
button = tk.Button(self.master, width=2, height=1, command=lambda x=x, y=y:self.click_button(x, y))
button.grid(row=y, column=x)
self.button_board[y][x] = button
def click_button(self, x, y):
if self.game_over:
return
if self.mine_board[y][x] == 1:
self.button_board[y][x].config(text="X", bg="red")
self.game_over = True
tk.messagebox.showinfo("Minesweeper", "Game Over!")
else:
self.reveal(x, y)
def reveal(self, x, y):
if self.board[y][x] == 0 and self.button_board[y][x]["state"] != "disabled":
self.button_board[y][x].config(text="", state="disabled", disabledforeground="black")
for i in range(-1, 2):
for j in range(-1, 2):
if x+i >= 0 and x+i < self.width and y+j >= 0 and y+j < self.height:
self.reveal(x+i, y+j)
else:
self.button_board[y][x].config(text=self.board[y][x], state="disabled", disabledforeground="black")
def run(self):
self.master.mainloop()
root = tk.Tk()
game = Minesweeper(root)
game.run()
程序的主要逻辑是:
- 随机生成指定数量的地雷位置,并根据地雷位置更新数字矩阵;
- 创建一个按钮矩阵,每个按钮对应一个数字矩阵中的元素;
- 当玩家点击一个按钮时,如果对应的元素为地雷,则游戏结束,否则根据数字矩阵中的值展开周围的按钮;
- 当所有非地雷按钮都被展开时,游戏胜利。
该程序只是一个简单的示例,还有很多可以改进的地方,比如添加计时器、添加难度选择等等。
原文地址: https://www.cveoy.top/t/topic/bQkv 著作权归作者所有。请勿转载和采集!