# (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz # Prinzessin-Klasse # Autor: Viktor Lysow, Johannes Tümler # Letzte Änderung: 19.04.2023 # Zweck: Definition der Prinzessin # # Prinzessin erbt Alles von Monster # Held stirbt wenn Prinzessin stirbt # Prinzesin kann Emotionen zeigen # 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 random import randint import pygame from screen import screen from KlasseMonster import Monster from KlasseWurfaxt import Axt from time import time import sounds import DatenSammeln as ds class Prinzessin(Monster): # Eine Prinzessin ist ein Monster (aber ein besonderes) def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster): super().__init__(x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster) self.emotionWechsel = 0 self.bildAngst = [pygame.image.load(f"Bilder/Emotion/!1.png"), pygame.image.load(f"Bilder/Emotion/!2.png"), pygame.image.load(f"Bilder/Emotion/!3.png")] self.bildHerz = [pygame.image.load(f"Bilder/Emotion/Herz1.png"), pygame.image.load(f"Bilder/Emotion/Herz2.png"), pygame.image.load(f"Bilder/Emotion/Herz3.png")] self.zeitEmotion = zeitMonster self.bildTot = [pygame.image.load(f"Bilder/Prinzessin/tot.png")] self.stehRicht = 0 self.axtZahlPrinzessin = 0 def faehigkeit(self): #Fähigkeiten von Monster werden mit den Fähigkeiten der Klasse überschrieben!!! self.priSterben() for monster in Monster.monsterListe: if monster.leben: #wechselt Emotion je nach ob der Endboss lebt oder nicht self.emotion(self.bildAngst) break # wenn noch mindestens 1 Monster vorhanden: Angst! Abbruch der Schleife else: self.emotion(self.bildHerz) for monster in Monster.monsterListe: # ursprünglich wollte ich die obere Schleife mit dieser Schleife zusammenlegen, passt jedoch logisch nicht if monster.leben and self.rechteck.colliderect(monster.rechteck): self.richtung = (self.richtung + randint(1,4)) % 4 # wir drehen uns vom Monster weg def reset(self): ds.daten_csv(10, self.axtZahlPrinzessin) #schreiben auf Datei self.axtZahlPrinzessin = 0 super().reset() def priSterben(self): # Held stirbt, wenn Prinzessin stirbt if not self.leben: sounds.soundTot() screen.blit(self.bildTot[0], (self.x, self.y)) screen.blit(self.heldDaten.bildtot, (self.heldDaten.x, self.heldDaten.y)) self.heldTot = True def emotion(self, emo): # Zeigt eine Sprechblase über dem Kopf screen.blit(emo[self.emotionWechsel], (self.x, self.y - 48)) if time() - self.zeitEmotion >= 0.15: #Animation der Sprechblase if self.emotionWechsel < 2: self.emotionWechsel += 1 else: self.emotionWechsel = 0 self.zeitEmotion = time()