Level2.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Level2
  3. # Autor: Viktor Lysow, Johannes Tümler
  4. # Letzte Änderung: 22.04.2022
  5. # Zweck: Organisation und Steuerung des zweiten Levels
  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. from KlasseLevelmanagement import LevelManagement
  17. import pygame
  18. import sounds
  19. from screen import screen
  20. from screen import feld
  21. from screen import feldHalbe
  22. from screen import myfont
  23. from hindernisse import drawLevel2
  24. from time import time
  25. from KlassePrinzessin import Prinzessin
  26. from KlasseHarpyie import Harpyie
  27. from KlasseMonster import Monster
  28. import DatenSammeln as ds # Für den Matlab Beleg
  29. # display text
  30. gewonnen = False
  31. zeitStart = True
  32. LevelManagement.Level = 2
  33. hintergrundLevel = pygame.image.load("Bilder/Karte/Level2.png")
  34. tor = pygame.Rect(3*feld,0,48,48) #Ziel in Level 2
  35. def Level2(spieler, prinzessin):
  36. global gewonnen, zeitStart
  37. def resetLvl2():
  38. global gewonnen, zeitStart
  39. ds.daten_csv(9,len(Monster.monsterListe)) #Level2 Moster Anzahl (für Matlab)
  40. Monster.monsterListe = []
  41. Monster.lebendeMonster = 0
  42. Monster.zeitDupl = time()
  43. prinzessin.reset() #Es wird Alles für die Prinzessin zurück gesetzt
  44. gewonnen = False
  45. zeitStart = True
  46. screen.blit(hintergrundLevel, (0, 0))
  47. if len(Monster.monsterListe) == 0: # falls bereits alle Monster getötet wurden, erstellen wir ein neues Monster für den Neustart des Levels
  48. Harpyie() # Hier Parameter anpassen
  49. if LevelManagement.debug:
  50. pygame.draw.rect(screen, (0,255,0), (spieler.x,spieler.y,spieler.breite,spieler.hoehe),0) # Zeile aktivieren, falls man die Kollisionsboxen der Monster sichtbar machen möchte
  51. pygame.draw.rect(screen, (255,255,0), (3*feld,0,48,48),0)
  52. pygame.draw.rect(screen, (255,0,255), (prinzessin.x, prinzessin.y, prinzessin.breite, prinzessin.hoehe), 0)
  53. pygame.draw.rect(screen,(128,0,255), (spieler.x + spieler.breite / 2 - 2, spieler.y, 4, 4))
  54. pygame.draw.rect(screen,(128,0,255), (spieler.x + spieler.breite / 2 - 2, spieler.y + spieler.hoehe - 4, 4, 4))
  55. pygame.draw.rect(screen,(128,0,255), (spieler.x + spieler.breite - 2, spieler.y + spieler.hoehe / 2 - 2, 4, 4))
  56. pygame.draw.rect(screen,(128,0,255), (spieler.x, spieler.y + spieler.hoehe / 2 - 2, 4, 4))
  57. if LevelManagement.numFrames >= LevelManagement.fpsTarget:
  58. LevelManagement.fpsCurrent = LevelManagement.timeNeeded / LevelManagement.numFrames
  59. LevelManagement.numFrames = 0
  60. LevelManagement.timeNeeded = 0
  61. textsurface = myfont.render("%i fps" % (1000/LevelManagement.fpsCurrent), False, (255, 255, 0))
  62. screen.blit(textsurface,(10,0))
  63. #drawLevel2()
  64. if zeitStart: #Zeit wird ab den ersten aufruf gemäßen (für Matlab)
  65. zeitStart = False
  66. prinzessin.mlaufen(spieler)
  67. if Monster.lebendeMonster == 0 and not gewonnen: # wenn noch nicht gewonnen: Gewonnen-Sound abspielen
  68. sounds.soundGewonnen()
  69. gewonnen = True
  70. for dupli in Monster.monsterListe: #Alle erschaffenen Monster in Bewegung bringen
  71. if LevelManagement.debug:
  72. pygame.draw.rect(screen, (255,0,0), (dupli.x,dupli.y,dupli.breite,dupli.hoehe),0)
  73. pygame.draw.circle(surface = screen, color = (255,0,0), center = (dupli.x + feldHalbe,dupli.y + feldHalbe), radius = Monster.angriffsradius, width = 2)
  74. pygame.draw.rect(screen,(128,255,0), (dupli.x + dupli.breite / 2 - 2, dupli.y, 4, 4))
  75. pygame.draw.rect(screen,(128,255,0), (dupli.x + dupli.breite / 2 - 2, dupli.y + dupli.hoehe - 4, 4, 4))
  76. pygame.draw.rect(screen,(128,255,0), (dupli.x + dupli.breite - 2, dupli.y + dupli.hoehe / 2 - 2, 4, 4))
  77. pygame.draw.rect(screen,(128,255,0), (dupli.x, dupli.y + dupli.hoehe / 2 - 2, 4, 4))
  78. if dupli.mlaufen(spieler) or not prinzessin.leben: #mit mlaufen läuft der Boss und es wird überprüft ob die Prinzessin noch lebt
  79. pygame.display.update() #mit mlaufen läuft die Prinzessin und es wird überprüft ob die Prinzessin getötet wurde
  80. pygame.time.wait(1000)
  81. LevelManagement.Level = 3
  82. #ds.daten_csv(9, round(time() - zeit)) #Zeit für Level3 (für Matlab)
  83. ds.daten_csv(11, 2)
  84. resetLvl2()
  85. return LevelManagement.Level
  86. if spieler.obenKollision.colliderect(tor): #Held muss mit dem Kopf den Eingang berühren
  87. LevelManagement.Level = 4
  88. ds.daten_csv(11, 3) #Nehmen das letzte Level des Spiels auf
  89. for monster in Monster.monsterListe: #Kein Monster mehr da? Wir haben gewonnen.
  90. if monster.leben:
  91. LevelManagement.Level = 3
  92. ds.daten_csv(11, 2) #Nehmen das letzte Level des Spiels auf
  93. break
  94. sounds.soundTor()
  95. pygame.time.wait(500)
  96. resetLvl2()
  97. return LevelManagement.Level
  98. else: #Das Level läuft weiter
  99. spieler.steuerung()
  100. return LevelManagement.Level