У меня проблемы с запуском двух функций одновременноPython

Программы на Python
Ответить
Anonymous
 У меня проблемы с запуском двух функций одновременно

Сообщение Anonymous »

Я новичок в программировании, который только что освоил Python Turtle. Недавно я работал над проектом, в котором вы управляете двумя персонажами. Они пытаются перестрелять друг друга над рекой. Но я столкнулся с ошибкой: всякий раз, когда одна сторона выпускает пулю, а затем и другая, первая пуля просто замирает на месте, пока первая не закончится. Это портит всю игру. Я видел другие сообщения с этим «if name = main», но я этого не понимаю.
Я понял, что это связано с вызовом функции в то время как другой все еще работает. Я пробовал использовать многопоточность, но это не сработало, и я слишком новичок, чтобы это понять. Если бы кто-нибудь мог объяснить мне, как это исправить, я был бы очень рад. (Да, код на немецком языке, но имена переменных не имеют особого значения).
import turtle

sieg_1 = 0
sieg_2 = 0

kugel1speed = 4
kugel2speed = 4

screen = turtle.Screen()
screen.title("Paintball River")
screen.bgcolor("darkgreen")
screen.setup(width=800, height=600)

#wasd / links
character1 = turtle.Turtle()
character1.shape("square")
character1.color("mediumblue")
character1.speed(0)
character1.penup()
character1.goto(-200,0)

#pfeiltasten / rechts
character2 = turtle.Turtle()
character2.shape("square")
character2.color("red")
character2.speed(0)
character2.penup()
character2.goto(200, 0)

####################################################################
randkröte = turtle.Turtle()
randkröte.shape("square")
randkröte.color("grey")
randkröte.speed(100)
randkröte.pencolor("grey")
randkröte.pensize(30)
randkröte.penup()
randkröte.goto(386,0)
randkröte.pendown()
randkröte.left(90)
randkröte.forward(285)
randkröte.left(90)
randkröte.forward(772)
randkröte.left(90)
randkröte.forward(571)
randkröte.left(90)
randkröte.forward(790)
randkröte.penup()
randkröte.goto(386,-300)
randkröte.left(90)
randkröte.pendown()
randkröte.forward(400)
randkröte.penup()
randkröte.goto(-400,300)
randkröte.pendown()
randkröte.forward(1)

flusskröte = turtle.Turtle()
flusskröte.shape("square")
flusskröte.color("royalblue")
flusskröte.speed(100)
flusskröte.pencolor("royalblue")
flusskröte.pensize(179)
flusskröte.penup()
flusskröte.goto(0,-400)
flusskröte.pendown()
flusskröte.left(90)
flusskröte.forward(800)

###################################################################################

def schießen1():
x1 = character1.xcor()
y1 = character1.ycor()
kugely1 = kugel1.ycor()
if kugely1 == 330:
kugel1.teleport(x1,y1)
kugel1.goto(365,y1)

def schießen2(x,y):
x2 = character2.xcor()
y2 = character2.ycor()
kugely2 = kugel2.ycor()
if kugely2 == 350:
kugel2.teleport(x2,y2)
kugel2.goto(-365,y2)

kugel1 = turtle.Turtle()
kugel1.speed(kugel1speed)
kugel1.color("darkblue")
kugel1.shape("circle")
kugel1.shapesize(0.5)
kugel1.penup()
kugel1.hideturtle()
kugel1.goto(0,330)
kugel1.showturtle()

kugel2 = turtle.Turtle()
kugel2.speed(kugel2speed)
kugel2.color("darkred")
kugel2.shape("circle")
kugel2.shapesize(0.5)
kugel2.penup()
kugel2.hideturtle()
kugel2.goto(0,350)
kugel2.showturtle()

######################################################################################

speed = 20

def hoch1():
y = character1.ycor()
if y < 260:
character1.sety(y + speed)

def runter1():
y = character1.ycor()
if y > -260:
character1.sety(y - speed)

def links1():
x = character1.xcor()
if x > -350:
character1.setx(x - speed)

def rechts1():
x = character1.xcor()
if x < -100:
character1.setx(x + speed)

def hoch2():
y = character2.ycor()
if y < 260:
character2.sety(y + speed)

def runter2():
y = character2.ycor()
if y > -260:
character2.sety(y - speed)

def links2():
x = character2.xcor()
if x > 100:
character2.setx(x - speed)

def rechts2():
x = character2.xcor()
if x < 350:
character2.setx(x + speed)

screen.listen()

screen.onkeypress(screen.bye, "Escape")

screen.onkeyrelease(hoch2, "Up")
screen.onkeyrelease(runter2, "Down")
screen.onkeyrelease(links2, "Left")
screen.onkeyrelease(rechts2, "Right")

screen.onkeyrelease(hoch1, "w")
screen.onkeyrelease(runter1, "s")
screen.onkeyrelease(links1, "a")
screen.onkeyrelease(rechts1, "d")

screen.onkeyrelease(schießen1,"e")
screen.onscreenclick(schießen2)

######################################################################################

while True:
screen.update()
kugelx1 = kugel1.xcor()
kugelx2 = kugel2.xcor()
if kugelx1 == 365:
kugel1.teleport(0,330)
if kugelx2 == -365:
kugel2.teleport(0,350)



Подробнее здесь: https://stackoverflow.com/questions/793 ... -same-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»