KlasseMonster.py 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Monster-Klasse
  3. # Autor: Viktor Lysow, Johannes Tümler
  4. # Letzte Änderung: 30.03.2022
  5. # Zweck: Definition der Monster
  6. #
  7. # Monster erbt Alles von Figur
  8. # Monster können selbst laufen
  9. # Sterben, wenn sie mit der Magie des Helden in Berührung kommen
  10. # können den Helden bei Berührung töten
  11. # Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann.
  12. # Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet.
  13. if __name__=="__main__":
  14. import subprocess
  15. # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach:
  16. #subprocess.call("python3 main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  17. subprocess.call("main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  18. exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei.
  19. # Ende "BLOCK1"
  20. import pygame
  21. from random import randint
  22. from time import time
  23. from KlasseFigur import Figur
  24. from screen import screen
  25. import sounds
  26. class Monster(Figur):
  27. def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster):
  28. super().__init__(x, y, geschw, breite, hoehe, level, bildFigur)
  29. self.xReset = x
  30. self.yReset = y
  31. self.richtung = 1
  32. self.zeitMonster = zeitMonster
  33. self.leben = True
  34. self.heldTot = False
  35. self.feuerWechsel = 0
  36. self.heldDaten = None
  37. self.monsterDaten = None
  38. self.bildTot = [pygame.image.load(f"Bilder/Feuer/F1.png"),
  39. pygame.image.load(f"Bilder/Feuer/F2.png"),
  40. pygame.image.load(f"Bilder/Feuer/F3.png")]
  41. def reset(self):
  42. self.x = self.xReset
  43. self.y = self.yReset
  44. self.leben = True
  45. self.heldTot = False
  46. def mlaufen(self, spieler , monster = None): #Monster können selber laufen
  47. if self.leben:
  48. self.heldDaten = spieler #Alle Daten vom Held werden hier gespeichert
  49. self.monsterDaten = monster #Alle Daten von einem Monster werden hier gespeichert
  50. if time() - self.zeitMonster >= 1: #abhängig von der Zeit
  51. self.richtung = randint(0, 3) #Zufallsrichtung
  52. self.zeitMonster = time()
  53. self.laufen(self.richtung) #Laufen in eine Richtung
  54. self.sterben()
  55. self.faehigkeit()
  56. return self.heldTot #Rückgabe ob der Held tot ist
  57. else:
  58. screen.blit(self.bildTot[self.feuerWechsel], (self.x, self.y)) #Monster brennen, wenn sie tot sind
  59. if time() - self.zeitMonster >= 0.15:
  60. if self.feuerWechsel < 2:
  61. self.feuerWechsel += 1
  62. else:
  63. self.feuerWechsel = 0
  64. self.zeitMonster = time()
  65. def toeten(self): #Held wird getötet bei Kollision
  66. if self.rechteck.colliderect(self.heldDaten.rechteck):
  67. sounds.soundTot()
  68. screen.blit(self.heldDaten.bildtot, (self.heldDaten.x, self.heldDaten.y))
  69. self.heldTot = True
  70. def sterben(self): # Monster ist tot nach der Berührung von der Magie des Helden
  71. for k in self.heldDaten.kugeln:
  72. if self.rechteck.colliderect(k.kugelRec):
  73. self.heldDaten.kugeln.remove(k)
  74. self.leben = False
  75. sounds.soundFeuer()
  76. def faehigkeit(self): #Alle Fähigkeiten von Monster kommen hier rein
  77. self.toeten()