Wie kann ich mehrere Münzen in PyGame einsammeln?
Hallo,
ich habe eine Frage zu meinem Programm.
Nachdem ich die dritte Münze in meinem Spiel eingesammelt habe, wird komischerweise die zweite Münze anstatt der Dritten gespawnt. Wie kann ich das ändern? Bzw. hat jemand eine Idee, wie sich das beheben lässt?
Hier ist mein Code:
from random import randint
WIDTH = 600
HEIGHT = 600
score = 0
game_over = False
mario = Actor("mario.png")
mario.pos = 100, 100
coin = Actor("money.png")
coin.pos = 0, 0
def draw():
screen.fill("green")
mario.draw()
coin.draw()
screen.draw.text("Punkte: " + str(score), color="black", topleft=(10, 10))
if game_over:
screen.fill("pink")
screen.draw.text("Endstand:" + str(score), topleft=(10, 10), fontsize = 60)
def place_coin():
coin.x = 100
coin.y = 200
def place_coin2():
coin.x = 100
coin.y = 300
def place_coin3():
coin.x = 100
coin.y = 400
def place_coin4():
coin.x = 100
coin.y = 500
def place_coin5():
coin.x = 300
coin.y = 100
def place_coin6():
coin.x = 300
coin.y = 300
def place_coin7():
coin.x = 500
coin.y = 200
def place_coin8():
coin.x = 500
coin.y = 300
def place_coin9():
coin.x = 500
coin.y = 400
def place_coin10():
coin.x = 500
coin.y = 500
def place_coin11():
coin.x = 700
coin.y = 100
def place_coin12():
coin.x = 700
coin.y = 300
def time_up():
global game_over
game_over = True
def update():
global score
if keyboard.left:
mario.x = mario.x - 4
elif keyboard.right:
mario.x = mario.x + 4
elif keyboard.up:
mario.y = mario.y - 4
elif keyboard.down:
mario.y = mario.y + 4
coin_collectet = mario.colliderect(coin)
if coin_collectet:
score = score + 10
place_coin2()
coin_collectet = mario.colliderect(coin)
if coin_collectet:
score = score + 10
place_coin10()
coin_collectet = mario.colliderect(coin)
if coin_collectet:
score = score + 10
place_coin4()
coin_collectet = mario.colliderect(coin)
if coin_collectet:
score = score + 10
place_coin8()
clock.schedule(time_up, 20.0)
place_coin()
2 Antworten
Direkt auffällig ist, dass du in deinen place-Funktionen nie auf die globale Variable zugreifst.
Die Reihenfolge, wie die Münzen aufgesammelt werden, erschließt sich ansonsten erst zur Laufzeit aufgrund der Entscheidungen des Spielers. Von daher wäre es sinnvoll, wenn du mittels Konsolenausgaben mitverfolgen würdest, wo die Münze jeweils platziert wird.
Es wäre zudem sinnvoll, den Code zusammenzufassen. Zum Setzen der Position genügt eine Funktion:
def place_coin(point):
global coin
coin.pos = point
# example invocation
place_coin((10, 20))
Wobei du die wohl nicht einmal unbedingt benötigst.
Die Positionen könnten in einer Liste gespeichert werden.
coin_positions = [
(100, 200),
(100, 300),
# etc. ...
]
und je nach Bedarf holst du den entsprechenden Eintrag heraus, um die Position der Münze neu zu setzen.
Beispiel:
coin.pos = coin_positions[0]
# or with place_coin function:
place_coin(coin_positions[0])
Hallo erstmal danke für die Hilfe. Wenn ich das nun aber probiere in meinen Code einzusetzten brauche ich noch irgendwas für "point". Tut mir leid das ich das nicht selber nicht weiß bin neu im programmieren.
TypeError: place_coin() missing 1 required positional argument: 'point'