[Unity学习教程] python实现贪吃蛇游戏

[复制链接]
查看679 | 回复0 | 2023-8-16 16:33:46 | 显示全部楼层 |阅读模式 来自 中国北京
1、结果


2、实现过程


  • 导入 Pygame 和 random 模块。
  • 初始化 Pygame。
  • 设置游戏界面巨细、配景颜色和游戏标题。
  • 界说颜色常量。
  • 界说蛇的初始位置、巨细和速度,食品的初始位置和巨细,以及蛇的移动方向、身段坐标列表和计时器。
  • 界说绘制函数,用于在屏幕上绘制蛇和食品。
  • 进入主循环。
  • 处置惩罚 Pygame 变乱,包括窗口关闭变乱和按键变乱。
  • 根据按键变乱改变蛇的移动方向。
  • 根据蛇的移动方向移动蛇的头部。
  • 判断蛇是否吃到了食品,假如是,重新天生食品并在蛇的身段列表中添加头部坐标。
  • 更新蛇的身段坐标列表。
  • 判断游戏是否竣事,假如是,表现分数并期待退出。
  • 绘制蛇和食品。
  • 控制蛇的移动速度,使游戏画面更加流畅。
  • 回到主循环。
3、代码

  1. import pygame
  2. import random
  3. # 初始化 Pygame
  4. pygame.init()
  5. # 设置游戏界面大小、背景颜色和游戏标题
  6. screen_width = 640
  7. screen_height = 480
  8. screen = pygame.display.set_mode((screen_width, screen_height))
  9. pygame.display.set_caption('贪吃蛇')
  10. # 定义颜色
  11. BLACK = (0, 0, 0)
  12. WHITE = (255, 255, 255)
  13. RED = (255, 0, 0)
  14. GREEN = (0, 255, 0)
  15. # 定义蛇的初始位置、大小和速度
  16. snake_x = 100
  17. snake_y = 100
  18. snake_size = 20
  19. snake_speed = 5
  20. # 定义食物的初始位置和大小
  21. food_x = random.randrange(0, screen_width - snake_size, 20)
  22. food_y = random.randrange(0, screen_height - snake_size, 20)
  23. food_size = 20
  24. # 定义蛇的移动方向
  25. snake_direction = 'right'
  26. # 定义一个列表来保存蛇的身体坐标
  27. snake_body = []
  28. # 定义一个计时器来控制蛇的移动速度
  29. clock = pygame.time.Clock()
  30. # 定义一个函数来绘制蛇和食物
  31. def draw(snake_x, snake_y, snake_body, food_x, food_y):
  32.     screen.fill(BLACK)
  33.     for pos in snake_body:
  34.         pygame.draw.rect(screen, GREEN, [pos[0], pos[1], snake_size, snake_size])
  35.     pygame.draw.rect(screen, RED, [food_x, food_y, food_size, food_size])
  36.     pygame.display.update()
  37. # 主循环
  38. while True:
  39.     # 处理事件
  40.     for event in pygame.event.get():
  41.         if event.type == pygame.QUIT:
  42.             # 退出游戏
  43.             pygame.quit()
  44.             quit()
  45.         # 处理按键事件
  46.         if event.type == pygame.KEYDOWN:
  47.             if event.key == pygame.K_UP:
  48.                 snake_direction = 'up'
  49.             elif event.key == pygame.K_DOWN:
  50.                 snake_direction = 'down'
  51.             elif event.key == pygame.K_LEFT:
  52.                 snake_direction = 'left'
  53.             elif event.key == pygame.K_RIGHT:
  54.                 snake_direction = 'right'
  55.     # 移动蛇的头部
  56.     if snake_direction == 'up':
  57.         snake_y -= snake_speed
  58.     elif snake_direction == 'down':
  59.         snake_y += snake_speed
  60.     elif snake_direction == 'left':
  61.         snake_x -= snake_speed
  62.     elif snake_direction == 'right':
  63.         snake_x += snake_speed
  64.     # 判断是否吃到食物
  65.     if (snake_x == food_x and snake_y == food_y) or (snake_x == food_x and abs(snake_y - food_y) < snake_size) or (snake_y == food_y and abs(snake_x - food_x) < snake_size):
  66.         food_x = random.randrange(0, screen_width - snake_size, 10)
  67.         food_y = random.randrange(0, screen_height - snake_size, 10)
  68.         snake_body.append([snake_x, snake_y])
  69.     # 更新蛇的身体坐标
  70.     snake_body.insert(0, [snake_x, snake_y])
  71.     if len(snake_body) > 1:
  72.         snake_body.pop()
  73.     # 判断游戏是否结束
  74.     if snake_x < 0 or snake_x > screen_width - snake_size or snake_y < 0 or snake_y > screen_height - snake_size or [snake_x, snake_y] in snake_body[1:]:
  75.         # 游戏结束,显示分数并等待退出
  76.         font = pygame.font.Font(None, 36)
  77.         text = font.render('Score: ' + str(len(snake_body)), True, WHITE)
  78.         screen.blit(text, ((screen_width - text.get_width()) / 2, (screen_height - text.get_height()) / 2))
  79.         pygame.display.update()
  80.         pygame.time.wait(2000)
  81.         pygame.quit()
  82.         quit()
  83.     # 绘制蛇和食物
  84.     draw(snake_x, snake_y, snake_body, food_x, food_y)
  85.     # 控制蛇的移动速度
  86.     clock.tick(20)
复制代码
来源:https://blog.csdn.net/qq_52108058/article/details/129351652
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

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

本版积分规则