【发布时间】:2021-10-27 13:12:28
【问题描述】:
所以我试图使用 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
我尝试了一些我在网上看到的解决方案,但都没有奏效
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 关闭窗口时才会出现这个问题。这是正常的,因为当我关闭窗口时它仍然运行
while-loop 并且update()尝试访问已经关闭的窗口。您必须添加侦听器来检查窗口是否关闭并停止while循环。或者你应该使用ontimer 而不是while True和delay- 当你关闭窗口时它可能会停止运行。