python扫雷小游戏
作者:野牛程序员:2023-12-21 12:47:54python阅读 2759
扫雷游戏是一个经典的单人电脑游戏。游戏板上有许多方块,其中一些包含地雷。玩家需要点击方块来揭示它们,目标是避免揭示出地雷。当点击到没有地雷的方块时,会显示周围地雷的数量,玩家可以利用这些信息来判断哪些方块是安全的。
以下是一个简单的Python代码示例,实现了一个基本的扫雷游戏。请确保你的Python环境中有random和copy模块。
import random
import copy
def initialize_board(rows, cols, mines):
board = [[' ' for _ in range(cols)] for _ in range(rows)]
mine_locations = random.sample(range(rows * cols), mines)
for mine_location in mine_locations:
row = mine_location // cols
col = mine_location % cols
board[row][col] = '*'
return board
def print_board(board, revealed):
for i in range(len(board)):
for j in range(len(board[0])):
if revealed[i][j]:
print(board[i][j], end=' ')
else:
print('?', end=' ')
print()
def count_adjacent_mines(board, row, col):
count = 0
for i in range(max(0, row - 1), min(len(board), row + 2)):
for j in range(max(0, col - 1), min(len(board[0]), col + 2)):
if board[i][j] == '*':
count += 1
return count
def reveal_square(board, revealed, row, col):
if revealed[row][col]:
return
revealed[row][col] = True
if board[row][col] == ' ':
for i in range(max(0, row - 1), min(len(board), row + 2)):
for j in range(max(0, col - 1), min(len(board[0]), col + 2)):
reveal_square(board, revealed, i, j)
def play_game(rows, cols, mines):
board = initialize_board(rows, cols, mines)
revealed = [[False for _ in range(cols)] for _ in range(rows)]
while True:
print_board(board, revealed)
row = int(input("Enter row (0 to {}): ".format(rows - 1)))
col = int(input("Enter col (0 to {}): ".format(cols - 1)))
if board[row][col] == '*':
print("Game Over! You hit a mine.")
print_board(board, revealed)
break
else:
num_adjacent_mines = count_adjacent_mines(board, row, col)
board[row][col] = str(num_adjacent_mines) if num_adjacent_mines > 0 else ' '
reveal_square(board, revealed, row, col)
if all(all(revealed[i][j] or board[i][j] == '*' for j in range(cols)) for i in range(rows)):
print("Congratulations! You cleared the board.")
print_board(board, revealed)
break
# 设置游戏参数
rows = 5
cols = 5
mines = 5
# 开始游戏
play_game(rows, cols, mines)野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

