Отследите положение черепахи и отправьте туда другую черепаху
Я использую модуль черепахи для Python и пытаюсь создать игру. Я пытаюсь заставить черепаху стрелять в другую черепаху пулей. Я не могу понять, как отследитьxcor()
а также ycor()
черепахи-стрелка, а затем переместите туда черепаху-пулю. Вот мой код:
# Projectiles
bullet = turtle.Turtle()
bullet.hideturtle()
bullet.color('purple')
bullet.shape('circle')
bullet.penup()
bullet.shapesize(0.5, 0.5)
bulletspeed = 0
# The player
player = turtle.Turtle()
player.speed(0)
player.color('blue')
player.shape('triangle')
player.penup()
player.setposition(0, -250)
player.setheading(90)
x = player.xcor()
y = player.ycor()
ph = player.heading()
def right():
player.right(30)
def left():
player.left(30)
def increasespeed():
global speed
speed += 1
def decreasespeed():
global speed
speed -= 1
def bulletmove():
global bulletspeed
bullet.pos() == player.pos()
bullet.showturtle()
bulletspeed += 10
# Keybindings
turtle.listen()
turtle.onkey(left, 'Left')
turtle.onkey(right, 'Right')
turtle.onkey(increasespeed, 'Up')
turtle.onkey(decreasespeed, 'Down')
turtle.onkey(bulletmove, 'space')
2 ответа
Здесь я полностью переработал ваш код. Это все еще немного глючит, но это из-заturtle
сам модуль. Пришлось перевернуть плеер, но работает.
import turtle
# Projectiles
bullet = turtle.Turtle()
bullet.color('purple')
bullet.penup()
bullet.speed("fastest")
bullet.hideturtle()
bullet.shape("circle")
bullet.setposition(0, -250)
bulletspeed = 0
s = turtle.Screen()
# The player
player = turtle.Turtle()
player.speed("fastest")
player.color('blue')
player.shape('triangle')
player.penup()
player.setposition(0, 0)
player.setheading(90)
#player.hideturtle()
x = player.xcor()
y = player.ycor()
ph = player.heading()
player.right(180)
speed = 5
def right():
player.right(30)
def left():
player.left(30)
def increasespeed():
global speed
speed += 1
def decreasespeed():
global speed
speed -= 1
def bulletmove():
global bulletspeed
bullet.hideturtle()
turtlex = 0
turtley = -250
bullet.setposition(turtlex, turtley)
bullet.reset()
bullet.penup()
bullet.goto(0, -250)
# Keybindings
turtle.listen()
turtle.onkey(left, 'Left')
turtle.onkey(right, 'Right')
turtle.onkey(increasespeed, 'Up')
turtle.onkey(decreasespeed, 'Down')
turtle.onkey(bulletmove, 'space')
#s.tracer(0, 0)
s.exitonclick()
Также я бы посоветовал сделать игру с движущейся пулей, использовать черепаху не рекомендуется. Я бы предложил pygame.
Надеюсь это поможет!
Не верьте примеру с черепахой от того, кто пытается продать вам другую библиотеку. Я не говорю, что pygame не лучше для такого рода программ, просто возможности черепахи обычно недооцениваются.
Ниже представлен переписанный код, который позволяет вам вращаться и стрелять - несколько пуль за раз! Чтобы упростить пример, я отбросил ваши функции увеличения и уменьшения скорости:
from turtle import Screen, Turtle
def right():
player.right(30)
screen.update()
def left():
player.left(30)
screen.update()
def move_bullet(bullet):
screen.onkey(None, 'space') # disable handler inside handler
if bullet.distance(player) < 300:
bullet.forward(10)
screen.ontimer(lambda: move_bullet(bullet), 100)
else:
bullet.hideturtle()
bullets.append(bullet) # reduce, reuse & recycle
screen.update()
screen.onkey(fire_bullet, 'space') # reenable handler
def fire_bullet():
bullet = bullets.pop() if bullets else bullet_prototype.clone()
bullet.setposition(player.position())
bullet.setheading(player.heading())
bullet.showturtle()
move_bullet(bullet)
screen = Screen()
screen.tracer(False)
bullet_prototype = Turtle()
bullet_prototype.hideturtle()
bullet_prototype.shape('circle')
bullet_prototype.shapesize(0.5)
bullet_prototype.color('purple')
bullet_prototype.penup()
bullets = []
player = Turtle()
player.shape('triangle')
player.color('blue')
player.penup()
player.setheading(90)
screen.onkey(left, 'Left')
screen.onkey(right, 'Right')
screen.onkey(fire_bullet, 'space')
screen.listen()
screen.update()
screen.mainloop()