KlasseWaffe.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Waffen-Klasse
  3. # Autor: Johannes Tümler und Viktor Lysow
  4. # Letzte Änderung: 12.08.2022
  5. # Zweck: Oberklasse für alle Waffen, definiert Standard-Verhalten
  6. # Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann.
  7. # Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet.
  8. if __name__=="__main__":
  9. import subprocess
  10. # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach:
  11. #subprocess.call("python3 main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  12. subprocess.call("main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
  13. exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei.
  14. # 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.
  15. # Ende "BLOCK1"
  16. import pygame
  17. from screen import screen
  18. from time import time
  19. from KlasseLevelmanagement import LevelManagement
  20. class Waffe:
  21. def __init__(self, x, y, richtung, geschw):
  22. self.x = x
  23. self.y = y
  24. self.richtung = richtung
  25. self.zeit = time()
  26. self.geschw = geschw
  27. # falls das Spiel bei Ihnen zu langsam / zu schnell läuft, ändern Sie die nachfolgende Zeile:
  28. self.geschw_FPS_trick = self.geschw * (30 / LevelManagement.fpsTarget) # hier mit der "30" experimentieren, falls nötig
  29. self.waffeRec = pygame.Rect(self.x + 12 , self.y +12, 24, 24)
  30. self.bildbewegung = 2
  31. self.bildWaffe = []
  32. self.bewegung()
  33. def bewegung(self):
  34. if self.richtung == 0: #oben
  35. self.y -= self.geschw_FPS_trick
  36. elif self.richtung == 1: #unten
  37. self.y += self.geschw_FPS_trick
  38. elif self.richtung == 2: #rechts
  39. self.x += self.geschw_FPS_trick
  40. elif self.richtung == 3: #links
  41. self.x -= self.geschw_FPS_trick
  42. elif self.richtung == 4: #oben links Bonus!!!!
  43. self.y -= self.geschw_FPS_trick
  44. self.x -= self.geschw_FPS_trick
  45. elif self.richtung == 5: #oben rechts Bonus!!!!
  46. self.y -= self.geschw_FPS_trick
  47. self.x += self.geschw_FPS_trick
  48. elif self.richtung == 6: #unten links Bonus!!!!
  49. self.y += self.geschw_FPS_trick
  50. self.x -= self.geschw_FPS_trick
  51. elif self.richtung == 7: #unten rechts Bonus!!!!
  52. self.y += self.geschw_FPS_trick
  53. self.x += self.geschw_FPS_trick
  54. self.zeichnen()
  55. if self.richtung == -1: # wir löschen uns selbst
  56. del(self)
  57. def zeichnen(self): # Bilder werden alle 0.1 Sekunden ausgetauscht
  58. if time() - self.zeit >= 0.25:
  59. self.zeit = time()
  60. self.bildbewegung += 1
  61. if self.bildbewegung >= 3:
  62. self.bildbewegung = 0
  63. if len(self.bildWaffe) > 0:
  64. screen.blit(self.bildWaffe[self.bildbewegung], (self.x, self.y))
  65. self.waffeRec = pygame.Rect(self.x + 12, self.y + 12, 24, 24) #Axt ist halb so groß wie das Bild
  66. if LevelManagement.debug:
  67. pygame.draw.rect(screen, (0,0,255), (self.x + 12, self.y + 12, 24, 24), 0) # Zeile aktivieren, falls man die Kollisionsboxen der Monster sichtbar machen möchte