找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 374|回复: 0

用 Python 实现贪吃蛇游戏

[复制链接]

7

主题

5

回帖

172

积分

管理员

积分
172
发表于 2024-12-26 23:14:51 | 显示全部楼层 |阅读模式
翼龙+论坛免责声明
翼龙+论坛免责声明: 1内容责任 本论坛为用户提供信息交流的平台,所有用户在本论坛发表的帖子、评论及相关内容仅代表其个人观点,与本论坛立场无关。本论坛不对用户发布的内容真实性、合法性、准确性或完整性承担责任。 2.侵权行为 若任何用户发布的内容侵犯了您的合法权益(如知识产权、名誉权等),请及时联系我们并提供相关证明材料,我们将在核实后依法予以删除或屏蔽。 3.法律合规 用户应自觉遵守国家相关法律法规,不得发布违反法律、危害公共秩序及社会道德的内容,否则其责任由发布者本人承担。本论坛保留向执法机构提供相关信息的权利。 4.链接与外部内容 本论坛内的链接仅为方便用户访问相关信息而提供,不代表本论坛对其内容的认可或保证。本论坛对任何外部链接或第三方内容的准确性及合法性概不负责。 5.服务限制 本论坛努力维护服务的正常运行,但不对因不可抗力或技术原因导致的服务中断或信息丢失承担任何责任。 6.修改与解释权 本免责声明的修改权和最终解释权归本论坛所有。用户在使用本论坛服务的同时,视为已知晓并接受本声明的所有条款。


实现一个贪吃蛇游戏需要涉及到图形界面、游戏逻辑、蛇的移动和食物生成等多个方面。以下是一个简化的贪吃蛇游戏代码,使用了 pygame 库来处理图形界面:

python脚本
  1. import pygame
  2. import time
  3. import random

  4. pygame.init()

  5. # 设置窗口大小
  6. window_width = 800
  7. window_height = 600
  8. window = pygame.display.set_mode((window_width, window_height))
  9. pygame.display.set_caption("贪吃蛇")

  10. # 定义颜色
  11. black = pygame.Color(0, 0, 0)
  12. white = pygame.Color(255, 255, 255)
  13. red = pygame.Color(255, 0, 0)

  14. # 蛇的初始位置
  15. snake_pos = [100, 50]
  16. snake_body = [[100, 50], [90, 50], [80, 50]]

  17. # 食物位置
  18. food_pos = [random.randrange(1, (window_width//10)) * 10, random.randrange(1, (window_height//10)) * 10]
  19. food_spawn = True

  20. # 方向
  21. direction = 'RIGHT'
  22. change_to = direction

  23. # 计分
  24. score = 0

  25. # 帧率控制
  26. fps_controller = pygame.time.Clock()

  27. # 主游戏循环
  28. def game_loop():
  29.     global direction, change_to, food_spawn, score
  30.     game_over = False
  31.     game_close = False

  32.     while not game_over:

  33.         while game_close == True:
  34.             window.fill(black)
  35.             font = pygame.font.SysFont("arial", 50)
  36.             game_over_text = font.render("Game Over! Score: " + str(score), True, red)
  37.             window.blit(game_over_text, [window_width / 6, window_height / 3])
  38.             pygame.display.update()

  39.             for event in pygame.event.get():
  40.                 if event.type == pygame.KEYDOWN:
  41.                     if event.key == pygame.K_q:
  42.                         game_over = True
  43.                         game_close = False
  44.                     if event.key == pygame.K_c:
  45.                         game_loop()

  46.         for event in pygame.event.get():
  47.             if event.type == pygame.QUIT:
  48.                 game_over = True
  49.             if event.type == pygame.KEYDOWN:
  50.                 if event.key == pygame.K_UP:
  51.                     change_to = 'UP'
  52.                 if event.key == pygame.K_DOWN:
  53.                     change_to = 'DOWN'
  54.                 if event.key == pygame.K_LEFT:
  55.                     change_to = 'LEFT'
  56.                 if event.key == pygame.K_RIGHT:
  57.                     change_to = 'RIGHT'

  58.         # 确保蛇不反向移动
  59.         if change_to == 'UP' and direction != 'DOWN':
  60.             direction = 'UP'
  61.         if change_to == 'DOWN' and direction != 'UP':
  62.             direction = 'DOWN'
  63.         if change_to == 'LEFT' and direction != 'RIGHT':
  64.             direction = 'LEFT'
  65.         if change_to == 'RIGHT' and direction != 'LEFT':
  66.             direction = 'RIGHT'

  67.         # 移动蛇
  68.         if direction == 'UP':
  69.             snake_pos[1] -= 10
  70.         if direction == 'DOWN':
  71.             snake_pos[1] += 10
  72.         if direction == 'LEFT':
  73.             snake_pos[0] -= 10
  74.         if direction == 'RIGHT':
  75.             snake_pos[0] += 10

  76.         # 蛇身体增加一节
  77.         snake_body.insert(0, list(snake_pos))
  78.         if snake_pos[0] == food_pos[0] and snake_pos[1] == food_pos[1]:
  79.             score += 1
  80.             food_spawn = False
  81.         else:
  82.             snake_body.pop()

  83.         if not food_spawn:
  84.             food_pos = [random.randrange(1, (window_width//10)) * 10,
  85.                         random.randrange(1, (window_height//10)) * 10]
  86.         food_spawn = True

  87.         # 画蛇和食物
  88.         window.fill(black)
  89.         for pos in snake_body:
  90.             pygame.draw.rect(window, white, pygame.Rect(pos[0], pos[1], 10, 10))
  91.         pygame.draw.rect(window, red, pygame.Rect(food_pos[0], food_pos[1], 10, 10))

  92.         # 检查是否撞到墙或自己
  93.         if snake_pos[0] < 0 or snake_pos[0] > window_width-10:
  94.             game_close = True
  95.         if snake_pos[1] < 0 or snake_pos[1] > window_height-10:
  96.             game_close = True

  97.         for block in snake_body[1:]:
  98.             if snake_pos[0] == block[0] and snake_pos[1] == block[1]:
  99.                 game_close = True

  100.         # 更新显示
  101.         pygame.display.update()

  102.         # 控制游戏速度
  103.         fps_controller.tick(23)

  104.     pygame.quit()
  105.     quit()

  106. game_loop()
复制代码



这个代码实现了基本的贪吃蛇游戏功能:

  • 蛇可以用键盘控制方向(上、下、左、右)
  • 蛇吃到食物会增加长度和分数
  • 游戏结束条件是蛇撞到墙壁或自己

注意,你需要安装 pygame 库来运行这个代码,可以使用 pip install pygame 来安装。


翼龙+论坛免责声明
翼龙+论坛免责声明: 1内容责任 本论坛为用户提供信息交流的平台,所有用户在本论坛发表的帖子、评论及相关内容仅代表其个人观点,与本论坛立场无关。本论坛不对用户发布的内容真实性、合法性、准确性或完整性承担责任。 2.侵权行为 若任何用户发布的内容侵犯了您的合法权益(如知识产权、名誉权等),请及时联系我们并提供相关证明材料,我们将在核实后依法予以删除或屏蔽。 3.法律合规 用户应自觉遵守国家相关法律法规,不得发布违反法律、危害公共秩序及社会道德的内容,否则其责任由发布者本人承担。本论坛保留向执法机构提供相关信息的权利。 4.链接与外部内容 本论坛内的链接仅为方便用户访问相关信息而提供,不代表本论坛对其内容的认可或保证。本论坛对任何外部链接或第三方内容的准确性及合法性概不负责。 5.服务限制 本论坛努力维护服务的正常运行,但不对因不可抗力或技术原因导致的服务中断或信息丢失承担任何责任。 6.修改与解释权 本免责声明的修改权和最终解释权归本论坛所有。用户在使用本论坛服务的同时,视为已知晓并接受本声明的所有条款。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|去背|站长工具|Archiver|手机版|小黑屋|翼龙汇 |网站地图

GMT+8, 2025-5-4 22:29 , Processed in 0.124682 second(s), 22 queries .

Powered by 翼龙!

!copyright2024!

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