写一个Python扫雷代码
时间: 2023-08-31 21:32:37 浏览: 57
### 回答1:
好的,这是一个简单的Python扫雷代码的例子:
```
import random
class MineSweeper:
def __init__(self, size=10, mines=10):
self.size = size
self.mines = mines
self.board = [[0 for j in range(self.size)] for i in range(self.size)]
self.hidden_board = [['-' for j in range(self.size)] for i in range(self.size)]
self.generate_mines()
self.calculate_numbers()
def generate_mines(self):
mines_placed = 0
while mines_placed < self.mines:
i = random.randint(0, self.size - 1)
j = random.randint(0, self.size - 1)
if self.board[i][j] != '*':
self.board[i][j] = '*'
mines_placed += 1
def calculate_numbers(self):
for i in range(self.size):
for j in range(self.size):
if self.board[i][j] == '*':
continue
count = 0
for x in range(i-1, i+2):
for y in range(j-1, j+2):
if x >= 0 and x < self.size and y >= 0 and y < self.size and self.board[x][y] == '*':
count += 1
self.board[i][j] = count
def display(self):
for i in range(self.size):
for j in range(self.size):
print(self.hidden_board[i][j], end=' ')
print()
def play(self):
print("Let's play MineSweeper!")
while True:
self.display()
row = int(input("Enter row (0-{}): ".format(self.size - 1)))
col = int(input("Enter col (0-{}): ".format(self.size - 1)))
if self.board[row][col] == '*':
print("You stepped on a mine. Game over.")
break
self.hidden_board[row][col] = self.board[row][col]
print("Good choice!")
if __name__ == '__main__':
game = MineSweeper()
game.play()
```
这是一个简单的扫雷游戏代码,你可以根据自己的需要对代码进行修改。
### 回答2:
这是一个简单的Python扫雷代码:
```python
import random
def create_board(rows, columns, num_mines):
# 创建一个空白的游戏板
board = [[0] * columns for _ in range(rows)]
# 随机放置雷
mines = random.sample(range(rows * columns), num_mines)
for mine in mines:
row = mine // columns
col = mine % columns
board[row][col] = -1
# 计算周围雷的数量
for i in range(rows):
for j in range(columns):
if board[i][j] != -1:
count = 0
for x in range(max(0, i - 1), min(i + 1, rows - 1) + 1):
for y in range(max(0, j - 1), min(j + 1, columns - 1) + 1):
if board[x][y] == -1:
count += 1
board[i][j] = count
return board
def play_game(board):
rows = len(board)
columns = len(board[0])
uncovered = [[False] * columns for _ in range(rows)]
game_over = False
while not game_over:
print_board(board, uncovered)
row = int(input("请输入要揭开的行数:"))
col = int(input("请输入要揭开的列数:"))
if board[row][col] == -1:
game_over = True
print("踩到雷了,游戏结束!")
print_board(board, uncovered)
else:
uncovered[row][col] = True
if board[row][col] == 0:
uncover_empty_neighbors(board, uncovered, row, col)
if check_win(board, uncovered):
game_over = True
print("恭喜你,扫雷成功!")
print_board(board, uncovered)
def uncover_empty_neighbors(board, uncovered, row, col):
rows = len(board)
columns = len(board[0])
for x in range(max(0, row - 1), min(row + 1, rows - 1) + 1):
for y in range(max(0, col - 1), min(col + 1, columns - 1) + 1):
if not uncovered[x][y]:
uncovered[x][y] = True
if board[x][y] == 0:
uncover_empty_neighbors(board, uncovered, x, y)
def check_win(board, uncovered):
rows = len(board)
columns = len(board[0])
for i in range(rows):
for j in range(columns):
if board[i][j] != -1 and not uncovered[i][j]:
return False
return True
def print_board(board, uncovered):
rows = len(board)
columns = len(board[0])
for i in range(rows):
for j in range(columns):
if uncovered[i][j]:
print(board[i][j], end=" ")
else:
print("#", end=" ")
print()
# 游戏设置
rows = 10
columns = 10
num_mines = 10
# 创建游戏板
board = create_board(rows, columns, num_mines)
# 开始游戏
play_game(board)
```
以上代码实现了一个基本的扫雷游戏。首先通过`create_board()`函数创建一个雷区,并计算每个方块周围的雷的数量。然后通过`play_game()`函数进行游戏的主循环,玩家选择要揭开的方块并判断是否踩到雷。游戏板的显示和游戏结果的判断通过`print_board()`和`check_win()`函数完成。