用python在左上右下移动方形框

问题描述 投票:1回答:1

我正在尝试使一个块上下左右移动。在我遵循的教程中,此代码运行正常。我已经多次检查此代码,但找不到任何错误。

代码正在正确编译,但未按预期运行,并且在终端窗口中也未显示任何类型的错误。

    import pygame
    import time

    pygame.init()

    white = (255,255,255)
    black = (0,0,0)
    red = (255,0,0)

    display_width = 800
    display_height = 600

    gameDisplay = pygame.display.set_mode((display_width,display_height))
    pygame.display.set_caption('slither')

    clock = pygame.time.Clock()

    block_size = 10
    FPS = 30

    font = pygame.font.SysFont(None,25)

    def message_to_screen(msg,color):
        screen_text = font.render(msg,True,color)
        gameDisplay.blit(screen_text, [display_width/2, display_height/2])

    def gameLoop():

        gameExit = False
        gameOver = False

        lead_x = display_width/2
        lead_y = display_height/2

        lead_x_change = 0
        lead_y_change = 0 

        while not gameExit:

            while gameOver == True:
                gameDisplay.fill(white)
                message_to_screen("Game over press c to play again or Q to quit",True,red)
                pygame.display.update()

            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        gameExit = True
                        gameOver = False
                    if event.key == pygame.K_c:
                        gameLoop()

            for event in pygame.event.get():    
                if event.type == pygame.QUIT:
                     gameExit = True
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_RIGHT:
                        lead_x_change = block_size
                        lead_y_change = 0

                    elif event.key == pygame.K_LEFT:
                        lead_x_change = -block_size
                        lead_y_change = 0

                    elif event.key == pygame.K_UP:
                        lead_y_change = -block_size
                        lead_x_change = 0

                    elif event.key == pygame.K_DOWN:
                        lead_y_change =  block_size
                        lead_x_change = 0

            if lead_x <=0 or lead_x >= display_width or lead_y <= 0 or lead_y >= display_height:
                gameExit = True

            lead_x += lead_x_change
            lead_y += lead_y_change

            gameDisplay.fill(white) 
            pygame.draw.rect(gameDisplay,red,[lead_x,lead_y,block_size,block_size])
            pygame.display.update()

            clock.tick(FPS)

        pygame.quit()
        quit()
    gameLoop()
python debugging pygame snakemake arrow-keys
1个回答
2
投票
pygame.event.get()

此外,永远不要递归调用游戏循环,也永远不要在游戏循环中实现游戏循环。您有一个游戏循环,请使用它。如果游戏结束,则设置for event in pygame.event.get(): if event.type == pygame.QUIT: gameExit = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: gameExit = True gameOver = False if event.key == pygame.K_RIGHT: lead_x_change = block_size lead_y_change = 0 # [...] 。根据gameOver = True的状态绘制场景:

gameOver

游戏结束并按下

c时重置游戏状态

if gameOver == True: gameDisplay.fill(white) message_to_screen("Game over press c to play again or Q to quit",red) else: # [...] gameDisplay.fill(white) pygame.draw.rect(gameDisplay,red,[lead_x,lead_y,block_size,block_size])

[if event.key == pygame.K_c and gameOver : gameOver = False lead_x = display_width/2 lead_y = display_height/2 lead_x_change = 0 lead_y_change = 0
gameloop
© www.soinside.com 2019 - 2024. All rights reserved.