Я пытаюсь написать игру в python с графикой черепахи, но движение не работает - PullRequest
1 голос
/ 02 февраля 2020

Итак, вот что у меня есть:

import time
import random

#Window
wn = turtle.Screen()
wn.title("Turtle Game")
wn.bgcolor("black")
wn.setup(width=600, height=600)
wn.tracer(0)

#Player's character
player = turtle.Turtle()
player.speed(0)
player.shape("square")
player.color("white")
player.penup()
player.goto(0,0)
player.direction = "stop"

#Player's movement
def go_up():
    if player.direction != "down":
        player.direction = "up"

def go_down():
    if player.direction != "up":
        player.direction = "down"

def go_left():
    if player.direction != "right":
        player.direction = "left"

def go_right():
    if player.direction != "left":
        player.direction = "right"

def move():
    if player.direction == "up":
        y = player.ycor()
        player.sety(y + 20)

    if player.direction == "down":
        y = player.ycor()
        player.sety(y - 20)

    if player.direction == "left":
        x = player.xcor()
        player.setx(x - 20)

    if player.direction == "right":
        x = player.xcor()
        player.setx(x + 20)

#Listen for keypresses
wn.listen()
wn.onkeypress(go_up, "w")
wn.onkeypress(go_down, "s")
wn.onkeypress(go_left, "a")
wn.onkeypress(go_right, "d")

На данный момент все, что я получаю, это пустой экран в окне. #Window, кажется, работает нормально, но кроме этого больше ничего не появляется. Я, честно говоря, не уверен, почему это происходит, поэтому я обратился к StackOverflow за помощью.

1 Ответ

2 голосов
/ 02 февраля 2020

Некоторые пункты в вашем коде:

  1. Мне пришлось добавить import turtle в начале, чтобы использовать модуль turtle.

  2. Окно открылось и сразу закрылось. Мне пришлось добавить wn.exitonclick() в конце, чтобы окно оставалось открытым.

  3. Функция move() никогда не вызывается. Мне пришлось добавить вызов к move() в каждом из go_up, go_down, go_left и go_right после обновления направления игрока.

  4. Вы отключили трассировку установив wn.tracer(0). В соответствии с документацией , без отслеживания необходимо обновить sh окно вручную, используя turtle.update(). Я добавил этот вызов в конец функции move(). В качестве альтернативы, вы можете использовать wn.tracer(1) для автоматического обновления sh экрана при каждом изменении.

    По общему признанию, документация не совсем ясна относительно эффекта 0.

Применение этих изменений в вашем коде дает мне окно, в котором я могу перемещаться по черепахе, используя w / a / s / d .

Еще одно замечание: мне неясно, что вы пытаетесь делать с операторами if в своих go_ ... функциях. В go_up() вы устанавливаете направление на up, только если оно в данный момент не down. Это приводит к тому, что когда я перемещаю черепаху вниз, я не могу снова ее поднять, пока не сделаю шаг в сторону с помощью go_left() / go_right(). Это кажется странным. Может быть, вы хотели обновить только до up, если направление еще не up? Как в:

    if player.direction != "up":
        player.direction = "up"
...