Az ellenfelek megállnak, ha lenyomok egy billentyűt.

0 értékelés
123 megtekintés
Laci (2 pont) kérdezte Máj 28.

Készítek egy "játékot" Pythonban turtle graphics és tkinter segítségével. Ha lenyomok egy billentyűt, hogy a játékos mozogjon, a játék fő ciklusa megáll és nem mozog az ellenfél. Értem, hogy ez miért van, de megoldást nem találtam a problémámra.

Kódrészlet:



import random
import time
import turtle
from tkinter import *

running = True

#ablak

wn = Tk()
wn.geometry("900x700")

canvas = Canvas(wn, width=750, height=600)
canvas.pack()
canvas.place(relx=0.5, rely=0.5, anchor=CENTER)


#játékos

player = turtle.RawTurtle(canvas)

player_speed = 3


#ellenfelek

enemies = []

for enemy in range(5):
    enemies.append((turtle.RawTurtle(canvas), 10))


for enemy in enemies:
    enemy[0].penup()
    enemy[0].speed(0)
    enemy[0].setheading(90)
    enemy[0].goto(enemy_position_x(), enemy_position_y())#random position


#játékos mozgatása

def move_left(event):
    player.setheading(180)
    player.setx(player.xcor() - player_speed)


def move_right(event):
    player.setheading(360)
    player.setx(player.xcor() + player_speed)


def move_up(event):
    player.setheading(90)
    player.sety(player.ycor() + player_speed)


def move_down(event):
    player.setheading(270)
    player.sety(player.ycor() - player_speed)


def shoot(event):
    #Nem írom le a lövés függvényt, mert túl hosszú lenne
    print("shoot")


wn.bind('<Left>', move_left)
wn.bind('<Right>', move_right)
wn.bind('<Up>', move_up)
wn.bind('<Down>', move_down)
wn.bind('<space>', shoot)


#játék fő ciklusa
while running:

    #move the enemy
    for this_enemy in enemies:
        if this_enemy[0].xcor() < player.xcor():
            this_enemy[0].setx(this_enemy[0].xcor() + 3)
            time.sleep(0.1)

        if this_enemy[0].xcor() > player.xcor():
            this_enemy[0].setx(this_enemy[0].xcor() - 3)
            time.sleep(0.1)

        if this_enemy[0].ycor() < player.ycor():
            this_enemy[0].sety(this_enemy[0].ycor() + 3)
            time.sleep(0.1)

        if this_enemy[0].ycor() > player.ycor():
            this_enemy[0].sety(this_enemy[0].ycor() - 3)
            time.sleep(0.1)

wn.mainloop()

Kérjük jelentkezz be vagy regisztrálj, hogy válaszolhass a kérdésre.

...