KlasseHeld.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 screen import screen
  22. from KlasseFigur import Figur
  23. from KlasseMagie import Magie
  24. class Held(Figur):
  25. def __init__(self, x, y, geschw, breite, hoehe, level, bildFigur):
  26. super().__init__(x, y, geschw, breite, hoehe, level, bildFigur)
  27. self.bildOben.append(pygame.image.load(f"Bilder/{bildFigur}/HintenS.png"))
  28. self.bildUnten.append(pygame.image.load(f"Bilder/{bildFigur}/VornS.png"))
  29. self.bildRechts.append(pygame.image.load(f"Bilder/{bildFigur}/RechtsS.png"))
  30. self.bildLinks.append(pygame.image.load(f"Bilder/{bildFigur}/LinksS.png"))
  31. self.bildtot = pygame.image.load(f"Bilder/{bildFigur}/tot.png")
  32. self.stehRicht = 0
  33. self.spaceHalten = False
  34. def stehen(self): #Nur der Held kann stehen
  35. if self.stehRicht == 0:
  36. screen.blit(self.bildOben[2], (self.x, self.y))
  37. if self.stehRicht == 1:
  38. screen.blit(self.bildUnten[2], (self.x, self.y))
  39. if self.stehRicht == 2:
  40. screen.blit(self.bildRechts[2], (self.x, self.y))
  41. if self.stehRicht == 3:
  42. screen.blit(self.bildLinks[2], (self.x, self.y))
  43. def steuerung(self):
  44. self.gedrueckt = pygame.key.get_pressed()
  45. if self.gedrueckt[pygame.K_UP]:
  46. self.laufen(0)
  47. self.stehRicht = 0
  48. elif self.gedrueckt[pygame.K_DOWN]:
  49. self.laufen(1)
  50. self.stehRicht = 1
  51. elif self.gedrueckt[pygame.K_RIGHT]:
  52. self.laufen(2)
  53. self.stehRicht = 2
  54. elif self.gedrueckt[pygame.K_LEFT]:
  55. self.laufen(3)
  56. self.stehRicht = 3
  57. else:
  58. self.stehen()
  59. self.schuss()
  60. def schuss(self):
  61. if self.gedrueckt[pygame.K_SPACE] 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
  62. self.kugeln.append(Magie(self.x, self.y, self.stehRicht, "B", 5)) #Magie wird erschaffen
  63. self.schussZaehler += 1
  64. self.spaceHalten = False
  65. if not self.gedrueckt[pygame.K_SPACE]: #Leerzeichen wird losgelassen
  66. self.spaceHalten = True
  67. for k in self.kugeln: #Alle Magiekugeln werden in Bewegung gebracht und Kollision von Hindernissen vernichtet
  68. if not self.hindernis(k.kugelRec):
  69. self.kugeln.remove(k)
  70. k.bewegung()
  71. def neu_Position(self,x_neu, y_neu, level_neu):
  72. self.x = x_neu
  73. self.y = y_neu
  74. self.rechteck = pygame.Rect(self.x, self.y, self.breite, self.hoehe) # Aktualisierung der Rechtecke
  75. self.obenKollision = pygame.Rect(self.x + self.breite / 2 - 2, self.y, 4, 4)
  76. self.untenKollision = pygame.Rect(self.x + self.breite / 2 - 2, self.y + self.hoehe - 4, 4, 4)
  77. self.rechtsKollision = pygame.Rect(self.x + self.breite - 2, self.y + self.hoehe / 2 - 2, 4, 4)
  78. self.linksKollision = pygame.Rect(self.x, self.y + self.hoehe / 2 - 2, 4, 4)
  79. self.kugeln = []
  80. self.level = level_neu