Code ohne Kommentar
import random, time, sys
import pgzrun

WIDTH, HEIGHT = 500, 700


class UFO(Actor):
    def __init__(self, x, y):
        Actor.__init__(self, 'ufo')
        self.aktiv = True
        self.x = x
        self.y = y
        self.x_geschwindigkeit = 2
        self.y_geschwindigkeit = 1
        self.abwurf_rate = 0.007

    def aktualisiere(self):
        self.x += self.x_geschwindigkeit
        self.y += self.y_geschwindigkeit

        if self.left < 0 and self.x_geschwindigkeit < 0:
            self.x_geschwindigkeit *= -1

        if self.right > WIDTH and self.x_geschwindigkeit > 0:
            self.x_geschwindigkeit *= -1

        if self.top > HEIGHT:
            self.aktiv = False
            
        if entscheide(self.abwurf_rate) and self.top > 0:
            self.bombe_abwerfen()
            
    def bombe_abwerfen(self):
        spiel.bomben.append(Bombe(self.center))
        

class Bombe(Actor):
    def __init__(self, center):
        Actor.__init__(self, 'bombe')
        self.aktiv = True
        self.center = center
        self.geschwindigkeit = 5

    def aktualisiere(self):
        self.y += self.geschwindigkeit
        if self.top > HEIGHT:
            self.aktiv= False



class Spiel:
    def __init__(self):
        self.ufos = []
        self.bomben = []
        
        
def erzeuge_ufo_geschwader(anzahl_ufos):
    return [UFO(i*40, -i*40) for i in range(0, anzahl_ufos)]


def entscheide(wahrscheinlichkeit):
    return random.random() < wahrscheinlichkeit


def update():
    for actor in spiel.ufos + spiel.bomben:
        actor.aktualisiere()

    spiel.ufos = [u for u in spiel.ufos if u.aktiv]

    if len(spiel.ufos) == 0:
        spiel.ufos = erzeuge_ufo_geschwader(12)


def draw():
    screen.fill((255, 255, 255))

    for actor in spiel.ufos + spiel.bomben:
        actor.draw()


spiel = Spiel()
pgzrun.go()

Code mit Kommentar
# NEU: Importe für Zufallszahlen, Zeit und Systemfunktionen:
import random, time, sys
import pgzrun

WIDTH, HEIGHT = 500, 700


class UFO(Actor):
    def __init__(self, x, y):
        Actor.__init__(self, 'ufo')
        self.aktiv = True
        self.x = x
        self.y = y
        self.x_geschwindigkeit = 2
        self.y_geschwindigkeit = 1
       # NEU: Die Wahrscheinlichkeit, dass bei Aktualisierung eine Bombe abgeworfen wird:
        self.abwurf_rate = 0.007

    def aktualisiere(self):
        self.x += self.x_geschwindigkeit
        self.y += self.y_geschwindigkeit

        if self.left < 0 and self.x_geschwindigkeit < 0:
            self.x_geschwindigkeit *= -1

        if self.right > WIDTH and self.x_geschwindigkeit > 0:
            self.x_geschwindigkeit *= -1

        if self.top > HEIGHT:
            self.aktiv = False
        
        # NEU: Entscheiden, ob eine Bombe abgeworfen wird:
        if entscheide(self.abwurf_rate) and self.top > 0:
            self.bombe_abwerfen()
   
    # Die Funktion erzeugt die Bombe und fügt sie direkt der Liste hinzu:         
    def bombe_abwerfen(self):
        spiel.bomben.append(Bombe(self.center))
        

# Neu, aber wie gehabt:
class Bombe(Actor):
    def __init__(self, center):
        Actor.__init__(self, 'bombe')
        self.aktiv = True
        self.center = center
        self.geschwindigkeit = 5

    def aktualisiere(self):
        self.y += self.geschwindigkeit
        if self.top > HEIGHT:
            self.aktiv= False



class Spiel:
    def __init__(self):
        self.ufos = []
        self.bomben = []
        
        
def erzeuge_ufo_geschwader(anzahl_ufos):
    return [UFO(i*40, -i*40) for i in range(0, anzahl_ufos)]

# NEU: Diese Funktion liefert True oder False.
# Wenn wahrscheinlichkeit gleich 0 ist, dann immer False.
# Wenn wahrscheinlichkeit gleich 1 ist, dann immer True.
# Bei zum Beispiel wahrscheinlichkeit 0.25 in einem Viertel aller Fälle True, sonst False
def entscheide(wahrscheinlichkeit):
    return random.random() < wahrscheinlichkeit


def update():
    for actor in spiel.ufos + spiel.bomben:
        actor.aktualisiere()

    spiel.ufos = [u for u in spiel.ufos if u.aktiv]

    if len(spiel.ufos) == 0:
        spiel.ufos = erzeuge_ufo_geschwader(12)


def draw():
    screen.fill((255, 255, 255))

    for actor in spiel.ufos + spiel.bomben:
        actor.draw()


spiel = Spiel()
pgzrun.go()
Zuletzt geändert: Donnerstag, 20. Februar 2025, 15:35