Отследите положение черепахи и отправьте туда другую черепаху

Я использую модуль черепахи для 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()

Другие вопросы по тегам