首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

龟窗挂
EN

Stack Overflow用户
提问于 2021-03-16 15:17:42
回答 1查看 94关注 0票数 0

当我试图运行我的代码时,我的python海龟窗口就会挂起;我也不能移动。我尝试过移除win_pen,但我不知道win_pen内部是什么使它挂起的。

它也给了我纺车,因为我是在Mac,我不确定这是否是问题的这一点。顺便说一下,我在大苏尔11.1号上。

编辑:缩进就在我的屏幕上,只是一个复制和粘贴问题的

代码:

代码语言:javascript
运行
复制
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,267.7)
win_pen.shapesize(3,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)
EN

回答 1

Stack Overflow用户

发布于 2021-03-17 19:06:03

代码有几个问题:不要在像海龟这样的事件驱动的世界中使用while True: --让事件处理程序来完成它的工作;您的碰撞逻辑是不正确的,因为它从海龟的中心测量,而我们实际上只关注两只海龟的y位置;您似乎在错误的方向重置玩家;您两次实现获胜区域。

我重写并简化了下面包含上述更改和其他一些调整的代码:

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66658109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档