我正在为我的CompSci课程使用pygame创建游戏。游戏运行良好,但是现在我尝试执行重新启动功能,并且遇到很多错误。
我正在尝试做的基本概述是:
first = True
def check(count):
if count == 1000:
return True
else:
return False
def start():
# MAIN MENU
print ("start")
count = 0
while True:
count += 1
if check(count) == True:
Game()
def Game():
count = 0
print("Game")
while True:
# GAMELOOP
count += 1
if check(count) == True:
restart()
def restart():
count = 0
print ("Restart")
while True:
# RESTART
count += 1
if check(count) == True:
start()
if first == True:
first = False
start()
但是,每当我运行此命令时,python最终都会崩溃:
RecursionError: maximum recursion depth exceeded while calling a Python object
我不确定该如何解决。我希望有人可以建议另一种方法来做同样的事情或我做错了的事情。
实际的重启和菜单功能:
def rest(): #Main Menu
while True:
pygame.display.update()
menu.draw()
if pygame.mouse.get_pressed()[0]:
x, y = pygame.mouse.get_pos()
if x >= 255 and x <= 355 and y >= 400 and y <= 450:
game()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
def game(): #Gameloop
while True:
if bottom.time == 0 or bottom.time < 0 :
game_screen.fill((0, 0, 0))
restart()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
def restart():
while True:
pygame.display.update()
menu.restart()
if pygame.mouse.get_pressed()[0]:
x, y = pygame.mouse.get_pos()
if x >= 255 and x <= 355 and y >= 400 and y <= 450:
game_screen.fill((0, 0, 0))
rest()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
答案 0 :(得分:0)
您是否有一系列调用彼此的函数来创建indirect recursion。
start()
计数到1000,然后调用Game()
,计数再次计数到1000,然后调用restart()
,计数也等于1000,然后调用start()
,关闭递归循环。一旦没有停止条件,您的递归就会一直进行到达到python递归堆栈的深度限制为止,然后您就会得到异常。
作为解决方案,您需要在其中一个函数中创建一个停止条件。
修改
我不完全了解pygame,但据我从附加代码中了解到,for
函数中的rest()
(用于检查事件)必须执行{ {1}}函数返回,这永远不会发生。您可以在game()
行之前的行中测试此hyphotesis打印内容。重启功能也是如此。