KlassePrinzessin.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Prinzessin-Klasse
  3. # Autor: Viktor Lysow, Johannes Tümler
  4. # Letzte Änderung: 19.04.2023
  5. # Zweck: Definition der Prinzessin
  6. #
  7. # Prinzessin erbt Alles von Monster
  8. # Held stirbt wenn Prinzessin stirbt
  9. # Prinzesin kann Emotionen zeigen
  10. # Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann.
  11. # Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet.
  12. if __name__=="__main__":
  13. import subprocess
  14. # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach:
  15. #subprocess.call("python3 main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  16. subprocess.call("main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  17. exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei.
  18. # Ende "BLOCK1"
  19. from random import randint
  20. import pygame
  21. from screen import screen
  22. from KlasseMonster import Monster
  23. from KlasseWurfaxt import Axt
  24. from time import time
  25. import sounds
  26. import DatenSammeln as ds
  27. class Prinzessin(Monster): # Eine Prinzessin ist ein Monster (aber ein besonderes)
  28. def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster):
  29. super().__init__(x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster)
  30. self.emotionWechsel = 0
  31. self.bildAngst = [pygame.image.load(f"Bilder/Emotion/!1.png"),
  32. pygame.image.load(f"Bilder/Emotion/!2.png"),
  33. pygame.image.load(f"Bilder/Emotion/!3.png")]
  34. self.bildHerz = [pygame.image.load(f"Bilder/Emotion/Herz1.png"),
  35. pygame.image.load(f"Bilder/Emotion/Herz2.png"),
  36. pygame.image.load(f"Bilder/Emotion/Herz3.png")]
  37. self.zeitEmotion = zeitMonster
  38. self.bildTot = [pygame.image.load(f"Bilder/Prinzessin/tot.png")]
  39. self.stehRicht = 0
  40. self.axtZahlPrinzessin = 0
  41. def faehigkeit(self): #Fähigkeiten von Monster werden mit den Fähigkeiten der Klasse überschrieben!!!
  42. self.priSterben()
  43. for monster in Monster.monsterListe:
  44. if monster.leben: #wechselt Emotion je nach ob der Endboss lebt oder nicht
  45. self.emotion(self.bildAngst)
  46. break # wenn noch mindestens 1 Monster vorhanden: Angst! Abbruch der Schleife
  47. else:
  48. self.emotion(self.bildHerz)
  49. for monster in Monster.monsterListe: # ursprünglich wollte ich die obere Schleife mit dieser Schleife zusammenlegen, passt jedoch logisch nicht
  50. if monster.leben and self.rechteck.colliderect(monster.rechteck):
  51. self.richtung = (self.richtung + randint(1,4)) % 4 # wir drehen uns vom Monster weg
  52. def reset(self):
  53. ds.daten_csv(10, self.axtZahlPrinzessin) #schreiben auf Datei
  54. self.axtZahlPrinzessin = 0
  55. super().reset()
  56. def priSterben(self): # Held stirbt, wenn Prinzessin stirbt
  57. if not self.leben:
  58. sounds.soundTot()
  59. screen.blit(self.bildTot[0], (self.x, self.y))
  60. screen.blit(self.heldDaten.bildtot, (self.heldDaten.x, self.heldDaten.y))
  61. self.heldTot = True
  62. def emotion(self, emo): # Zeigt eine Sprechblase über dem Kopf
  63. screen.blit(emo[self.emotionWechsel], (self.x, self.y - 48))
  64. if time() - self.zeitEmotion >= 0.15: #Animation der Sprechblase
  65. if self.emotionWechsel < 2:
  66. self.emotionWechsel += 1
  67. else:
  68. self.emotionWechsel = 0
  69. self.zeitEmotion = time()