python Turtle.update() 中的贪吃蛇游戏会导致问题
Snake game in python Turtle.update() causes problems
所以我尝试使用 python 创建贪吃蛇游戏,但我似乎收到此错误消息
Traceback (most recent call last):
File "C:\Users\user\source\repos\PythonApplication1\PythonApplication1\PythonApplication1.py", line 85, in <module>
wn.update()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\turtle.py", line 1304, in update
t._update_data()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\turtle.py", line 2647, in _update_data
self.screen._incrementudc()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\turtle.py", line 1293, in _incrementudc
raise Terminator turtle.Terminator
我尝试了一些在网上看到的解决方案,但 none 有效
import turtle
import time
import random
delay = 0.1
score = 0
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
wn.setup(width=600 ,height=600)
wn.tracer(0)
#HEAD
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0,0)
head.direction = "stop"
#FOOD
food = turtle.Turtle()
colors = random.choice(['red','green','black'])
shapes = random.choice(['square','triangle','circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
food.goto(0,100)
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0,250)
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
def goup():
if head.direction !="down":
head.direction = "up"
def godown():
if head.direction !="up":
head.direction ="down"
def goleft():
if head.direction !="right":
head.direction ="left"
def goright():
if head.direction !="left":
head.direction ="right"
def move():
if head.direction == "up":
y=head.ycor()
head.sety(y+20)
if head.direction == "down":
y = head.ycor()
head.sety(y-20)
if head.direction == "left":
x = head.xcor()
head.setx(x-20)
if head.direction == "right":
x = head.xcor()
head.setx(x+20)
wn.listen()
wn.onkeypress(goup,"w")
wn.onkeypress(godown,"s")
wn.onkeypress(goleft,"a")
wn.onkeypress(goright,"d")
segments = []
#Main Gameplay
while True:
wn.update()
if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segments.goto(1000,1000)
segments.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
if head.distance(food)<20:
x = random.randint(-270,270)
y = random.randint(-270,270)
#Adding segments
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("orange")
new_segment.penup()
segments.append(new_segment)
delay -= 0.001
score += 10
if score > high_score:
high_score = score
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
for index in range(len(segments)-1,0,-1):
x = segments[index-1].xcor()
y = segments[index-1].ycor()
segments[index].goto(x,y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x,y)
move()
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segment.goto(1000,1000)
segment.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
time.sleep(delay)
wn.mainloop()
编辑:
原代码缩进错误,部分元素无法正常工作。
我只有在使用 Turtle 关闭 window 时才会遇到这个问题。这是正常行为,因为当我关闭 window 时,它仍然 运行s while
循环并且 wm.update()
试图访问已经关闭的 window。
它需要分配在window关闭时执行的函数,这个函数应该停止while
循环。但这需要将 while running:
与 running = True
一起使用并访问 tkinter
创建的 root
window 并将函数(将设置 running = False
)分配给 even "WM_DELETE_WINDOW"
# ... code ...
running = True
def on_closing():
global running
running = False
#root.destroy()
canvas = turtle.getcanvas()
root = canvas.winfo_toplevel()
root.protocol("WM_DELETE_WINDOW", on_closing)
while running:
# ...code...
完整的工作代码。
顺便说一句:它不需要 mainloop
如果你 运行 使用 update()
自己的循环
import turtle
import time
import random
delay = 0.1
score = 0
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
wn.setup(width=600 ,height=600)
wn.tracer(0)
#HEAD
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0,0)
head.direction = "stop"
#FOOD
food = turtle.Turtle()
colors = random.choice(['red','green','black'])
shapes = random.choice(['square','triangle','circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
food.goto(0,100)
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0,250)
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
def goup():
if head.direction !="down":
head.direction = "up"
def godown():
if head.direction !="up":
head.direction ="down"
def goleft():
if head.direction !="right":
head.direction ="left"
def goright():
if head.direction !="left":
head.direction ="right"
def move():
if head.direction == "up":
y=head.ycor()
head.sety(y+20)
if head.direction == "down":
y = head.ycor()
head.sety(y-20)
if head.direction == "left":
x = head.xcor()
head.setx(x-20)
if head.direction == "right":
x = head.xcor()
head.setx(x+20)
wn.listen()
wn.onkeypress(goup,"w")
wn.onkeypress(godown,"s")
wn.onkeypress(goleft,"a")
wn.onkeypress(goright,"d")
segments = []
running = True
def on_closing():
global running
running = False
root.destroy()
canvas = turtle.getcanvas()
root = canvas.winfo_toplevel()
root.protocol("WM_DELETE_WINDOW", on_closing)
#Main Gameplay
while running:
wn.update()
if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segments.goto(1000,1000)
segments.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
if head.distance(food)<20:
x = random.randint(-270,270)
y = random.randint(-270,270)
#Adding segments
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("orange")
new_segment.penup()
segments.append(new_segment)
delay -= 0.001
score += 10
if score > high_score:
high_score = score
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
# --- after `if` ---
for index in range(len(segments)-1,0,-1):
x = segments[index-1].xcor()
y = segments[index-1].ycor()
segments[index].goto(x,y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x,y)
move()
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segment.goto(1000,1000)
segment.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
time.sleep(delay)
#wn.mainloop()
或者你应该使用 ontimer(func, time) 而不是 while
-loop 和 time.sleep()
- 然后它应该在你关闭时停止它 window
def gameloop():
wn.update()
# ... code without `while` and without `sleep`
# run again
wn.ontimer(gameloop, 1000) # time in millisecons
# ---
# run first time
wn.ontimer(gameloop, 1000) # time in millisecons
wn.mainloop()
BTW: 但它需要在 gameloop
中使用 global
来为全局变量而不是局部变量赋值。
完整代码
它需要 mainloop()
,它将 运行 gameloop()
每 1000 毫秒。
import turtle
import time
import random
delay = 0.1
score = 0
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
wn.setup(width=600 ,height=600)
wn.tracer(0)
#HEAD
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0,0)
head.direction = "stop"
#FOOD
food = turtle.Turtle()
colors = random.choice(['red','green','black'])
shapes = random.choice(['square','triangle','circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
food.goto(0,100)
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0,250)
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
def goup():
if head.direction !="down":
head.direction = "up"
def godown():
if head.direction !="up":
head.direction ="down"
def goleft():
if head.direction !="right":
head.direction ="left"
def goright():
if head.direction !="left":
head.direction ="right"
def move():
if head.direction == "up":
y=head.ycor()
head.sety(y+20)
if head.direction == "down":
y = head.ycor()
head.sety(y-20)
if head.direction == "left":
x = head.xcor()
head.setx(x-20)
if head.direction == "right":
x = head.xcor()
head.setx(x+20)
wn.listen()
wn.onkeypress(goup,"w")
wn.onkeypress(godown,"s")
wn.onkeypress(goleft,"a")
wn.onkeypress(goright,"d")
segments = []
high_score = 0
def gameloop():
global score
global delay
global high_score
# ... etc. ...
wn.update()
if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290:
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segments.goto(1000,1000)
segments.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
if head.distance(food)<20:
x = random.randint(-270,270)
y = random.randint(-270,270)
#Adding segments
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("orange")
new_segment.penup()
segments.append(new_segment)
delay -= 0.001
score += 10
if score > high_score:
high_score = score
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
# --- after `if` ---
for index in range(len(segments)-1,0,-1):
x = segments[index-1].xcor()
y = segments[index-1].ycor()
segments[index].goto(x,y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x,y)
move()
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segment.goto(1000,1000)
segment.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
# run again
wn.ontimer(gameloop, 1000) # time in millisecons
# ---
# run first time
wn.ontimer(gameloop, 1000) # time in millisecons
wn.mainloop() # it needs `mainloop`
所以我尝试使用 python 创建贪吃蛇游戏,但我似乎收到此错误消息
Traceback (most recent call last):
File "C:\Users\user\source\repos\PythonApplication1\PythonApplication1\PythonApplication1.py", line 85, in <module>
wn.update()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\turtle.py", line 1304, in update
t._update_data()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\turtle.py", line 2647, in _update_data
self.screen._incrementudc()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python39_64\lib\turtle.py", line 1293, in _incrementudc
raise Terminator turtle.Terminator
我尝试了一些在网上看到的解决方案,但 none 有效
import turtle
import time
import random
delay = 0.1
score = 0
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
wn.setup(width=600 ,height=600)
wn.tracer(0)
#HEAD
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0,0)
head.direction = "stop"
#FOOD
food = turtle.Turtle()
colors = random.choice(['red','green','black'])
shapes = random.choice(['square','triangle','circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
food.goto(0,100)
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0,250)
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
def goup():
if head.direction !="down":
head.direction = "up"
def godown():
if head.direction !="up":
head.direction ="down"
def goleft():
if head.direction !="right":
head.direction ="left"
def goright():
if head.direction !="left":
head.direction ="right"
def move():
if head.direction == "up":
y=head.ycor()
head.sety(y+20)
if head.direction == "down":
y = head.ycor()
head.sety(y-20)
if head.direction == "left":
x = head.xcor()
head.setx(x-20)
if head.direction == "right":
x = head.xcor()
head.setx(x+20)
wn.listen()
wn.onkeypress(goup,"w")
wn.onkeypress(godown,"s")
wn.onkeypress(goleft,"a")
wn.onkeypress(goright,"d")
segments = []
#Main Gameplay
while True:
wn.update()
if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segments.goto(1000,1000)
segments.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
if head.distance(food)<20:
x = random.randint(-270,270)
y = random.randint(-270,270)
#Adding segments
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("orange")
new_segment.penup()
segments.append(new_segment)
delay -= 0.001
score += 10
if score > high_score:
high_score = score
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
for index in range(len(segments)-1,0,-1):
x = segments[index-1].xcor()
y = segments[index-1].ycor()
segments[index].goto(x,y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x,y)
move()
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segment.goto(1000,1000)
segment.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
time.sleep(delay)
wn.mainloop()
编辑:
原代码缩进错误,部分元素无法正常工作。
我只有在使用 Turtle 关闭 window 时才会遇到这个问题。这是正常行为,因为当我关闭 window 时,它仍然 运行s while
循环并且 wm.update()
试图访问已经关闭的 window。
它需要分配在window关闭时执行的函数,这个函数应该停止while
循环。但这需要将 while running:
与 running = True
一起使用并访问 tkinter
创建的 root
window 并将函数(将设置 running = False
)分配给 even "WM_DELETE_WINDOW"
# ... code ...
running = True
def on_closing():
global running
running = False
#root.destroy()
canvas = turtle.getcanvas()
root = canvas.winfo_toplevel()
root.protocol("WM_DELETE_WINDOW", on_closing)
while running:
# ...code...
完整的工作代码。
顺便说一句:它不需要 mainloop
如果你 运行 使用 update()
import turtle
import time
import random
delay = 0.1
score = 0
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
wn.setup(width=600 ,height=600)
wn.tracer(0)
#HEAD
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0,0)
head.direction = "stop"
#FOOD
food = turtle.Turtle()
colors = random.choice(['red','green','black'])
shapes = random.choice(['square','triangle','circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
food.goto(0,100)
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0,250)
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
def goup():
if head.direction !="down":
head.direction = "up"
def godown():
if head.direction !="up":
head.direction ="down"
def goleft():
if head.direction !="right":
head.direction ="left"
def goright():
if head.direction !="left":
head.direction ="right"
def move():
if head.direction == "up":
y=head.ycor()
head.sety(y+20)
if head.direction == "down":
y = head.ycor()
head.sety(y-20)
if head.direction == "left":
x = head.xcor()
head.setx(x-20)
if head.direction == "right":
x = head.xcor()
head.setx(x+20)
wn.listen()
wn.onkeypress(goup,"w")
wn.onkeypress(godown,"s")
wn.onkeypress(goleft,"a")
wn.onkeypress(goright,"d")
segments = []
running = True
def on_closing():
global running
running = False
root.destroy()
canvas = turtle.getcanvas()
root = canvas.winfo_toplevel()
root.protocol("WM_DELETE_WINDOW", on_closing)
#Main Gameplay
while running:
wn.update()
if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segments.goto(1000,1000)
segments.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
if head.distance(food)<20:
x = random.randint(-270,270)
y = random.randint(-270,270)
#Adding segments
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("orange")
new_segment.penup()
segments.append(new_segment)
delay -= 0.001
score += 10
if score > high_score:
high_score = score
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
# --- after `if` ---
for index in range(len(segments)-1,0,-1):
x = segments[index-1].xcor()
y = segments[index-1].ycor()
segments[index].goto(x,y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x,y)
move()
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segment.goto(1000,1000)
segment.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
time.sleep(delay)
#wn.mainloop()
或者你应该使用 ontimer(func, time) 而不是 while
-loop 和 time.sleep()
- 然后它应该在你关闭时停止它 window
def gameloop():
wn.update()
# ... code without `while` and without `sleep`
# run again
wn.ontimer(gameloop, 1000) # time in millisecons
# ---
# run first time
wn.ontimer(gameloop, 1000) # time in millisecons
wn.mainloop()
BTW: 但它需要在 gameloop
中使用 global
来为全局变量而不是局部变量赋值。
完整代码
它需要 mainloop()
,它将 运行 gameloop()
每 1000 毫秒。
import turtle
import time
import random
delay = 0.1
score = 0
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("blue")
wn.setup(width=600 ,height=600)
wn.tracer(0)
#HEAD
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0,0)
head.direction = "stop"
#FOOD
food = turtle.Turtle()
colors = random.choice(['red','green','black'])
shapes = random.choice(['square','triangle','circle'])
food.speed(0)
food.shape(shapes)
food.color(colors)
food.penup()
food.goto(0,100)
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0,250)
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
def goup():
if head.direction !="down":
head.direction = "up"
def godown():
if head.direction !="up":
head.direction ="down"
def goleft():
if head.direction !="right":
head.direction ="left"
def goright():
if head.direction !="left":
head.direction ="right"
def move():
if head.direction == "up":
y=head.ycor()
head.sety(y+20)
if head.direction == "down":
y = head.ycor()
head.sety(y-20)
if head.direction == "left":
x = head.xcor()
head.setx(x-20)
if head.direction == "right":
x = head.xcor()
head.setx(x+20)
wn.listen()
wn.onkeypress(goup,"w")
wn.onkeypress(godown,"s")
wn.onkeypress(goleft,"a")
wn.onkeypress(goright,"d")
segments = []
high_score = 0
def gameloop():
global score
global delay
global high_score
# ... etc. ...
wn.update()
if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290:
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segments.goto(1000,1000)
segments.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : 0 High Score : 0",align="center",font=("candara",24,"bold"))
if head.distance(food)<20:
x = random.randint(-270,270)
y = random.randint(-270,270)
#Adding segments
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("orange")
new_segment.penup()
segments.append(new_segment)
delay -= 0.001
score += 10
if score > high_score:
high_score = score
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
# --- after `if` ---
for index in range(len(segments)-1,0,-1):
x = segments[index-1].xcor()
y = segments[index-1].ycor()
segments[index].goto(x,y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x,y)
move()
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
head.goto(0,0)
head.direction = "Stop"
colors = random.choice(['red','blue','green'])
shapes = random.choice(['square','circle'])
for segment in segments:
segment.goto(1000,1000)
segment.clear()
score = 0
delay = 0.1
pen.clear()
pen.write("Score : {} High Score : {} ".format(score,high_score),align="center", font=("candara",24,"bold"))
# run again
wn.ontimer(gameloop, 1000) # time in millisecons
# ---
# run first time
wn.ontimer(gameloop, 1000) # time in millisecons
wn.mainloop() # it needs `mainloop`