Сделайте так, чтобы черепаха не могла пересекать нарисованные черепахой линии - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь сделать игру, похожую на приключение для Atari 2600, с использованием черепахи в Python 2.7.15. Можно ли сделать так, чтобы черепаха не могла пересекать нарисованные черепахой линии?

Мне нужна моя черепаха, чтобы делать определенные вещи, когда она обнаруживает определенный цвет, например, если она не сможет пересечь зеленый или открыть дверь, когда она ударяет в синий. Бонусные баллы, если вы можете помочь мне понять, как заставить предмет коллекционирования (ключ) следовать за черепахой после того, как черепаха коснется ее. Вот мой код:

from turtle import *
import turtle as t

color = raw_input("Enter an avatar color in the form of a hex code (Black won't show because the background is black): ")
c = Turtle()
loop = 0

def bdr():
    c.color(color)
    c.up()
    c.goto(0,-185)
    c.seth(90)
    t.ht()
    t.bgcolor("#000000")
    t.color("#00ff00")
    t.speed(0)
    t.up()
    t.rt(90)
    t.fd(200)
    t.rt(90)
    t.fd(200)
    t.rt(180)
    t.down()
    for box in range (4):
        t.fd(400)
        t.lt(90)
    t.up()
    t.fd(200)

def k1():
    c.seth(90)
    c.fd(5)

def k2():
    c.seth(180)
    c.fd(5)

def k3():
    c.seth(0)
    c.fd(5)

def k4():
    c.seth(270)
    c.fd(5)

bdr()

onkey(k1, "Up")
onkey(k2, "Left")
onkey(k3, "Right")
onkey(k4, "Down")

listen()
mainloop()

Я не пытался определить цвет, так как не знаю, с чего начать.

1 Ответ

1 голос
/ 22 мая 2019

Я рекомендую, чтобы вы не определяли базовые коллизии по цвету.Это возможно, если вы перейдете к основам черепахи tkinter, но поскольку ваша черепаха движется внутри коробки, гораздо проще проверить координаты:

from turtle import Screen, Turtle, mainloop

SIZE = 400
DISTANCE = 5
CURSOR_SIZE = 20

def draw_border():

    border = Turtle(visible=False)
    border.color("green")
    border.speed('fastest')

    border.penup()
    border.goto(-SIZE/2, -SIZE/2)
    border.pendown()

    for _ in range(4):
        border.forward(SIZE)
        border.lt(90)

def k1():
    player.setheading(90)

    if player.ycor() + DISTANCE < SIZE/2:
        player.forward(DISTANCE)

def k2():
    player.setheading(180)

    if player.xcor() - DISTANCE > -SIZE/2:
        player.forward(DISTANCE)

def k3():
    player.setheading(0)

    if player.xcor() + DISTANCE < SIZE/2:
        player.forward(DISTANCE)

def k4():
    player.setheading(270)

    if player.ycor() - DISTANCE > -SIZE/2:
        player.forward(DISTANCE)

color = raw_input("Enter avatar color as a hex code (black won't show): ")

screen = Screen()
screen.bgcolor("black")

player = Turtle(visible=False)
player.speed('fastest')
player.color(color)
player.up()
player.sety(CURSOR_SIZE/2 - SIZE/2)
player.setheading(90)
player.showturtle()

draw_border()

screen.onkey(k1, "Up")
screen.onkey(k2, "Left")
screen.onkey(k3, "Right")
screen.onkey(k4, "Down")

screen.listen()
mainloop()

Что касается дверей и ключей, если вы сделаете их черепахами какну, вы можете просто использовать метод черепахи .distance() для обнаружения столкновений.

...