This commit is contained in:
alstergym
2026-09-30 11:06:35 +02:00
parent 937085726c
commit 57bf9df884
4 changed files with 83 additions and 44 deletions
Binary file not shown.
+3
View File
@@ -19,5 +19,8 @@ Ich habe ein Monster programmiert, das scih zufällig bewegt. Es bewegt sich abe
#### 29.09.
Ich habe das Spielfeld in Ebenen augeteilt. Eine für den Hintergrund und eine für die Spielfiguren.
#### 30.09.
Ich habe eine dritte Ebene für Effekte hinzugefügt.
Außerdem wollte ich mehrere Monster erstellen. Da gab es jedoch ein paar Bugs, von denen noch einer besteht.
+54 -29
View File
@@ -11,9 +11,15 @@ class MeinSpiel:
for i in range(6):
ebene0bilder.append("Bilder/"+hintergrundstil+str(i+1)+".xcf")
ebene0feld = []
ebene1bilder = ["Bilder/leer.xcf","Bilder/Spieler.xcf","Bilder/Monster.xcf",]
ebene1bilder = ["Bilder/leer.xcf","Bilder/angriff1.xcf"]
ebene1feld = []
ebene2bilder = ["Bilder/leer.xcf","Bilder/Spieler.xcf","Bilder/Monster.xcf"]
ebene2feld = []
game_over = False
anzahlMonster= 0
monsterspawncooldown=0
monsterstruktur = []
betrachtetesmonster = 0
def __init__(self, felderX, felderY):
for x in range(felderX):
@@ -21,6 +27,11 @@ class MeinSpiel:
for y in range(felderY):
self.ebene0feld[x].append(random.randint(0,5))
for x in range(felderX):
self.ebene2feld.append([])
for y in range(felderY):
self.ebene2feld[x].append(0)
for x in range(felderX):
self.ebene1feld.append([])
for y in range(felderY):
@@ -29,26 +40,39 @@ class MeinSpiel:
def anfangsKonfiguration(self):
self.spielerx = random.randint(5,9)
self.spielery = random.randint(5,9)
self.ebene1feld[self.spielerx][self.spielery] = 1
self.monsterx = random.randint(5,9)
self.monstery = random.randint(5,9)
self.ebene1feld[self.monsterx][self.monstery] = 2
self.ebene2feld[self.spielerx][self.spielery] = 1
self.ebene1feld[4][4] = 1
def Monster(self):
if self.monsterspawncooldown == 0:
self.anzahlMonster += 1
self.monsterstruktur.append([random.randint(1,42),random.randint(1,42),random.randint(1,42),random.randint(1,42)])
self.monsterspawncooldown = 600
self.betrachtetesmonster = 0
while self.betrachtetesmonster < self.anzahlMonster:
self.monsterstruktur [self.betrachtetesmonster][2] = self.monsterstruktur [self.betrachtetesmonster][0]
self.monsterstruktur [self.betrachtetesmonster][3] = self.monsterstruktur [self.betrachtetesmonster][1]
self.monsterstruktur [self.betrachtetesmonster][0],self.monsterstruktur [self.betrachtetesmonster][1] = monster.bewegen(monster,self.monsterstruktur [self.betrachtetesmonster][0],self.monsterstruktur [self.betrachtetesmonster][1])
if self.ebene0feld[self.monsterstruktur [self.betrachtetesmonster][0]][self.monsterstruktur [self.betrachtetesmonster][1]] == 5:
self.ebene2feld[self.monsterstruktur [self.betrachtetesmonster][1]][self.monsterstruktur [self.betrachtetesmonster][2]] = 0
self.monsterstruktur [self.betrachtetesmonster][0] = self.monsterstruktur [self.betrachtetesmonster][2]
self.monsterstruktur [self.betrachtetesmonster][1] = self.monsterstruktur [self.betrachtetesmonster][3]
else:
self.ebene2feld[self.monsterstruktur [self.betrachtetesmonster][2]][self.monsterstruktur [self.betrachtetesmonster][3]] = 0
print(self.betrachtetesmonster)
self.ebene2feld[self.monsterstruktur [self.betrachtetesmonster][0]][self.monsterstruktur [self.betrachtetesmonster][3]] = 2
self.betrachtetesmonster +=1
self.monsterspawncooldown -=1
def spawnSpieler(self):
self.altmonsterx = self.monsterx
self.altmonstery = self.monstery
self.monsterx,self.monstery = monster.bewegen(monster,self.monsterx,self.monstery)
if self.ebene0feld[self.monsterx][self.monstery] == 5:
self.ebene1feld[self.altmonsterx][self.altmonstery] = 2
self.ebene1feld[self.monsterx][self.monstery] = 0
self.monsterx = self.altmonsterx
self.monstery = self.altmonstery
if self.spielerx == self.monsterx and self.spielery == self.monstery:
def Angriffe(self):
betrachtetesMonster = 0
while betrachtetesMonster < self.anzahlMonster:
if self.spielerx == self.monsterstruktur [betrachtetesMonster][0] and self.spielery == self.monsterstruktur [betrachtetesMonster][1]:
self.game_over = True
betrachtetesMonster +=1
def rechts(self):
self.spielerx += 1
@@ -77,11 +101,11 @@ class MeinSpiel:
self.oben()
sound.Schrittsound(sound)
if self.ebene0feld[self.spielerx][self.spielery]== 5:
self.ebene1feld[self.spielerx][self.spielery] = 0
self.ebene2feld[self.spielerx][self.spielery] = 0
self.spielerx,self.spielery = self.altspielerx,self.altspielery
verschiebung = self.hinergrundverschieben(xverschiebungaktuell,yverschiebungaktuell)
self.ebene1feld[self.altspielerx][self.altspielery] = 0
self.ebene1feld[self.spielerx][self.spielery] = 1
self.ebene2feld[self.altspielerx][self.altspielery] = 0
self.ebene2feld[self.spielerx][self.spielery] = 1
return verschiebung
@@ -125,15 +149,16 @@ class monster:
cooldownx = 1
cooldowny = 1
def __init__(self):
pass
def bewegen(self,xpos,ypos):
def bewegen(self,posx,posy):
xrichtung = random.randint(1,50*(self.cooldownx))
if xrichtung == 1 and xpos < 41:
xpos += 1
if xrichtung == 1 and posx < 41:
posx += 1
self.cooldownx = 100
if xrichtung == 2 and xpos > 0:
xpos -= 1
if xrichtung == 2 and posx > 0:
posx -= 1
self.cooldownx = 100
if self.cooldownx != 1:
@@ -141,16 +166,16 @@ class monster:
yrichtung = random.randint(1,50*(self.cooldowny))
if yrichtung == 1 and xpos < 41:
ypos += 1
if yrichtung == 1 and posy < 41:
posy += 1
self.cooldowny = 100
if yrichtung == 2 and ypos > 0:
ypos -= 1
if yrichtung == 2 and posy > 0:
posy -= 1
self.cooldowny = 100
if self.cooldowny != 1:
self.cooldowny -= 1
return xpos,ypos
return posx,posy
+22 -11
View File
@@ -16,20 +16,22 @@ WEISS = ( 255, 255, 255)
Beigegelb = ( 226, 181, 97 )
pyGameBilderebene0 = []
pyGameBilderebene1 = []
pyGameBilderebene2 = []
xverschiebung = 0
yverschiebung = 0
verschiebung = [0,0]
# Bilder aus meinSpiel werden für pygame vorbereitet
ebene0 = MeinSpiel(FelderX, FelderY)
for fname in ebene0.ebene0bilder:
meinspiel = MeinSpiel(FelderX, FelderY)
for fname in meinspiel.ebene0bilder:
pyGameBilderebene0.append(pygame.image.load(fname))
ebene1 = MeinSpiel(FelderX, FelderY)
for fname in ebene1.ebene1bilder:
for fname in meinspiel.ebene1bilder:
pyGameBilderebene1.append(pygame.image.load(fname))
for fname in meinspiel.ebene2bilder:
pyGameBilderebene2.append(pygame.image.load(fname))
#Anfangskonfiguration für das Spielfeld wird geladen
ebene0.anfangsKonfiguration()
meinspiel.anfangsKonfiguration()
# Definieren und Öffnen eines neuen Fensters
fenster = pygame.display.set_mode((Breite, Hoehe))
@@ -38,27 +40,36 @@ clock = pygame.time.Clock()
# Schleife Hauptprogramm
while True:
if meinspiel.game_over == False:
sound.hintergrundmusik(sound)
else:
pass
verschiebung=[0,0]
# Überprüfen, ob Nutzer eine Aktion durchgeführt hat
for event in pygame.event.get():
# Beenden bei [ESC] oder [X]
if event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE) or ebene0.game_over == True:
if event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE):
pygame.quit()
if event.type==KEYDOWN:
verschiebung = ebene0.bewegen(event.key-1073741902,xverschiebung,yverschiebung)
if event.type==KEYDOWN and meinspiel.game_over == False:
verschiebung = meinspiel.bewegen(event.key-1073741902,xverschiebung,yverschiebung)
# Spielfeld löschen
xverschiebung += verschiebung[0]
yverschiebung += verschiebung[1]
for x in range(FelderX):
for y in range(FelderY):
fenster.blit(pyGameBilderebene0[ebene0.ebene0feld[x][y]],((x+xverschiebung)*Pixel,(y+yverschiebung)*Pixel))
fenster.blit(pyGameBilderebene0[meinspiel.ebene0feld[x][y]],((x+xverschiebung)*Pixel,(y+yverschiebung)*Pixel))
for x in range(FelderX):
for y in range(FelderY):
fenster.blit(pyGameBilderebene1[ebene1.ebene1feld[x][y]],((x+xverschiebung)*Pixel,(y+yverschiebung)*Pixel))
fenster.blit(pyGameBilderebene1[meinspiel.ebene1feld[x][y]],((x+xverschiebung)*Pixel,(y+yverschiebung)*Pixel))
for x in range(FelderX):
for y in range(FelderY):
fenster.blit(pyGameBilderebene2[meinspiel.ebene2feld[x][y]],((x+xverschiebung)*Pixel,(y+yverschiebung)*Pixel))
# Spielfeld/figuren zeichnen
ebene0.spawnSpieler()
if meinspiel.game_over == False:
meinspiel.Monster()
meinspiel.Angriffe()
print(meinspiel.monsterstruktur)
# Fenster aktualisieren
pygame.display.flip()
clock.tick(FPS)