KlasseHeld.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Held-Klasse
  3. # Autor: Viktor Lysow
  4. # Letzte Änderung: 30.03.2022
  5. # Zweck: Held-Entität definieren
  6. #
  7. # Held erbt Alles von Figur
  8. # Held kann stehen und nicht laufen
  9. # Held wird mit Steuerkreuz/Pfeiltasten gesteuert
  10. # Held kann mit Leerzeichen in seine Guckrichtung schießen
  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. # 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.
  20. # Ende "BLOCK1"
  21. import pygame
  22. from KlasseLevelmanagement import LevelManagement
  23. from screen import screen
  24. from KlasseFigur import Figur
  25. from KlasseMagie import Magie
  26. from KlasseMonster import Monster
  27. class Held(Figur):
  28. def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur):
  29. super().__init__(x, y, geschw, breite, hoehe, level, bildFigur)
  30. self.bildOben.append(pygame.image.load(f"Bilder/{bildFigur}/HintenS.png"))
  31. self.bildUnten.append(pygame.image.load(f"Bilder/{bildFigur}/VornS.png"))
  32. self.bildRechts.append(pygame.image.load(f"Bilder/{bildFigur}/RechtsS.png"))
  33. self.bildLinks.append(pygame.image.load(f"Bilder/{bildFigur}/LinksS.png"))
  34. self.bildtot = pygame.image.load(f"Bilder/{bildFigur}/tot.png")
  35. self.stehRicht = 0
  36. self.spaceHalten = False
  37. self.letzterSchuss = 0
  38. def stehen(self): #Nur der Held kann stehen
  39. if self.stehRicht == 0:
  40. screen.blit(self.bildOben[2], (self.x, self.y))
  41. if self.stehRicht == 1:
  42. screen.blit(self.bildUnten[2], (self.x, self.y))
  43. if self.stehRicht == 2:
  44. screen.blit(self.bildRechts[2], (self.x, self.y))
  45. if self.stehRicht == 3:
  46. screen.blit(self.bildLinks[2], (self.x, self.y))
  47. def steuerung(self):
  48. self.gedrueckt = pygame.key.get_pressed()
  49. if self.gedrueckt[pygame.K_UP]:
  50. self.laufen(0)
  51. self.stehRicht = 0
  52. elif self.gedrueckt[pygame.K_DOWN]:
  53. self.laufen(1)
  54. self.stehRicht = 1
  55. elif self.gedrueckt[pygame.K_RIGHT]:
  56. self.laufen(2)
  57. self.stehRicht = 2
  58. elif self.gedrueckt[pygame.K_LEFT]:
  59. self.laufen(3)
  60. self.stehRicht = 3
  61. else:
  62. self.stehen()
  63. self.schuss()
  64. # hidden evil hack
  65. if self.gedrueckt[pygame.K_x]:
  66. for m in Monster.monsterListe:
  67. if (m.leben):
  68. m.leben = False
  69. Monster.lebendeMonster -= 1
  70. if LevelManagement.joystick != None:
  71. if LevelManagement.joystick.get_axis(LevelManagement.joystickXAchse) > 0.1: # 0.1 anstelle von 0, weil die analogen Joystickachsen of nicht auf "exakt 0" stehen
  72. self.laufen(2)
  73. self.stehRicht = 2
  74. elif LevelManagement.joystick.get_axis(LevelManagement.joystickXAchse) < -0.1:
  75. self.laufen(3)
  76. self.stehRicht = 3
  77. if LevelManagement.joystick.get_axis(LevelManagement.joystickYAchse) > 0.1: # 0.1 anstelle von 0, weil die analogen Joystickachsen of nicht auf "exakt 0" stehen
  78. self.laufen(1)
  79. self.stehRicht = 1
  80. elif LevelManagement.joystick.get_axis(LevelManagement.joystickYAchse) < -0.1:
  81. self.laufen(0)
  82. self.stehRicht = 0
  83. def schuss(self):
  84. if (self.gedrueckt[pygame.K_SPACE] or (LevelManagement.joystick != None and LevelManagement.joystick.get_button(LevelManagement.joystickFireButton))) and self.spaceHalten and len(self.kugeln) <= 3: # Leerzeichen wird nur pro Tastenschlag gezählt und es dürfen nicht mehr als 4 Magiekugeln existieren
  85. self.kugeln.append(Magie(self.x, self.y, self.stehRicht, "B", 5)) #Magie wird erschaffen
  86. self.schussZaehler += 1
  87. self.spaceHalten = False
  88. if not (self.gedrueckt[pygame.K_SPACE] or (LevelManagement.joystick != None and LevelManagement.joystick.get_button(LevelManagement.joystickFireButton))): #Leerzeichen wird losgelassen
  89. self.spaceHalten = True
  90. for k in self.kugeln: #Alle Magiekugeln werden in Bewegung gebracht und Kollision von Hindernissen vernichtet
  91. if not self.hindernis(k.waffeRec):
  92. self.kugeln.remove(k)
  93. k.bewegung()
  94. def neu_Position(self,x_neu, y_neu, level_neu):
  95. self.x = x_neu
  96. self.y = y_neu
  97. self.rechteck = pygame.Rect(self.x, self.y, self.breite, self.hoehe) # Aktualisierung der Rechtecke
  98. self.obenKollision = pygame.Rect(self.x + self.breite / 2 - 2, self.y, 4, 4)
  99. self.untenKollision = pygame.Rect(self.x + self.breite / 2 - 2, self.y + self.hoehe - 4, 4, 4)
  100. self.rechtsKollision = pygame.Rect(self.x + self.breite - 2, self.y + self.hoehe / 2 - 2, 4, 4)
  101. self.linksKollision = pygame.Rect(self.x, self.y + self.hoehe / 2 - 2, 4, 4)
  102. self.kugeln = []
  103. self.level = level_neu