如何解决龟窗挂
当我尝试运行我的代码时,我的 Python 乌龟窗口挂了;我也动不了。我试过移除 win_pen 并且它起作用了,但我不知道 win_pen 内部是什么让它挂起。
因为我在 Mac 上,它还给了我纺车,我不确定这是否是问题所在。顺便说一下,我使用的是 Big Sur 11.1。
编辑:缩进就在我的屏幕上,只是复制和粘贴问题
代码:
import turtle
import os
import math
import random
from random import randint
score = 0
# Set Up Screen
wn = turtle.Screen()
wn.bgcolor("black")
wn.title("test")
# Draw border
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color("white")
border_pen.penup()
border_pen.setposition(-300,-300)
border_pen.pendown()
border_pen.hideturtle()
border_pen.pensize(3)
for side in range(4):
border_pen.fd(600)
border_pen.lt(90)
# Draw Winning Area
win_pen = turtle.Turtle()
win_pen.hideturtle()
win_pen.shape("square")
win_pen.penup()
win_pen.setposition(0,267.7)
win_pen.shapesize(3,29.8)
# Show score on Screen
score_pen = turtle.Turtle()
score_pen.speed(0)
score_pen.color("white")
score_pen.penup()
score_pen.setposition(-290,303)
scorestring = "score: %s" %score
score_pen.write(scorestring,False,align="left",font=("Ubuntu",14,"normal"))
score_pen.hideturtle()
# Set up Player 1
player1 = turtle.Turtle()
player1.color("blue")
player1.shape("triangle")
player1.penup()
player1.speed(0)
player1.setposition(0,-250)
player1.setheading(90)
player1speed = 15
# Set Up Enemies
en = 8
enemies = []
for i in range(en):
enemies.append(turtle.Turtle())
for enemy in enemies:
enemy.color("red")
enemy.shape("square")
enemy.penup()
enemy.speed(0)
enemy.goto(randint(-280,280),randint(-280,280))
enemy.shapesize(2,2)
enemyspeed = 2
# Draw Winning Area
win_pen = turtle.Turtle()
win_pen.hideturtle()
win_pen.shape("square")
win_pen.penup()
win_pen.setposition(0,29.8)
#Define bullet state
#ready - ready to fire
#fire - bullet is firing
bulletstate = "ready"
def left():
x = player1.xcor()
player1.setheading(180)
player1.forward(player1speed)
if x < -280:
x = - 280
player1.setx(x)
def right():
x = player1.xcor()
player1.setheading(0)
player1.forward(player1speed)
if x > 280:
x = 280
player1.setx(x)
def up():
y = player1.ycor()
player1.setheading(90)
player1.forward(player1speed)
if y > 280:
y = 280
player1.sety(y)
def down():
y = player1.ycor()
player1.setheading(270)
player1.forward(player1speed)
if y < -280:
y = 280
player1.sety(y)
def isCollision(t1,t2):
distance = math.sqrt(math.pow(t1.xcor()-t2.xcor(),2)+math.pow(t1.ycor()-t2.ycor(),2))
if distance < 15:
return True
else:
return False
turtle.listen()
turtle.onkey(left,"a")
turtle.onkey(right,"d")
turtle.onkey(up,"w")
turtle.onkey(down,"s")
# Main Game Loop
while True:
if isCollision(player1,win_pen):
player1.setposition(0,-250)
player1.setheading(90)
解决方法
你的代码有几个问题:不要在像乌龟这样的事件驱动的世界中使用 while True:
——让事件处理程序完成它的工作;您的碰撞逻辑是不正确的,因为它是从海龟的中心开始测量的,而我们实际上只关心两只海龟的 y 位置;你似乎在错误的方向重置玩家;您实施了两次获胜区域。
我已经重写并简化了您下面的代码,其中包含了上述更改和其他一些调整:
from turtle import Screen,Turtle
from random import randint
ENEMY_COUNT = 8
PLAYER_SPEED = 15
def left():
player.setheading(180)
player.setx(max(-280,player.xcor() - PLAYER_SPEED))
check_collision(player,win_pen)
def right():
player.setheading(0)
player.setx(min(280,player.xcor() + PLAYER_SPEED))
check_collision(player,win_pen)
def up():
player.setheading(90)
player.sety(min(280,player.ycor() + PLAYER_SPEED))
check_collision(player,win_pen)
def down():
player.setheading(270)
player.sety(max(-280,player.ycor() - PLAYER_SPEED))
check_collision(player,win_pen)
def check_collision(player,win_pen):
if abs(player.ycor() - win_pen.ycor()) < 15:
player.sety(-250)
player.setheading(90)
score = 0
# Set Up Screen
screen = Screen()
screen.bgcolor('black')
# Draw border
border_pen = Turtle()
border_pen.hideturtle()
border_pen.pensize(3)
border_pen.color('white')
border_pen.speed('fastest')
border_pen.penup()
border_pen.setposition(-300,-300)
border_pen.pendown()
for _ in range(4):
border_pen.forward(600)
border_pen.left(90)
# Draw Winning Area
win_pen = Turtle()
win_pen.shape('square')
win_pen.shapesize(3,29.8)
win_pen.color('gray')
win_pen.penup()
win_pen.sety(267.7)
# Show Score on Screen
score_pen = Turtle()
score_pen.hideturtle()
score_pen.color('white')
score_pen.penup()
score_pen.setposition(-290,303)
scorestring = "Score: %s" %score
score_pen.write(scorestring,False,align='left',font=('Ubuntu',14,'normal'))
# Set up Player
player = Turtle()
player.shape('triangle')
player.color('blue')
player.speed('fastest')
player.setheading(90)
player.penup()
player.setx(-250)
# Set Up Enemies
enemies = []
for _ in range(ENEMY_COUNT):
enemy = Turtle()
enemy.color('red')
enemy.shape('square')
enemy.shapesize(2)
enemy.speed('fastest')
enemy.penup()
enemy.goto(randint(-280,280),randint(-280,280))
enemies.append(enemy)
screen.onkey(left,'a')
screen.onkey(right,'d')
screen.onkey(up,'w')
screen.onkey(down,'s')
screen.listen()
screen.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。