我/我是否将其作为函数递归?

Cha*_*ing 0 python tkinter

我有三个游戏功能,如下:

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)
Run Code Online (Sandbox Code Playgroud)

我希望start()函数round()每500毫秒运行一次,直到用户打开stop()(使用按钮).但是,在完全停止之前,调用start()只给了我两次迭代round().

Ale*_*dri 5

你可以试试这个:

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
Run Code Online (Sandbox Code Playgroud)

基本上,我们一次又一次地进行圆函数调用.