Python 我是否将其作为递归函数?
我有三个游戏功能,如下所示:Python 我是否将其作为递归函数?,python,tkinter,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
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)
def round():
全球董事会
线路板_copy=[[x代表线路板中的x]代表线路板中的x]
对于范围(n)中的行:
对于范围(n)中的列:
如果countneights(行、列)==3:
董事会副本[行][列]=现场
canvas.itemconfigure(rect[row][col],fill='red')
elif CountNeighbories(行,列)>3或CountNeighbories(行,列)<2:
董事会副本[行][列]=无效
canvas.itemconfigure(rect[row][col],fill='black')
董事会
def start():
第(轮)
全球警报
报警=窗后(500,圆形)
def stop():
全球警报
window.after.cancel(报警)
我希望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
game\u active=True
def round():
全局板,警报,游戏激活
如果游戏未激活:
返回
线路板_copy=[[x代表线路板中的x]代表线路板中的x]
对于范围(n)中的行:
对于范围(n)中的列:
如果countneights(行、列)==3:
董事会副本[行][列]=现场
canvas.itemconfigure(rect[row][col],fill='red')
elif CountNeighbories(行,列)>3或CountNeighbories(行,列)<2:
董事会副本[行][列]=无效
canvas.itemconfigure(rect[row][col],fill='black')
董事会
报警=窗后(500,圆形)
def start():
全球游戏联盟活动
game_active=True
第(轮)
def stop():
全球警报,游戏启动
window.after.cancel(报警)
game_active=False
基本上,我们一次又一次地调用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
game\u active=True
def round():
全局板,警报,游戏激活
如果游戏未激活:
返回
线路板_copy=[[x代表线路板中的x]代表线路板中的x]
对于范围(n)中的行:
对于范围(n)中的列:
如果countneights(行、列)==3:
董事会副本[行][列]=现场
canvas.itemconfigure(rect[row][col],fill='red')
elif CountNeighbories(行,列)>3或CountNeighbories(行,列)<2:
董事会副本[行][列]=无效
canvas.itemconfigure(rect[row][col],fill='black')
董事会
报警=窗后(500,圆形)
def start():
全球游戏联盟活动
game_active=True
第(轮)
def stop():
全球警报,游戏启动
window.after.cancel(报警)
game_active=False
基本上,我们会一次又一次地调用round函数本身。尝试从window.after语句而不是round函数调用start函数。尝试从window.after语句而不是round函数调用start函数。谢谢!您是否也知道为什么
stop()
没有结束调用?您好,请检查新版本,我已经编辑了代码。希望它是你所需要的,还没有测试过,我在用我的平板电脑写。没有骰子。不确定以下错误是什么意思:“AttributeError:‘function’对象没有属性‘cancel’,‘删除行’窗口。after.cancel(alarm)”应该可以做到这一点。只需将“game_active”变量设置为False,函数“round”就不会再次调用自身。谢谢!您是否也知道为什么stop()
没有结束调用?您好,请检查新版本,我已经编辑了代码。希望它是你所需要的,还没有测试过,我在用我的平板电脑写。没有骰子。不确定以下错误是什么意思:“AttributeError:‘function’对象没有属性‘cancel’,‘删除行’窗口。after.cancel(alarm)”应该可以做到这一点。只需将“game_active”变量设置为False,函数“round”就不会再次调用自身。