1 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
我假設(shè)它與 while 循環(huán)有關(guān)
是的,它不應(yīng)該在那里!在像烏龜這樣的事件驅(qū)動(dòng)的世界中,永遠(yuǎn)不應(yīng)該有while True:循環(huán)。相反,我們需要一個(gè)定時(shí)事件,它定期觸發(fā),對(duì)運(yùn)動(dòng)中的對(duì)象(敵人和子彈)進(jìn)行增量更新,使它們看起來(lái)同時(shí)移動(dòng)。以下是我使用計(jì)時(shí)器事件重新編寫的代碼:
from turtle import Screen, Turtle
# moving left and right
def left_move():
player.setx(player.xcor() - player_speed)
def right_move():
player.setx(player.xcor() + player_speed)
# screen setup
screen = Screen()
screen.bgcolor('black')
screen.title('SPACE.INVADERS')
# border
border = Turtle(visible=False)
border.speed('fastest')
border.color('green')
border.penup()
border.setposition(-300, -300)
border.pendown()
for _ in range(4):
border.forward(600)
border.left(90)
# player
player = Turtle('triangle')
player.speed('fastest')
player.color('red')
player.penup()
player.setposition(0, -250)
player.setheading(90)
player_speed = 15
# enemy
enemy = Turtle('square')
enemy.speed('fast')
enemy.shapesize(1.25)
enemy.color('orange')
enemy.penup()
enemy.setpos(-250, 250)
enemy_speed = 6 # enemy speed
enemy_direction = 1 # enemy direction
# bullet
bullet = Turtle('triangle', visible=False)
bullet.speed('fastest')
bullet.color('white')
bullet.shapesize(0.5)
bullet.penup()
bullet.left(90)
bullet_speed = 9 # bullet speed
# shooting
def shoot():
if not bullet.isvisible():
bullet.goto(player.position())
bullet.showturtle()
def move():
global enemy_direction
if bullet.isvisible():
if bullet.ycor() > 275:
bullet.hideturtle()
else:
bullet.forward(bullet_speed)
# enemy movement
enemy.forward(enemy_direction * enemy_speed)
enemy.settiltangle(enemy.tiltangle() + 3) # just for fun
x, y = enemy.position()
if x > 250 or x < -250:
enemy_direction *= -1
enemy.sety(y - 25)
screen.ontimer(move, 50)
# bindings
screen.onkey(left_move, 'Left')
screen.onkey(right_move, 'Right')
screen.onkey(shoot, 'space')
screen.listen()
move()
screen.mainloop()
這應(yīng)該為您提供前進(jìn)所需的基本功能,并添加碰撞檢測(cè)(子彈到敵人、敵人到玩家、玩家到墻壁)和得分。
另請(qǐng)注意,海龜是全局實(shí)體,因此每次需要時(shí)都創(chuàng)建一個(gè)新項(xiàng)目符號(hào)是一個(gè)壞主意。即使您最終允許重疊項(xiàng)目符號(hào),也要為此目的保留一組可重復(fù)使用的項(xiàng)目符號(hào)。
添加回答
舉報(bào)