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

Pygame跑酷游戏tuple错误求助:第74行代码异常

Pygame跑酷游戏Tuple错误问题求助

我在开发Pygame跑酷游戏时,第74行附近的代码持续触发tuple错误。以下是我的完整代码:

import random
import pygame

pygame.init()

white = (255, 255, 255)
black = (0, 0, 0)
green = (0, 255, 0)
red = (255, 0, 0)
orange = (255, 165, 0)
yellow = (255, 255, 0)
blue = (0, 0, 230)
WIDTH = 450
HEIGHT = 300

score = 0
player_x = 50
player_y = 200
y_change = 0
gravity = 1
x_change = 0
obstacles = [300, 450, 600]
obstacle_speed = 2
active = False

screen = pygame.display.set_mode([WIDTH, HEIGHT])
pygame.display.set_caption("Michael runner")
background = blue
fps = 60
font = pygame.font.Font("freesansbold.ttf", 16)
time = pygame.time.Clock()

running = True
while running:
    time.tick(fps)
    screen.fill(background)

    if not active:
        instruction_text = font.render(f'Press Space To Start!', True, white, blue)
        screen.blit(instruction_text, (140, 50))
        instruction_text2 = font.render(f'Jump with space, Left/Right arrow keys', True, white, blue)
        screen.blit(instruction_text2, (80, 90))
    score_text = font.render(f'score: {score}', True, white, blue)
    screen.blit(score_text, (160, 250))
    floor = pygame.draw.rect(screen, white, [0, 220, WIDTH, 5])
    player = pygame.draw.rect(screen, green, [player_x, player_y, 20, 20])
    obstacle0 = pygame.draw.rect(screen, red, [obstacles[0], 200, 20, 20])
    obstacle1 = pygame.draw.rect(screen, orange, [obstacles[1], 200, 20, 20])
    obstacle2 = pygame.draw.rect(screen, yellow, [obstacles[2], 200, 20, 20])
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN and not active:
            if event.key == pygame.K_SPACE:
                obstacles = (300, 450, 600)
                player_x = 50
                score = 0
                active = True
        if event.type == pygame.KEYDOWN and active:
            if event.key == pygame.K_SPACE and y_change == 0:
                y_change = 18
            if event.key == pygame.K_RIGHT:
                x_change = 2
            if event.key == pygame.K_LEFT:
                x_change = -2
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                x_change = 0
            if event.key == pygame.K_LEFT:
                x_change = 0

    for i in range(len(obstacles)):
        if active:
            obstacles[i] -= obstacle_speed
            if obstacles[i] < -20:
                obstacles[i] = random.randint(470, 570)
                score += 1
            if player.colliderect(obstacle0) or player.colliderect(obstacle0) or   player.colliderect(obstacle0):
                active = False

    if 0 <= player_x <= 430:
        player_x += x_change
    if player_x < 0:
        player_x = 0
    if player_x > 430:
        player_x = 430

    if y_change > 0 or player_y < 200:
        player_y -= y_change
        y_change -= gravity
    if player_y > 200:
        player_y = 200
    if player_y == 200 and y_change < 0:
        y_change = 0

    pygame.display.flip()
pygame.quit()

我曾尝试修改代码片段,但修改后obstacle_speed功能失效,修改后的代码如下:

for i in range(len(obstacles)):
    if active:
        obs = int(obstacles[i])
        obs -= obstacle_speed
        if obs < -20:
            obs = random.randint(470, 570)
            score += 1
        if player.colliderect(obstacle0) or player.colliderect(obstacle1) or player.colliderect(obstacle2):
            active = False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:50:23