# (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz # Figur-Klasse # Autor: Johannes Tümler # Letzte Änderung: 12.04.2022 # Zweck: Figur-Entität definieren # # Harpyie erbt Alles von Monster # können den Held bei Berührung töten # Harpyie kann in alle 4 Himmelrichtungen schießen, nacheinander pro Richtung (nicht zugleich) # Harpyie kann seitwärts schießen # Harpyie kann in alle Richtungen bewegen # Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann. # Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet. if __name__=="__main__": import subprocess # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach: #subprocess.call("python3 main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm) subprocess.call("main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm) exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei. # Ende "BLOCK1" from re import I import pygame from KlasseMonster import Monster from time import time from random import randint from KlasseMagie import Magie from KlasseHeld import Held import sounds class Harpyie(Monster): #erbt vom Monster def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster): super().__init__(x, y, geschw, breite, hoehe, level, bildFigur,zeitMonster) self.MonsterDupl = Monster #Welche Klasse erschaffen wird self.dupliList = [] #Liste der erschaffenen Hapyie self.zeitDupl = zeitMonster self.anzahlDouble = 1 self.zeitUnsicht = zeitMonster self.bildUnsicht = [pygame.image.load("Bilder/Harpyie/tot.png"), pygame.image.load("Bilder/Harpyie/tot.png")] self.saveBildOben = self.bildOben self.saveBildUnten = self.bildUnten self.saveBildRechts = self.bildRechts self.saveBildLinks = self.bildLinks self.zeitSpring = zeitMonster self.Harpyiekugeln = [] #Die Kugelnlist von Hapyie self.MagieReichtung=0 self.block=True def reset(self): self.x = self.xReset self.y = self.yReset self.leben = True self.heldTot = False self.anzahlDouble = 1 self.dupliList = [] self.Harpyiekugeln = [] def faehigkeit(self): #Fähigkeiten von Hapyie self.toeten() self.duplizieren() self.Magie() def duplizieren(self): #Codequelle von KlasseGeist for dupli in self.dupliList: #Alle erschaffenen Hapyie in Bewegung bringen if dupli.mlaufen(self.heldDaten): #Prüfen ob ein erschaffene Hapyie den Held getötet hat self.heldTot = True if time() - self.zeitDupl >= 0.5 * self.anzahlDouble: #Zeit zur Duplezierung wird jedes mal erhöht self.dupliList.append(self.MonsterDupl(x = self.x, y = self.y, geschw = self.geschw, breite = self.breite, hoehe = self.hoehe, level = self.level, bildFigur = self.bildFigur, zeitMonster = time())) #Monster wird erschaffen und in die Liste eingefügt self.zeitDupl = time() #Zeit wird wieder auf Null gesetzt self.anzahlDouble += 1 def Magie(self): #Hapyie kann die Magiekugeln schiessen if(int(time())%2==0): #Kugelschuss nicht gleichzeitig if (self.block): self.Harpyiekugeln.append(Magie(self.x, self.y, self.MagieReichtung, "R", 1)) self.block=False self.MagieReichtung+=1 if self.MagieReichtung == 8: #kugelschuss in jede Richtungen:8 Kugelnrichungen self.MagieReichtung=0 else: self.block=True for k in self.Harpyiekugeln: #Alle Magiekugeln werden in Bewegung gebracht und Kollision von Hindernissen vernichtet if not self.hindernis(k.kugelRec): self.Harpyiekugeln.remove(k) k.bewegung() for b in self.heldDaten.kugeln: #Die Kugeln von Held und Hapyie werden vernichtet, wenn sie sich berühren if k.kugelRec.colliderect(b.kugelRec): self.heldDaten.kugeln.remove(b) self.Harpyiekugeln.remove(k) def sterben(self): # Hapyie ist tot nach der Berührung von der Magie des Helden for k in self.heldDaten.kugeln: if self.rechteck.colliderect(k.kugelRec): #Wenn Hapyie gestorben: gewonnen-Sound wird aktiviert self.heldDaten.kugeln.remove(k) #Codequelle:GameOver und KlasseMonster self.leben = False pygame.display.update() pygame.mixer.music.stop() pygame.mixer.music.load("Sound/Victory1.wav") pygame.mixer.music.play(-1, 0.0) pygame.mixer.music.set_volume(1)