当前位置:首页python > 正文

python扫雷小游戏

作者:野牛程序员:2023-12-21 12:47:54python阅读 2759

扫雷游戏是一个经典的单人电脑游戏。游戏板上有许多方块,其中一些包含地雷。玩家需要点击方块来揭示它们,目标是避免揭示出地雷。当点击到没有地雷的方块时,会显示周围地雷的数量,玩家可以利用这些信息来判断哪些方块是安全的。

以下是一个简单的Python代码示例,实现了一个基本的扫雷游戏。请确保你的Python环境中有randomcopy模块。

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击