编写一个Python版扫雷游戏
时间: 2023-11-16 19:15:23 浏览: 115
使用Python的扫雷游戏
5星 · 资源好评率100%
以下是一个简单的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 = [[' ' for _ in range(width)] for _ in range(height)] # 游戏板
self.visible = [[' ' for _ in range(width)] for _ in range(height)] # 显示板
self.gameover = False # 游戏结束标志
# 初始化雷区
self.minefield = [[0 for _ in range(width)] for _ in range(height)]
while mines > 0:
x, y = random.randint(0, width-1), random.randint(0, height-1)
if self.minefield[y][x] == 0:
self.minefield[y][x] = 1
mines -= 1
# 获取周围的雷数
def get_adjacent_mines(self, x, y):
count = 0
for i in range(max(0, x-1), min(self.width, x+2)):
for j in range(max(0, y-1), min(self.height, y+2)):
if self.minefield[j][i] == 1:
count += 1
return count
# 翻开指定位置
def reveal(self, x, y):
if self.gameover or self.visible[y][x] != ' ': # 游戏已结束或该位置已翻开
return
if self.minefield[y][x] == 1: # 踩雷了,游戏结束
self.gameover = True
self.visible[y][x] = 'X'
return
else: # 翻开该位置,并显示周围的雷数
self.visible[y][x] = str(self.get_adjacent_mines(x, y))
if self.visible[y][x] == '0': # 如果周围没有雷,则递归翻开周围的位置
for i in range(max(0, x-1), min(self.width, x+2)):
for j in range(max(0, y-1), min(self.height, y+2)):
self.reveal(i, j)
# 打印游戏板和显示板
def print_board(self):
print(' ' + ' '.join(str(i) for i in range(self.width)))
print('-'*(self.width+1))
for i in range(self.height):
print(str(i) + '|' + '|'.join(str(c) for c in self.visible[i]) + '|')
print('-'*(self.width+1))
# 运行游戏
def run(self):
while not self.gameover:
self.print_board()
x, y = input('请输入要翻开的位置,以逗号分隔:').split(',')
self.reveal(int(x), int(y))
self.print_board()
print('游戏结束!')
# 运行游戏
game = Minesweeper()
game.run()
```
运行示例:
```
0123456789
-----------
0| |
-----------
1| |
-----------
2| |
-----------
3| |
-----------
4| |
-----------
5| |
-----------
6| |
-----------
7| |
-----------
8| |
-----------
9| |
-----------
请输入要翻开的位置,以逗号分隔:4,5
0123456789
-----------
0| |
-----------
1| |
-----------
2| |
-----------
3| |
-----------
4| 1 |
-----------
5| |
-----------
6| |
-----------
7| |
-----------
8| |
-----------
9| |
-----------
请输入要翻开的位置,以逗号分隔:4,4
0123456789
-----------
0| |
-----------
1| |
-----------
2| |
-----------
3| |
-----------
4| 1 |
-----------
5| 1 |
-----------
6| |
-----------
7| |
-----------
8| |
-----------
9| |
-----------
请输入要翻开的位置,以逗号分隔:3,4
0123456789
-----------
0| |
-----------
1| |
-----------
2| |
-----------
3| 1 |
-----------
4| 1 |
-----------
5| 1 |
-----------
6| |
-----------
7| |
-----------
8| |
-----------
9| |
-----------
请输入要翻开的位置,以逗号分隔:4,3
0123456789
-----------
0| |
-----------
1| |
-----------
2| |
-----------
3| 1 |
-----------
4| 1 |
-----------
5| 1 |
-----------
6| 1 |
-----------
7| |
-----------
8| |
-----------
9| |
-----------
请输入要翻开的位置,以逗号分隔:5,3
0123456789
-----------
0| |
-----------
1| |
-----------
2| |
-----------
3| 1 |
-----------
4| 2 |
-----------
5| 1 |
-----------
6| 1 |
-----------
7| |
-----------
8| |
-----------
9| |
-----------
请输入要翻开的位置,以逗号分隔:6,3
游戏结束!
0123456789
-----------
0| |
-----------
1| |
-----------
2| |
-----------
3| 1 |
-----------
4| 2 |
-----------
5| 1 |
-----------
6| X |
-----------
7| |
-----------
8| |
-----------
9| |
-----------
```
阅读全文