KlasseHarpyie.py 5.7 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
  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()