I/Am 我让函数递归了吗?
Do I/Am I making it the function recursive?
我一个游戏有3个函数,如下:
def round():
global board
board_copy = [[x for x in row] for row in board]
for row in range(n):
for col in range(n):
if countNeighbors(row,col) == 3:
board_copy[row][col] = LIVE
canvas.itemconfigure(rect[row][col],fill='red')
elif countNeighbors(row,col) > 3 or countNeighbors(row,col) < 2:
board_copy[row][col] = DEAD
canvas.itemconfigure(rect[row][col],fill='black')
board = board_copy
def start():
round()
global alarm
alarm = window.after(500,round)
def stop():
global alarm
window.after.cancel(alarm)
我希望 start()
函数每 500 毫秒 运行 round()
,直到用户调用 stop()
(使用按钮)。但是,调用 start()
只给我两次 round()
的迭代,然后才完全停止。
你可以试试这个:
game_active = True
def round():
global board, alarm, game_active
if not game_active:
return
board_copy = [[x for x in row] for row in board]
for row in range(n):
for col in range(n):
if countNeighbors(row,col) == 3:
board_copy[row][col] = LIVE
canvas.itemconfigure(rect[row][col],fill='red')
elif countNeighbors(row,col) > 3 or countNeighbors(row,col) < 2:
board_copy[row][col] = DEAD
canvas.itemconfigure(rect[row][col],fill='black')
board = board_copy
alarm = window.after(500, round)
def start():
global game_active
game_active = True
round()
def stop():
global alarm, game_active
window.after.cancel(alarm)
game_active = False
基本上,我们让 round 函数一次又一次地调用自己。
我一个游戏有3个函数,如下:
def round():
global board
board_copy = [[x for x in row] for row in board]
for row in range(n):
for col in range(n):
if countNeighbors(row,col) == 3:
board_copy[row][col] = LIVE
canvas.itemconfigure(rect[row][col],fill='red')
elif countNeighbors(row,col) > 3 or countNeighbors(row,col) < 2:
board_copy[row][col] = DEAD
canvas.itemconfigure(rect[row][col],fill='black')
board = board_copy
def start():
round()
global alarm
alarm = window.after(500,round)
def stop():
global alarm
window.after.cancel(alarm)
我希望 start()
函数每 500 毫秒 运行 round()
,直到用户调用 stop()
(使用按钮)。但是,调用 start()
只给我两次 round()
的迭代,然后才完全停止。
你可以试试这个:
game_active = True
def round():
global board, alarm, game_active
if not game_active:
return
board_copy = [[x for x in row] for row in board]
for row in range(n):
for col in range(n):
if countNeighbors(row,col) == 3:
board_copy[row][col] = LIVE
canvas.itemconfigure(rect[row][col],fill='red')
elif countNeighbors(row,col) > 3 or countNeighbors(row,col) < 2:
board_copy[row][col] = DEAD
canvas.itemconfigure(rect[row][col],fill='black')
board = board_copy
alarm = window.after(500, round)
def start():
global game_active
game_active = True
round()
def stop():
global alarm, game_active
window.after.cancel(alarm)
game_active = False
基本上,我们让 round 函数一次又一次地调用自己。