python编程—扫雷小游戏

文章最后更新时间:2026-03-03 13:42:31

首先,你需要安装Pygame库。如果你还没有安装,可以通过以下命令安装:

pip install pygame

完整的游戏代码:

import pygame
import random

# 初始化Pygame
pygame.init()

# 设置窗口大小
WIDTH, HEIGHT = 800, 600
TILE_SIZE = 40
GRID_WIDTH, GRID_HEIGHT = 20, 15
MINE_COUNT = 10

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (128, 128, 128)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# 创建窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("扫雷游戏")

# 字体设置
font = pygame.font.Font(None, 36)

# 生成地雷
def generate_mines(grid, mine_count):
    mines = set()
    while len(mines) < mine_count:
        x, y = random.randint(0, GRID_WIDTH - 1), random.randint(0, GRID_HEIGHT - 1)
        if (x, y) not in mines:
            mines.add((x, y))
            grid[y][x] = 'M'

# 计算每个格子周围的地雷数量
def calculate_numbers(grid):
    for y in range(GRID_HEIGHT):
        for x in range(GRID_WIDTH):
            if grid[y][x] != 'M':
                count = 0
                for dy in [-1, 0, 1]:
                    for dx in [-1, 0, 1]:
                        if 0 <= x + dx < GRID_WIDTH and 0 <= y + dy < GRID_HEIGHT and grid[y + dy][x + dx] == 'M':
                            count += 1
                grid[y][x] = str(count) if count > 0 else ' '

# 绘制网格
def draw_grid(grid, revealed, flagged):
    for y in range(GRID_HEIGHT):
        for x in range(GRID_WIDTH):
            rect = pygame.Rect(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE)
            if revealed[y][x]:
                if grid[y][x] == 'M':
                    pygame.draw.rect(screen, RED, rect)
                elif grid[y][x] == ' ':
                    pygame.draw.rect(screen, WHITE, rect)
                else:
                    text = font.render(grid[y][x], True, BLACK)
                    screen.blit(text, (x * TILE_SIZE + TILE_SIZE // 2 - text.get_width() // 2,
                                     y * TILE_SIZE + TILE_SIZE // 2 - text.get_height() // 2))
            elif flagged[y][x]:
                pygame.draw.rect(screen, BLUE, rect)
            else:
                pygame.draw.rect(screen, GRAY, rect)
            pygame.draw.rect(screen, BLACK, rect, 1)

# 主函数
def main():
    grid = [[' ' for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]
    revealed = [[False for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]
    flagged = [[False for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]

    generate_mines(grid, MINE_COUNT)
    calculate_numbers(grid)

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_x, mouse_y = event.pos
                grid_x, grid_y = mouse_x // TILE_SIZE, mouse_y // TILE_SIZE
                if event.button == 1:  # 左键点击
                    if not flagged[grid_y][grid_x]:
                        revealed[grid_y][grid_x] = True
                        if grid[grid_y][grid_x] == 'M':
                            print("Game Over!")
                            running = False
                elif event.button == 3:  # 右键点击
                    flagged[grid_y][grid_x] = not flagged[grid_y][grid_x]

        screen.fill(WHITE)
        draw_grid(grid, revealed, flagged)
        pygame.display.flip()

    pygame.quit()

if __name__ == "__main__":
    main()
图片[1]-python编程—扫雷小游戏-白川技术站

本文由 白川技术站—社会志愿服务团队 发布,转载请注明出处:python编程—扫雷小游戏

温馨提示: 本文最后更新于2026-03-03 13:42:31
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容