用phyon写一个扫雷
时间: 2023-12-29 08:29:28 浏览: 31
以下是一个简单的 Python 扫雷游戏实现,仅供参考:
```python
import random
# 定义扫雷棋盘
class Minesweeper:
def __init__(self, width=10, height=10, mines=10):
self.width = width
self.height = height
self.mines = mines
self.board = self.generate_board()
# 初始化棋盘
def generate_board(self):
board = [[0 for x in range(self.width)] for y in range(self.height)]
positions = random.sample(range(self.width * self.height), self.mines)
for idx in positions:
row = idx // self.width
col = idx % self.width
board[row][col] = -1
for r in range(row - 1, row + 2):
for c in range(col - 1, col + 2):
if (r >= 0 and c >= 0 and r < self.height and c < self.width
and board[r][c] != -1):
board[r][c] += 1
return board
# 显示棋盘
def display_board(self, reveal=False):
for row in range(self.height):
for col in range(self.width):
if self.board[row][col] == -1 and reveal:
print("*", end=" ")
elif self.board[row][col] == -1 and not reveal:
print(".", end=" ")
else:
print(str(self.board[row][col]), end=" ")
print()
# 点击棋盘
def click(self, row, col):
if self.board[row][col] == -1:
return False
elif self.board[row][col] > 0:
return True
else:
self.board[row][col] = -2
for r in range(row - 1, row + 2):
for c in range(col - 1, col + 2):
if (r >= 0 and c >= 0 and r < self.height and c < self.width
and self.board[r][c] != -1 and self.board[r][c] != -2):
self.click(r, c)
return True
# 执行游戏
def play():
game = Minesweeper()
game.display_board(reveal=True)
while True:
row = int(input("请输入行数:"))
col = int(input("请输入列数:"))
if not game.click(row, col):
print("游戏结束!")
game.display_board(reveal=True)
break
game.display_board()
# 测试
play()
```
运行该程序后,会生成一个 10x10 的扫雷棋盘,其中包含 10 个地雷。玩家可以通过输入行数和列数来点击棋盘上的方块,如果点击到地雷则游戏结束,否则会显示该方块周围的地雷数量。玩家需要通过逻辑推理来避免点击到地雷,直到所有非地雷方块都被点击为止。