KlasseHeld.py 5.6 KB

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