文章最后更新时间:
首先,你需要安装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编程—扫雷小游戏-白川技术站](https://www.heiecom.com/wp-content/uploads/2026/03/image-1.webp)
本文由 白川技术站—社会志愿服务团队 发布,转载请注明出处:python编程—扫雷小游戏
温馨提示:
本文最后更新于
2026-03-03 13:42:31
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END












暂无评论内容