KlasseHarpyie.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Figur-Klasse
  3. # Autor: Johannes Tümler
  4. # Letzte Änderung: 12.04.2022
  5. # Zweck: Figur-Entität definieren
  6. #
  7. # Harpyie erbt Alles von Monster
  8. # können den Held bei Berührung töten
  9. # Harpyie kann in alle 4 Himmelrichtungen schießen, nacheinander pro Richtung (nicht zugleich)
  10. # Harpyie kann seitwärts schießen
  11. # Harpyie kann in alle Richtungen bewegen
  12. # Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann.
  13. # Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet.
  14. if __name__=="__main__":
  15. import subprocess
  16. # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach:
  17. #subprocess.call("python3 main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  18. subprocess.call("main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  19. exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei.
  20. # Ende "BLOCK1"
  21. from re import I
  22. import pygame
  23. from KlasseMonster import Monster
  24. from time import time
  25. from random import randint
  26. from KlasseMagie import Magie
  27. from KlasseHeld import Held
  28. import sounds #Die Quelle von Sounds Von Gamewin
  29. from sounds import soundGewonnen
  30. class Harpyie(Monster): #erbt vom Monster
  31. def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster):
  32. super().__init__(x, y, geschw, breite, hoehe, level, bildFigur,zeitMonster)
  33. self.MonsterDupl = Monster #Welche Klasse erschaffen wird
  34. self.dupliList = [] #Liste der erschaffenen Hapyie
  35. self.zeitDupl = zeitMonster
  36. self.anzahlDouble = 1
  37. self.zeitUnsicht = zeitMonster
  38. self.bildUnsicht = [pygame.image.load("Bilder/Harpyie/tot.png"),
  39. pygame.image.load("Bilder/Harpyie/tot.png")]
  40. self.saveBildOben = self.bildOben
  41. self.saveBildUnten = self.bildUnten
  42. self.saveBildRechts = self.bildRechts
  43. self.saveBildLinks = self.bildLinks
  44. self.zeitSpring = zeitMonster
  45. self.Harpyiekugeln = [] #Die Kugelnlist von Hapyie
  46. self.MagieReichtung=0
  47. self.block=True
  48. def reset(self):
  49. self.x = self.xReset
  50. self.y = self.yReset
  51. self.leben = True
  52. self.heldTot = False
  53. self.anzahlDouble = 1
  54. self.dupliList = []
  55. self.Harpyiekugeln = []
  56. def faehigkeit(self): #Fähigkeiten von Hapyie
  57. self.toeten()
  58. self.duplizieren()
  59. self.Magie()
  60. def duplizieren(self): #Codequelle von KlasseGeist
  61. for dupli in self.dupliList: #Alle erschaffenen Hapyie in Bewegung bringen
  62. if dupli.mlaufen(self.heldDaten): #Prüfen ob ein erschaffene Hapyie den Held getötet hat
  63. self.heldTot = True
  64. if time() - self.zeitDupl >= 0.5 * self.anzahlDouble: #Zeit zur Duplezierung wird jedes mal erhöht
  65. 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
  66. self.zeitDupl = time() #Zeit wird wieder auf Null gesetzt
  67. self.anzahlDouble += 1
  68. def Magie(self): #Hapyie kann die Magiekugeln schiessen
  69. if(int(time())%2==0): #Kugelschuss nicht gleichzeitig
  70. if (self.block):
  71. self.Harpyiekugeln.append(Magie(self.x, self.y, self.MagieReichtung, "R", 1))
  72. self.block=False
  73. self.MagieReichtung+=1
  74. if self.MagieReichtung == 8: #kugelschuss in jede Richtungen:8 Kugelnrichungen
  75. self.MagieReichtung=0
  76. else:
  77. self.block=True
  78. for k in self.Harpyiekugeln: #Alle Magiekugeln werden in Bewegung gebracht und Kollision von Hindernissen vernichtet
  79. if not self.hindernis(k.kugelRec):
  80. self.Harpyiekugeln.remove(k)
  81. k.bewegung()
  82. for b in self.heldDaten.kugeln: #Die Kugeln von Held und Hapyie werden vernichtet, wenn sie sich berühren
  83. if k.kugelRec.colliderect(b.kugelRec):
  84. self.heldDaten.kugeln.remove(b)
  85. self.Harpyiekugeln.remove(k)
  86. def sterben(self): # Hapyie ist tot nach der Berührung von der Magie des Helden
  87. for k in self.heldDaten.kugeln:
  88. if self.rechteck.colliderect(k.kugelRec): #Wenn Hapyie gestorben: gewonnen-Sound wird aktiviert
  89. self.heldDaten.kugeln.remove(k) #Codequelle:GameOver und KlasseMonster
  90. self.leben = False
  91. soundGewonnen()