KlassePrinzessin.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Prinzessin-Klasse
  3. # Autor: Viktor Lysow
  4. # Letzte Änderung: 03.08.2022
  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. # Hinweis fürs Debugging: Das VSCode-Debugging funktioniert jedoch nur, wenn man das Debugging in der "main.py" beginnt! D.h. wer debuggen möchte, muss die main.py öffnen und dort Debug starten.
  19. # Ende "BLOCK1"
  20. from random import randint
  21. import pygame
  22. from screen import screen
  23. from KlasseMonster import Monster
  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. def faehigkeit(self): #Fähigkeiten von Monster werden mit den Fähigkeiten der Klasse überschrieben!!!
  40. self.priSterben()
  41. if Monster.lebendeMonster > 0:
  42. self.emotion(self.bildAngst)
  43. else:
  44. self.emotion(self.bildHerz)
  45. for monster in Monster.monsterListe: # ursprünglich wollte ich die obere Schleife mit dieser Schleife zusammenlegen, passt jedoch logisch nicht
  46. if monster.leben and self.rechteck.colliderect(monster.rechteck):
  47. self.richtung = (self.richtung + randint(1,4)) % 4 # wir drehen uns vom Monster weg
  48. def reset(self):
  49. super().reset()
  50. def priSterben(self): # Held stirbt, wenn Prinzessin stirbt
  51. if not self.leben:
  52. sounds.soundTot()
  53. screen.blit(self.bildTot[0], (self.x, self.y))
  54. screen.blit(self.heldDaten.bildtot, (self.heldDaten.x, self.heldDaten.y))
  55. self.heldTot = True
  56. def emotion(self, emo): # Zeigt eine Sprechblase über dem Kopf
  57. screen.blit(emo[self.emotionWechsel], (self.x, self.y - 48))
  58. if time() - self.zeitEmotion >= 0.15: #Animation der Sprechblase
  59. if self.emotionWechsel < 2:
  60. self.emotionWechsel += 1
  61. else:
  62. self.emotionWechsel = 0
  63. self.zeitEmotion = time()