python实现扫雷设计
时间: 2023-08-31 14:12:26 浏览: 180
Python 扫雷
扫雷是一种经典的单人益智游戏,玩家需要在地图上找出所有的雷并标记出来,同时避免触雷。下面是一个简单的Python实现扫雷游戏的示例代码:
```python
import random
# 初始化游戏地图
def init_map(row, col, num):
map = [[0 for i in range(col)] for j in range(row)]
count = 0
while count < num:
x = random.randint(0, row-1)
y = random.randint(0, col-1)
if map[x][y] == 0:
map[x][y] = '*'
count += 1
for i in range(row):
for j in range(col):
if map[i][j] != '*':
map[i][j] = count_mines(map, i, j)
return map
# 计算周围雷的数量
def count_mines(map, x, y):
count = 0
for i in range(x-1, x+2):
for j in range(y-1, y+2):
if i >= 0 and i < len(map) and j >= 0 and j < len(map[0]):
if map[i][j] == '*':
count += 1
return count
# 显示地图
def print_map(map):
for row in map:
print(' '.join(str(cell) for cell in row))
# 游戏主循环
def game_loop(map):
while True:
print('请输入坐标(x,y),例如:3,4')
try:
x, y = map(int, input().split(','))
if x < 0 or x >= len(map) or y < 0 or y >= len(map[0]):
print('坐标超出范围,请重新输入')
continue
if map[x][y] == '*':
print('你触雷了,游戏结束!')
break
elif map[x][y] == 0:
reveal_map(map, x, y)
else:
map[x][y] = str(map[x][y])
print_map(map)
if check_win(map):
print('你赢了,游戏结束!')
break
except ValueError:
print('无效的坐标,请重新输入')
# 揭示地图
def reveal_map(map, x, y):
if map[x][y] != 0:
return
map[x][y] = '-'
for i in range(x-1, x+2):
for j in range(y-1, y+2):
if i >= 0 and i < len(map) and j >= 0 and j < len(map[0]):
if map[i][j] == 0:
reveal_map(map, i, j)
elif map[i][j] != '*':
map[i][j] = str(map[i][j])
# 检查是否获胜
def check_win(map):
for row in map:
for cell in row:
if cell != '*' and not isinstance(cell, int):
return False
return True
# 主函数
def main():
row = 5
col = 5
num = 3
print('欢迎来到扫雷游戏!')
print('地图大小:%dx%d,雷的数量:%d' % (row, col, num))
map = init_map(row, col, num)
print_map(map)
game_loop(map)
if __name__ == '__main__':
main()
```
代码中首先定义了一个`init_map`函数来初始化游戏地图,该函数接收三个参数:行数、列数和雷的数量,然后随机生成指定数量的雷,并在地图上标记为`*`。接着用`count_mines`函数来计算每个格子周围的雷的数量,并将结果保存在地图中。最后用`print_map`函数来显示地图。
游戏主循环使用`while`语句实现,每次提示玩家输入坐标,并检查坐标是否合法。如果坐标合法,再判断该格子是否是雷。如果是雷,则游戏结束,玩家输了;如果不是雷,则揭示该格子,并显示地图。如果所有非雷格子都已揭示,则游戏结束,玩家赢了。
在揭示地图时,使用了递归算法,如果当前格子周围没有雷,则继续向周围格子递归揭示,直到遇到有雷的格子或边界为止。
最后在主函数中调用`init_map`函数初始化地图,并调用`game_loop`函数开始游戏。
阅读全文