鱼C论坛

 找回密码
 立即注册
查看: 2410|回复: 3

[已解决]pygame贪吃蛇问题(不想说了。。。)

[复制链接]
发表于 2023-11-26 14:13:10 | 显示全部楼层
在你提供的代码中,我看到了一些问题。

首先,在处理贪吃蛇移动的时候,你没有使用适当的数据结构来保存蛇身体的坐标。我建议使用一个列表来保存蛇身体的每个部分的坐标。每当蛇移动的时候,你需要将新的头部坐标插入到列表的第一个位置,并且删除列表的最后一个元素。这样就能实现蛇的增长和移动。

其次,在控制方向的部分,你需要根据用户按下的键来改变蛇头移动的方向。你可以通过监听键盘事件来获取用户按下的键,并根据不同的按键设置不同的移动方向。

最后,在金币生成的部分,你需要将金币添加到`Money`组中,并在每一帧中更新金币的位置。当蛇头碰到金币时,你需要增加得分并生成新的金币。同时,你还需要在每一帧中检测蛇头是否和蛇身体碰撞,如果碰撞了,则游戏结束。

下面是修改后的代码示例:
  1. import pygame
  2. import sys
  3. import random
  4. from pygame.locals import *
  5. pygame.init()
  6. size = width, height = 600, 400
  7. bg = (255, 255, 255)
  8. YELLOW = (255, 255, 0)
  9. snake = (0, 255, 0)
  10. BLACK = (0, 0, 0)
  11. screen = pygame.display.set_mode(size)
  12. pygame.display.set_caption('贪吃蛇')
  13. move = USEREVENT
  14. pygame.time.set_timer(move, 200)  # 设置蛇移动的时间间隔
  15. score = 0
  16. score_font = pygame.font.Font(None, 20)
  17. snake_body = [(300, 200)]  # 蛇身体坐标列表
  18. direction = 'right'
  19. def generate_food():
  20.     x = random.randint(0, width-10)
  21.     y = random.randint(0, height-10)
  22.     return (x//10 * 10, y//10 * 10)
  23. food = generate_food()
  24. while True:
  25.     for event in pygame.event.get():
  26.         if event.type == pygame.QUIT:
  27.             sys.exit()
  28.         elif event.type == move:
  29.             if direction == 'right':
  30.                 head_x = snake_body[0][0] + 10
  31.                 head_y = snake_body[0][1]
  32.             elif direction == 'left':
  33.                 head_x = snake_body[0][0] - 10
  34.                 head_y = snake_body[0][1]
  35.             elif direction == 'up':
  36.                 head_x = snake_body[0][0]
  37.                 head_y = snake_body[0][1] - 10
  38.             elif direction == 'down':
  39.                 head_x = snake_body[0][0]
  40.                 head_y = snake_body[0][1] + 10
  41.             
  42.             snake_body.insert(0, (head_x, head_y))  # 插入新的蛇头位置
  43.             snake_body.pop()  # 删除最后一个蛇身部分
  44.    
  45.     key_pressed = pygame.key.get_pressed()
  46.     if key_pressed[K_RIGHT] and direction != 'left':
  47.         direction = 'right'
  48.     elif key_pressed[K_LEFT] and direction != 'right':
  49.         direction = 'left'
  50.     elif key_pressed[K_UP] and direction != 'down':
  51.         direction = 'up'
  52.     elif key_pressed[K_DOWN] and direction != 'up':
  53.         direction = 'down'
  54.     if snake_body[0] == food:
  55.         score += 10
  56.         food = generate_food()
  57.         # 在蛇尾增加一个身体部分
  58.         snake_body.append(snake_body[-1])
  59.     screen.fill(bg)
  60.     for body_part in snake_body:
  61.         pygame.draw.rect(screen, snake, (*body_part, 10, 10))
  62.     pygame.draw.rect(screen, YELLOW, (*food, 10, 10))
  63.     score_text = score_font.render(f'Score: {score}', True, BLACK)
  64.     screen.blit(score_text, (10, 5))
  65.     pygame.display.flip()
复制代码

你可以根据自己的需求对代码进行进一步的修改和完善。希望能帮到你解决问题!

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-22 03:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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