Сделайте привязки клавиш для игры Space Invaders - PullRequest
1 голос
/ 05 июня 2019

Я делаю учебник по созданию Space Invaders для изучения Python, но у меня возникла проблема с привязкой моих ключей. Независимо от того, на какие клавиши я изменяю функции move_left и move_right, космический корабль не движется вообще, и нет никакой ошибки, чтобы отследить его до того или другого.

Я пробовал просматривать форумы, на которых обсуждалась похожая проблема, и YouTube, но ни один из них не работал вообще.

#Modules
import turtle
#Screen

wn = turtle.Screen()
wn.bgcolor("black")
wn.title("Space invaders")

# Border
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color("white")
border_pen.penup()
border_pen.setposition(-300, -300)
border_pen.pendown()
border_pen.pensize(3)
for sides in range(4):
    border_pen.fd(600)
    border_pen.lt(90)
    border_pen.hideturtle()

# Create the player turtle
player = turtle.Turtle()
player.color("blue")
player.shape("triangle")
player.penup()
player.speed(0)
player.setposition(0, -250)
player.setheading(90)
playerspeed = 15

# move player left and right
def move_left():
    x = player.xcor()
    x -= playerspeed
    player.setx(x)
def move_right():
    x = player.xcor()
    x+=playerspeed
    player.setx(x)

# keyboard bindings

wn.onkey(move_left(), "Left")
wn.onkey(move_right(),"Right")
wn.listen()
turtle.mainloop()

Я ожидаю, что черепаха игрока будет двигаться влево и вправо, когда я нажимаю клавиши со стрелками «влево» и «вправо».

1 Ответ

1 голос
/ 07 июня 2019

Проблема с этими двумя строками кода:

wn.onkey(move_left(), "Left")
wn.onkey(move_right(),"Right")

Вы не хотите вызывать move_left(), вы хотите передать move_left для вызова обработчиком события при нажатии клавиши:

wn.onkey(move_left, 'Left')
wn.onkey(move_right, 'Right')

Включая скобки, вы передаете возвращаемое значение move_left(), равное None, фактически отключая событие вместо его включения!

Вот переделка вашего кода с помощью вышеуказанного исправления:

from turtle import Screen, Turtle

screen = Screen()
screen.bgcolor('black')
screen.title("Space invaders")

# Border
border_pen = Turtle()
border_pen.hideturtle()
border_pen.pensize(3)
border_pen.speed('fastest')
border_pen.color('white')

border_pen.penup()
border_pen.setposition(-300, -300)
border_pen.pendown()

for _ in range(4):
    border_pen.forward(600)
    border_pen.left(90)

# Create the player turtle
player = Turtle()
player.shape('triangle')
player.speed('fastest')
player.color('blue')
player.penup()

player.setposition(0, -250)
player.setheading(90)

playerspeed = 15

# Move player left and right
def move_left():
    x = player.xcor() - playerspeed
    player.setx(x)

def move_right():
    x = player.xcor() + playerspeed
    player.setx(x)

# Keyboard bindings
screen.onkey(move_left, 'Left')
screen.onkey(move_right, 'Right')

screen.listen()
screen.mainloop()
...