当前位置: 首页 > 知识库问答 >
问题:

按C重新加载/重新执行代码时出错?

邢令
2023-03-14

我试图用TheNewBoston的教程制作一个蛇游戏,因为我是一名中学生,在Python方面没有太多经验。代码是:

__author__ = 'Ded'

import pygame
import time

pygame.init()

display_width = 800
display_height = 600


gameDisplay = pygame.display.set_mode((display_width, display_height))

pygame.display.set_caption('Dipshit')

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

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", 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_LEFT:
                    lead_x_change -= block_size
                    lead_y_change = 0
                if event.key == pygame.K_RIGHT:
                    lead_x_change += block_size
                    lead_y_change = 0
                if event.key == pygame.K_DOWN:
                    lead_y_change += block_size
                    lead_x_change = 0
                if event.key == pygame.K_UP:
                    lead_y_change -= block_size
                    lead_x_change = 0


        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                lead_x_change = 0

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_DOWN or event.key == pygame.K_UP:
                lead_y_change = 0

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

        lead_x += lead_x_change
        lead_y += lead_y_change

        gameDisplay.fill(white)
        pygame.draw.rect(gameDisplay, black, [lead_x,lead_y,block_size,block_size])


        pygame.display.update()

        clock.tick(FPS)
    pygame.quit()
    quit()

gameLoop()

但是,当我执行、播放、丢失并按C重试时,会出现此错误。当我想退出时,Q可以正常工作,但C只是退出,并打印此错误:

C:\Python34\python。exe“C:/Users/Ded/PycharmProjects/PyGame/PyGame Tutorial.py”回溯(上次调用):文件“C:/Users/Ded/PycharmProjects/PyGame/PyGame Tutorial.py”,第100行,在gameLoop()文件“C:/Users/Ded/PycharmProjects/PyGame/PyGame Tutorial.py”第56行,在gameLoop()文件“C:/Users/Ded/PycharmProjects/PyGame/PyGame Tutorial.PyGame”第76行,在gameLoop if事件中。type==pygame。KEYUP:UnboundLocalError:赋值前引用的局部变量“event”

退出代码1的过程结束

共有1个答案

何雅惠
2023-03-14

您需要缩进代码的以下部分:

    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            lead_x_change = 0

    if event.type == pygame.KEYUP:
        if event.key == pygame.K_DOWN or event.key == pygame.K_UP:
            lead_y_change = 0

因此,它们是for循环的一部分。否则,如果没有要获取的事件,也没有循环的迭代发生,变量事件将不会被定义

 类似资料:
  • 问题内容: 我有一个页面正在从第三方(新闻提要)加载脚本。脚本的url在加载时动态分配(根据第三方代码)。 然后从中加载的脚本创建并加载具有新闻提要中各种内容的元素,并以漂亮的格式等将元素加载到其中(传入ID“ div1287”,以便脚本知道在何处加载内容)。 唯一的问题是,它只会加载一次。我希望它每n秒重新加载一次(从而显示新内容)。 所以,我想我会尝试一下: div清除后,我得到警报,但是没有

  • 问题内容: 我会尽力解释这一点。 我有一个应用程序可以在页面上显示50多个项目。用户可以单击单个项目,然后转到页面以更新项目信息。一切工作正常,除了在用户完成更新单个项目信息并在浏览器上单击“后退”按钮到上一个按钮之后。旧项目信息(更新前)仍然存在。用户必须单击刷新才能查看更新的信息。不错,但我希望提供更好的用户体验。有解决这个问题的主意吗?非常感谢。 问题答案: 我认为您必须使用JS才能使此工作

  • 我正在使用Jooq和GradleJooq插件生成代码。它工作得很好,但在添加表或删除列时,我在更新生成的代码时遇到了一个问题。我可以通过更改“packageName”配置参数来强制更新,并构建一个新的包。通过返回原始名称,代码按预期进行了更新。 在使用我的设置更改模式后,重新生成代码的正确方法是什么? 我正在使用https://github.com/etiennestuder/gradle-joo

  • 我在执行脚本时遇到了这个错误。我已经升级了FF(56),Gecko(v0.19)和Selenium 3.6。。。 这是我的代码: 日志中的错误: 线程“main”java中出现异常。lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver设置。壁虎。驱动系统属性;有关更多信息,请参阅https://github.com/mozilla/geckodri

  • 问题内容: 我将log4j2.xml配置文件设置为每30秒检查一次: 是否可以以编程方式告诉log4j2检查配置中的更改而不是超时? 注意: 我不想以编程方式加载指定配置文件的配置,我只想告诉log4j2检查MonitorInterval过期之前已加载的配置文件。 谢谢! 问题答案: 看来我找到了解决方案: 有人看到任何错误/副作用吗?

  • 问题内容: 这是一个非常基本的问题-但我无法通过在线搜索找到答案。 我正在使用python控制ArcGIS,并且有一个简单的python脚本,该脚本调用了一些预先编写的代码。 但是,当我对预写代码进行更改时,它似乎没有导致任何更改。我导入了此模块,并尝试刷新它,但是没有任何反应。 我什至将它调用的文件移到了另一个位置,脚本仍然可以正常工作。昨天我做的一件事是我将所有python文件都添加到sys路