KlasseHarpyie.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. class Harpyie(Monster): #erbt vom Monster
  30. def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur, zeitMonster):
  31. super().__init__(x, y, geschw, breite, hoehe, level, bildFigur,zeitMonster)
  32. self.MonsterDupl = Monster #Welche Klasse erschaffen wird
  33. self.dupliList = [] #Liste der erschaffenen Hapyie
  34. self.zeitDupl = zeitMonster
  35. self.anzahlDouble = 1
  36. self.zeitUnsicht = zeitMonster
  37. self.bildUnsicht = [pygame.image.load("Bilder/Harpyie/tot.png"),
  38. pygame.image.load("Bilder/Harpyie/tot.png")]
  39. self.saveBildOben = self.bildOben
  40. self.saveBildUnten = self.bildUnten
  41. self.saveBildRechts = self.bildRechts
  42. self.saveBildLinks = self.bildLinks
  43. self.zeitSpring = zeitMonster
  44. self.Harpyiekugeln = [] #Die Kugelnlist von Hapyie
  45. self.MagieReichtung=0
  46. self.block=True
  47. def reset(self):
  48. self.x = self.xReset
  49. self.y = self.yReset
  50. self.leben = True
  51. self.heldTot = False
  52. self.anzahlDouble = 1
  53. self.dupliList = []
  54. self.Harpyiekugeln = []
  55. def faehigkeit(self): #Fähigkeiten von Hapyie
  56. self.toeten()
  57. self.duplizieren()
  58. self.Magie()
  59. def duplizieren(self): #Codequelle von KlasseGeist
  60. for dupli in self.dupliList: #Alle erschaffenen Hapyie in Bewegung bringen
  61. if dupli.mlaufen(self.heldDaten): #Prüfen ob ein erschaffene Hapyie den Held getötet hat
  62. self.heldTot = True
  63. if time() - self.zeitDupl >= 0.5 * self.anzahlDouble: #Zeit zur Duplezierung wird jedes mal erhöht
  64. 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
  65. self.zeitDupl = time() #Zeit wird wieder auf Null gesetzt
  66. self.anzahlDouble += 1
  67. def Magie(self): #Hapyie kann die Magiekugeln schiessen
  68. if(int(time())%2==0): #Kugelschuss nicht gleichzeitig
  69. if (self.block):
  70. self.Harpyiekugeln.append(Magie(self.x, self.y, self.MagieReichtung, "R", 1))
  71. self.block=False
  72. self.MagieReichtung+=1
  73. if self.MagieReichtung == 8: #kugelschuss in jede Richtungen:8 Kugelnrichungen
  74. self.MagieReichtung=0
  75. else:
  76. self.block=True
  77. for k in self.Harpyiekugeln: #Alle Magiekugeln werden in Bewegung gebracht und Kollision von Hindernissen vernichtet
  78. if not self.hindernis(k.kugelRec):
  79. self.Harpyiekugeln.remove(k)
  80. k.bewegung()
  81. for b in self.heldDaten.kugeln: #Die Kugeln von Held und Hapyie werden vernichtet, wenn sie sich berühren
  82. if k.kugelRec.colliderect(b.kugelRec):
  83. self.heldDaten.kugeln.remove(b)
  84. self.Harpyiekugeln.remove(k)
  85. def sterben(self): # Hapyie ist tot nach der Berührung von der Magie des Helden
  86. for k in self.heldDaten.kugeln:
  87. if self.rechteck.colliderect(k.kugelRec): #Wenn Hapyie gestorben: gewonnen-Sound wird aktiviert
  88. self.heldDaten.kugeln.remove(k) #Codequelle:GameOver und KlasseMonster
  89. self.leben = False
  90. pygame.display.update()
  91. pygame.mixer.music.stop()
  92. pygame.mixer.music.load("Sound/Victory1.wav")
  93. pygame.mixer.music.play(-1, 0.0)
  94. pygame.mixer.music.set_volume(1)