鱼C论坛

 找回密码
 立即注册
查看: 149|回复: 1

[已解决]求一个代码

[复制链接]
头像被屏蔽
发表于 2025-3-29 15:33:15 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-3-29 15:34:35 | 显示全部楼层    本楼为最佳答案   
使用 Pygame 实现的扫雷游戏代码

以下是一个使用 pygame 编写的简易扫雷游戏的完整代码,包含了基本的游戏逻辑、界面绘制和鼠标交互功能。

  1. import pygame
  2. import random
  3. import sys

  4. # 初始化
  5. pygame.init()

  6. # 游戏设置
  7. WIDTH, HEIGHT = 400, 400
  8. ROWS, COLS = 10, 10
  9. MINES_COUNT = 10
  10. TILE_SIZE = WIDTH // COLS

  11. # 颜色
  12. WHITE = (255, 255, 255)
  13. GRAY = (192, 192, 192)
  14. DARK_GRAY = (128, 128, 128)
  15. BLACK = (0, 0, 0)
  16. RED = (255, 0, 0)

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

  20. # 字体
  21. font = pygame.font.SysFont(None, 24)

  22. # 初始化网格
  23. grid = [[0 for _ in range(COLS)] for _ in range(ROWS)]
  24. revealed = [[False for _ in range(COLS)] for _ in range(ROWS)]
  25. flags = [[False for _ in range(COLS)] for _ in range(ROWS)]

  26. # 随机放置地雷
  27. mines = set()
  28. while len(mines) < MINES_COUNT:
  29.     r = random.randint(0, ROWS - 1)
  30.     c = random.randint(0, COLS - 1)
  31.     if (r, c) not in mines:
  32.         mines.add((r, c))
  33.         grid[r][c] = -1

  34. # 计算每个格子周围的地雷数
  35. for r in range(ROWS):
  36.     for c in range(COLS):
  37.         if grid[r][c] == -1:
  38.             continue
  39.         count = 0
  40.         for dr in [-1, 0, 1]:
  41.             for dc in [-1, 0, 1]:
  42.                 nr, nc = r + dr, c + dc
  43.                 if 0 <= nr < ROWS and 0 <= nc < COLS and grid[nr][nc] == -1:
  44.                     count += 1
  45.         grid[r][c] = count

  46. # 递归揭示空白区域
  47. def reveal(r, c):
  48.     if not (0 <= r < ROWS and 0 <= c < COLS):
  49.         return
  50.     if revealed[r][c] or flags[r][c]:
  51.         return
  52.     revealed[r][c] = True
  53.     if grid[r][c] == 0:
  54.         for dr in [-1, 0, 1]:
  55.             for dc in [-1, 0, 1]:
  56.                 if dr != 0 or dc != 0:
  57.                     reveal(r + dr, c + dc)

  58. # 绘制网格
  59. def draw():
  60.     screen.fill(WHITE)
  61.     for r in range(ROWS):
  62.         for c in range(COLS):
  63.             rect = pygame.Rect(c * TILE_SIZE, r * TILE_SIZE, TILE_SIZE, TILE_SIZE)
  64.             if revealed[r][c]:
  65.                 pygame.draw.rect(screen, GRAY, rect)
  66.                 if grid[r][c] > 0:
  67.                     text = font.render(str(grid[r][c]), True, BLACK)
  68.                     screen.blit(text, (c * TILE_SIZE + 10, r * TILE_SIZE + 10))
  69.                 elif grid[r][c] == -1:
  70.                     pygame.draw.circle(screen, RED, rect.center, TILE_SIZE // 4)
  71.             else:
  72.                 pygame.draw.rect(screen, DARK_GRAY, rect)
  73.                 if flags[r][c]:
  74.                     text = font.render("F", True, RED)
  75.                     screen.blit(text, (c * TILE_SIZE + 10, r * TILE_SIZE + 10))
  76.             pygame.draw.rect(screen, BLACK, rect, 1)
  77.     pygame.display.flip()

  78. # 主循环
  79. running = True
  80. game_over = False
  81. while running:
  82.     draw()
  83.     for event in pygame.event.get():
  84.         if event.type == pygame.QUIT:
  85.             running = False
  86.         elif event.type == pygame.MOUSEBUTTONDOWN and not game_over:
  87.             x, y = pygame.mouse.get_pos()
  88.             r, c = y // TILE_SIZE, x // TILE_SIZE
  89.             if event.button == 1:  # 左键
  90.                 if (r, c) in mines:
  91.                     revealed[r][c] = True
  92.                     game_over = True
  93.                 else:
  94.                     reveal(r, c)
  95.             elif event.button == 3:  # 右键
  96.                 flags[r][c] = not flags[r][c]

  97. pygame.quit()
  98. sys.exit()
复制代码


说明
  • 左键点击格子进行翻开
  • 右键点击格子插旗
  • 游戏结束后不能继续操作


如果你想要添加更多功能,比如计时器、胜利判断、重新开始按钮等,可以在此基础上继续扩展。需要我帮你扩展功能也可以继续提问哦~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-5 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表