索引器错误:像素索引超出范围(Pygame)

2024-07-05 11:45:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以做一个相当简单的迷宫游戏,但似乎在第二级的碰撞中被难住了,如果我撞到了第二级的东西,它就会崩溃,给我一个像素索引误差超出范围。在

这是我的代码:

import pygame, sys
from pygame.locals import *
from random import * 

pygame.init()

FPS = 30
fpsClock = pygame.time.Clock()

width = 1080
height = 720

DISPLAYSURF = pygame.display.set_mode((width, height))
pygame.display.set_caption('Maze Game')
level1 = pygame.image.load('maze.png')
level2 = pygame.image.load('maze2.png')
clevel = 1

UP = 'up'
LEFT = 'left'
RIGHT = 'right'
DOWN = 'down'

sprite = pygame.image.load('marble.png')
sprite2 = pygame.image.load('marble2.png')
dot = pygame.image.load('dot.png')
dot_x = (randrange(0, 1080))
dot_y = (randrange(0, 720))
spritex = 7
spritey = 520
#sprite2x = 505
#sprite2y = 4

while True:

    if clevel == 1:
        level = DISPLAYSURF.blit(level1, (0, 0))
        DISPLAYSURF.blit(sprite, (spritex, spritey,))

    elif clevel == 2:
        level = DISPLAYSURF.blit(level2, (0,0))
        DISPLAYSURF.blit(sprite2, (spritex, spritey))

    #if tuple(DISPLAYSURF.get_at((dot_x, dot_y))) == (255, 255, 255, 255) or tuple(DISPLAYSURF.get_at((dot_x + 20 , dot_y + 20))) == (255, 255, 255,255):
        #DISPLAYSURF.blit(dot, (dot_x, dot_y))

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

        elif event.type == KEYDOWN:
            if event.key == K_LEFT:
                sprite

            elif event.key == K_RIGHT:
                sprite

            elif event.key == K_UP:
                sprite

            elif event.key == K_DOWN:
                sprite

            elif event.key == K_t:
                sprite

    keys_pressed = pygame.key.get_pressed()
    if keys_pressed[K_LEFT]:
        spritex -= 5

    elif keys_pressed[K_RIGHT]:
        spritex += 5

    elif keys_pressed[K_UP]:
        spritey -= 5

    elif keys_pressed[K_DOWN]:
        spritey += 5

    elif keys_pressed[K_t]:
        spritex = 950
        spritey = 20

    if clevel == 1:
        if tuple(DISPLAYSURF.get_at((spritex, spritey))) == (0, 0, 0, 255) or tuple(DISPLAYSURF.get_at(((spritex + 30), (spritey + 30)))) == (0, 0, 0, 255):
            spritex = 7
            spritey = 520
    if clevel == 2:
        if tuple(DISPLAYSURF.get_at((spritex, spritey))) == (0, 0, 0, 255) or tuple(DISPLAYSURF.get_at(((spritex + 10), (spritey + 12)))) == (0, 0, 0, 255):
            spritex = 505
            spritey = 4

    if tuple(DISPLAYSURF.get_at((spritex, spritey))) == (255, 8, 0, 255) or tuple(DISPLAYSURF.get_at(((spritex + 32), (spritey + 33)))) == (255, 8, 0, 255):
        clevel = 2
        sprite = sprite2
        spritex = 505
        spritey = 4

    pygame.display.update()
    fpsClock.tick(FPS)

我不知道为什么会崩溃,但它真的很烦人。我知道这段代码看起来像垃圾,但我对python还不熟悉。在


Tags: keyeventgetifpygamedotatelif