You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pygame贪吃蛇游戏:吃食物后蛇速未提升问题求助

贪吃蛇游戏提速问题修复

我正在用Python开发一款基础贪吃蛇游戏,希望蛇每次吃到食物后提升移动速度。我尝试在处理蛇长度增加的if语句中添加snake_speed + 5来实现,但运行后没看到速度变化。以下是我的代码:

初始化代码

import pygame
import time
import random
pygame.init()

# colors
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
orange = (218,103,60)
pink = (255, 105, 180)

# window geometry 
dis_width = 700
dis_height = 600

# window
dis = pygame.display.set_mode((dis_width, dis_height))

# title
pygame.display.set_caption('Wizzys Pill Bottle')

# clock variable 
clock = pygame.time.Clock()

核心逻辑代码

# snake_stuff 
snake_block = 10

snake_speed = 15
font_style = pygame.font.SysFont("bahnschrift", 25)
score_font = pygame.font.SysFont("comicsansms", 35)


def Your_score(score):
    value = score_font.render("Adderall eaten: " + str(score), True, yellow)
    dis.blit(value, [0, 0])

def our_snake(snake_block, snake_list):
    for x in snake_list:
        pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])

def message(msg, color):
    mesg = font_style.render(msg, True, color)
    dis.blit(mesg, [dis_width / 6, dis_height / 3])


def gameLoop():
    game_over = False
    game_close = False

    x1 = dis_width / 2
    y1 = dis_height / 2

    x1_change = 0
    y1_change = 0

    snake_List = []
    Length_of_snake = 1

    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0

    while not game_over:
        while game_close == True:
            dis.fill(blue)
            message("OVERDOSED. For stomach pump press C", red)
            Your_score(Length_of_snake - 1)
            pygame.display.update()

            for event in pygame.event.get():
                if event.Type == pygame.KEYDOWN:
                    if event.Key == pygame.K_q:
                        game_over = True
                        game_close = False
                    if event.Key == pygame.K_c:
                        gameLoop()

        for event in pygame.event.get():
            if event.Type == pygame.QUIT:
                game_over = True
            if event.Type == pygame.KEYDOWN:
                if event.Key == pygame.K_LEFT:
                    x1_change = -snake_block
                    y1_change = 0
                elif event.Key == pygame.K_RIGHT:
                    x1_change = snake_block
                    y1_change = 0
                elif event.Key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_change = 0
                elif event.Key == pygame.K_DOWN:
                    y1_change = snake_block
                    x1_change = 0

        if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
            game_close = True
        x1 += x1_change
        y1 += y1_change
        dis.fill(orange)
        pygame.draw.rect(dis, pink, [foodx, foody, snake_block, snake_block])
        snake_Head = []
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        if len(snake_List) > Length_of_snake:
            del snake_List[0]

        for x in snake_List[:-1]:
            if x == snake_Head:
                game_close = True

        our_snake(snake_block, snake_List)
        Your_score(Length_of_snake - 1)

        pygame.display.update()

        if x1 == foodx and y1 == foody:
            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
            Length_of_snake += 1
            snake_speed + 5  # 问题所在

        clock.tick(snake_speed)
        pygame.quit()
        quit()

gameLoop()

问题分析与修复

1. 提速无效的核心原因

snake_speed + 5只是执行了加法运算,但没有将结果重新赋值给snake_speed变量,变量值始终保持初始的15不变。正确写法是:

snake_speed += 5  # 等价于 snake_speed = snake_speed + 5

2. 其他必须修复的错误

  • 缩进错误:原代码中while game_close == True:循环缩进层级错误,会触发语法报错,需对齐到外层while not game_over:的缩进级别。
  • 事件属性大小写错误:event.Type、event.Key需改为小写的event.type、event.key,否则无法正确识别键盘和窗口事件。
  • 退出代码位置错误:pygame.quit()和quit()被放在主循环内部,导致游戏启动后立刻退出,需移到主循环结束之后。

修复后的关键片段

if x1 == foodx and y1 == foody:
    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
    Length_of_snake += 1
    snake_speed += 5  # 修复为赋值操作,实现提速

内容的提问来源于stack exchange,提问作者Wizler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:51:20