#python
#python
Вопрос:
Что я пытаюсь здесь сделать, так это то, что если нажата клавиша «w» и нажата клавиша «Up», то и player1, и player2 поднимаются. Прямо сейчас, если вы нажмете на них обе, поднимется только та, которую вы нажали первой. Конечно, я все еще хочу, чтобы, если будет нажата только одна из клавиш, двигалась только черепаха, которая подключается к нему. Как я могу это сделать?
Это мой код:
import turtle
import random
turtle.screensize(1000,1000)
turtle.bgcolor("black")
ball = turtle.Turtle()
ball.color("orange")
ball.shape("circle")
ball.shapesize(1.2)
ball.speed(3)
ball.penup()
player1 = turtle.Turtle()
player1.color("blue")
player1.shape("arrow")
player1.shapesize(5)
player1.speed(3)
player1.penup()
player1.setpos(350,0)
player2 = turtle.Turtle()
player2.color("cyan")
player2.shape("arrow")
player2.shapesize(5)
player2.speed(3)
player2.penup()
player2.setheading(180)
player2.setpos(-350,0)
player1y = 0
player2y = 0
def player1up():
global player1y
player1y = 12
player1.goto(350,player1y)
def player1down():
global player1y
player1y -= 12
player1.goto(350,player1y)
def player2up():
global player2y
player2y = 12
player2.goto(-350,player2y)
def player2down():
global player2y
player2y -= 12
player2.goto(-350,player2y)
turtle.listen()
turtle.onkeypress(player1up, 'Up')
turtle.onkeypress(player1down, 'Down')
turtle.onkeypress(player2up, 'w')
turtle.onkeypress(player2down, 's')
Ответ №1:
Что вам нужно, так это то, что известно как игровой цикл. Ваш код работает отлично, но ваше приложение завершает работу после первого рендеринга. Итак, чтобы сохранить фреймы рендеринга, вам нужно поддерживать работоспособность вашего приложения. Для этого вы можете сделать что-то вроде этого:
import turtle
#set up the screen
app = turtle.Screen()
app.title("Your app")
app.bgcolor("black")
app.setup(width=1000, height=1000)
app.tracer(0)
ball = turtle.Turtle()
ball.color("orange")
ball.shape("circle")
ball.shapesize(1.2)
ball.speed(3)
ball.penup()
player1 = turtle.Turtle()
player1.color("blue")
player1.shape("arrow")
player1.shapesize(5)
player1.speed(3)
player1.penup()
player1.setpos(350,0)
player2 = turtle.Turtle()
player2.color("cyan")
player2.shape("arrow")
player2.shapesize(5)
player2.speed(3)
player2.penup()
player2.setheading(180)
player2.setpos(-350,0)
player1y = 0
player2y = 0
def player1up():
global player1y
player1y = 12
player1.goto(350,player1y)
def player1down():
global player1y
player1y -= 12
player1.goto(350,player1y)
def player2up():
global player2y
player2y = 12
player2.goto(-350,player2y)
def player2down():
global player2y
player2y -= 12
player2.goto(-350,player2y)
turtle.listen()
turtle.onkeypress(player1up, 'Up')
turtle.onkeypress(player1down, 'Down')
turtle.onkeypress(player2up, 'w')
turtle.onkeypress(player2down, 's')
while True:
app.update()
По сути, получите экземпляр экрана и вызовите метод update() внутри цикла while True, который будет поддерживать работу вашего приложения.
И весь написанный вами код работает так, как вы ожидали.
Вот небольшое руководство по другой игре, созданной с помощью пакета Turtle. Я считаю, что это не то, что вы хотите сделать, но это может помочь в качестве руководства.