想知道是否有办法转到 def 函数之后的 def 函数
Wondering if there is a way to go to a def function that comes after a def function
所以我是 python 的新手,但我想知道是否有办法退出已定义的函数和 return 我试图退出的函数之后的已定义函数的
我尝试学习一些执行此操作的函数,但还没有找到
当我按下 C 键时,我正在尝试使一个选项功能 returns 到
之后的游戏循环
这是我的代码我有问题-
def options():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_b:
paused = False
playing = True
return
if event.key == pygame.K_c:
playing = True
print("Continue")
game()
if event.key == pygame.K_ESCAPE:
return
elif event.key == pygame.K_q:
print("Quitting game...")
time.sleep(3)
pygame.quit()
quit()
elif event.key == pygame.K_f:
choices()
screen.fill(white)
pygame.mixer.music.pause()
totalText = set_text("Options", 400, 250, 60)
pausecon = controls2("Press C to continue", black)
b = controlsr("Press B to go back to previous screen",black)
newpa = controls3("Press F to go back to choices or Press Q to quit",black)
screen.blit(totalText[0], totalText[1])
pygame.display.update()
pygame.display.update()
当用户点击“def option():”之后的 C 键时,我试图进入游戏循环:
def game():
while not paused:
clock = pygame.time.Clock()
#circles = pygame.sprite.Group(Circle((600, 0), screen))
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
if event.type == pygame.VIDEORESIZE:
print("Resized window")
screen = pygame.display.set_mode((event.w, event.h), pygame.RESIZABLE)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
paused == True
playing == False
print("Paused")
pygame.mixer.music.play(1)
pause()
if event.key == pygame.K_ESCAPE:
paused == True
playing == False
print("Paused")
pause()
if event.key == pygame.K_SPACE:
print("shot")
attacking.play()
screen.blit(attack, (x,y) )
if event.key == pygame.K_LEFT:
x_change = -1
y_change = 0
if event.key == pygame.K_RIGHT:
x_change = 1
y_change = 0
if event.key == pygame.K_UP:
x_change = 0
y_change = -1
if event.key == pygame.K_DOWN:
x_change = 0
y_change = 1
if event.key == pygame.K_a:
x_change = -1
y_change = 0
if event.key == pygame.K_d:
x_change = 1
y_change = 0
if event.key == pygame.K_w:
x_change = 0
y_change = -1
if event.key == pygame.K_s:
x_change = 0
y_change = 1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
x_change = 0
y_change = 0
if event.key == pygame.K_RIGHT:
x_change = 0
y_change = 0
if event.key == pygame.K_UP:
x_change = 0
y_change = 0
if event.key == pygame.K_DOWN:
x_change = 0
y_change = 0
if event.key == pygame.K_a:
x_change = 0
y_change = 0
if event.key == pygame.K_d:
x_change = 0
y_change = 0
if event.key == pygame.K_w:
x_change = 0
y_change = 0
if event.key == pygame.K_s:
x_change = 0
y_change = 0
if x_change >= 800:
x_change < 800
if x >= width or x < 0 or y >= height or y < 0:
print("Barrier")
message("Barrier",red)
pygame.display.update()
x += x_change
y += y_change
#makes var music be repeated thru game
#pygame.mixer.music.play(-1)
screen.fill((135, 206, 235))
#pygame.draw.circle(screen, (0, 0, 150), (x, y), r)
#SPRITES AND CONTROL TEXT IN GAME
controls("P/Esc = pause",green)
attacksprite = screen.blit(attack, (randx, randy))
sprite = screen.blit(image, (x, y))
topRight("Dodged: ", black)
pygame.display.flip()
clock.tick(60)
pygame.display.update()
我收到错误信息 -
游戏()
NameError: 名称 'game' 未定义。您的意思是:'pygame'?
感谢您的宝贵时间
函数定义的顺序在 python 中无关紧要。您的错误与此无关。这个简单的测试证明了这一点。
def test1():
return test2()
def test2():
return 1
test1()
您要找的是state machines。在你的情况下,你可以这样做:
currentState = OPTIONS
OPTIONS, PLAYING, PAUSE = range(3)
def options(events):
for event in events:
if event.key == pygame.K_c:
playing = True
currentState = PLAYING
def game(events):
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
playing = not playing
#maybe add on options to set the state to OPTIONS
currentState = PLAYING if playing else PAUSE
#logic and stuff
#clear display
#drawing code
#update display
while True:
events = pygame.event.get()
if currentState == OPTIONS:
options(events)
if currentState == PLAYING:
game(events)
if currentState == PAUSED:
#and so on
另外,像上面的代码一样只调用一次pygame.event.get()
。在整个应用程序中只调用一次 pygame.display.update()
或 pygame.display.flip()
。
所以我是 python 的新手,但我想知道是否有办法退出已定义的函数和 return 我试图退出的函数之后的已定义函数的
我尝试学习一些执行此操作的函数,但还没有找到
当我按下 C 键时,我正在尝试使一个选项功能 returns 到
之后的游戏循环这是我的代码我有问题-
def options():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_b:
paused = False
playing = True
return
if event.key == pygame.K_c:
playing = True
print("Continue")
game()
if event.key == pygame.K_ESCAPE:
return
elif event.key == pygame.K_q:
print("Quitting game...")
time.sleep(3)
pygame.quit()
quit()
elif event.key == pygame.K_f:
choices()
screen.fill(white)
pygame.mixer.music.pause()
totalText = set_text("Options", 400, 250, 60)
pausecon = controls2("Press C to continue", black)
b = controlsr("Press B to go back to previous screen",black)
newpa = controls3("Press F to go back to choices or Press Q to quit",black)
screen.blit(totalText[0], totalText[1])
pygame.display.update()
pygame.display.update()
当用户点击“def option():”之后的 C 键时,我试图进入游戏循环:
def game():
while not paused:
clock = pygame.time.Clock()
#circles = pygame.sprite.Group(Circle((600, 0), screen))
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
if event.type == pygame.VIDEORESIZE:
print("Resized window")
screen = pygame.display.set_mode((event.w, event.h), pygame.RESIZABLE)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
paused == True
playing == False
print("Paused")
pygame.mixer.music.play(1)
pause()
if event.key == pygame.K_ESCAPE:
paused == True
playing == False
print("Paused")
pause()
if event.key == pygame.K_SPACE:
print("shot")
attacking.play()
screen.blit(attack, (x,y) )
if event.key == pygame.K_LEFT:
x_change = -1
y_change = 0
if event.key == pygame.K_RIGHT:
x_change = 1
y_change = 0
if event.key == pygame.K_UP:
x_change = 0
y_change = -1
if event.key == pygame.K_DOWN:
x_change = 0
y_change = 1
if event.key == pygame.K_a:
x_change = -1
y_change = 0
if event.key == pygame.K_d:
x_change = 1
y_change = 0
if event.key == pygame.K_w:
x_change = 0
y_change = -1
if event.key == pygame.K_s:
x_change = 0
y_change = 1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
x_change = 0
y_change = 0
if event.key == pygame.K_RIGHT:
x_change = 0
y_change = 0
if event.key == pygame.K_UP:
x_change = 0
y_change = 0
if event.key == pygame.K_DOWN:
x_change = 0
y_change = 0
if event.key == pygame.K_a:
x_change = 0
y_change = 0
if event.key == pygame.K_d:
x_change = 0
y_change = 0
if event.key == pygame.K_w:
x_change = 0
y_change = 0
if event.key == pygame.K_s:
x_change = 0
y_change = 0
if x_change >= 800:
x_change < 800
if x >= width or x < 0 or y >= height or y < 0:
print("Barrier")
message("Barrier",red)
pygame.display.update()
x += x_change
y += y_change
#makes var music be repeated thru game
#pygame.mixer.music.play(-1)
screen.fill((135, 206, 235))
#pygame.draw.circle(screen, (0, 0, 150), (x, y), r)
#SPRITES AND CONTROL TEXT IN GAME
controls("P/Esc = pause",green)
attacksprite = screen.blit(attack, (randx, randy))
sprite = screen.blit(image, (x, y))
topRight("Dodged: ", black)
pygame.display.flip()
clock.tick(60)
pygame.display.update()
我收到错误信息 -
游戏()
NameError: 名称 'game' 未定义。您的意思是:'pygame'?
感谢您的宝贵时间
函数定义的顺序在 python 中无关紧要。您的错误与此无关。这个简单的测试证明了这一点。
def test1():
return test2()
def test2():
return 1
test1()
您要找的是state machines。在你的情况下,你可以这样做:
currentState = OPTIONS
OPTIONS, PLAYING, PAUSE = range(3)
def options(events):
for event in events:
if event.key == pygame.K_c:
playing = True
currentState = PLAYING
def game(events):
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_p:
playing = not playing
#maybe add on options to set the state to OPTIONS
currentState = PLAYING if playing else PAUSE
#logic and stuff
#clear display
#drawing code
#update display
while True:
events = pygame.event.get()
if currentState == OPTIONS:
options(events)
if currentState == PLAYING:
game(events)
if currentState == PAUSED:
#and so on
另外,像上面的代码一样只调用一次pygame.event.get()
。在整个应用程序中只调用一次 pygame.display.update()
或 pygame.display.flip()
。