Level2.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
  2. # Level2
  3. # Autor: Viktor Lysow, Johannes Tümler, Wending Huang
  4. # Letzte Änderung: 19.04.2023
  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. # Ende "BLOCK1"
  15. from KlasseLevelmanagement import LevelManagement
  16. import pygame
  17. import sounds
  18. from screen import screen
  19. from hindernisse import feld
  20. from hindernisse import drawLevel2
  21. from time import time
  22. from KlassePrinzessin import Prinzessin
  23. from KlasseHarpyie import Harpyie
  24. from KlasseMonster import Monster
  25. import DatenSammeln as ds # Für den Matlab Beleg
  26. zeitStart = True
  27. zeit = 0
  28. hintergrundLevel = pygame.image.load("Bilder/Karte/Level2.png")
  29. tor = pygame.Rect(3*feld,0,48,48) #Ziel in Level 2
  30. LevelManagement.Level = 2
  31. prinzessin = Prinzessin(x = feld*10, y = feld*3, geschw = 7, breite = feld, hoehe = feld, level = LevelManagement.Level, bildFigur = "Prinzessin", zeitMonster= time())
  32. # display text
  33. pygame.font.init() # you have to call this at the start, if you want to use this module.
  34. myfont = pygame.font.SysFont('Comic Sans MS', 30)
  35. gewonnen = False
  36. def Level2(spieler):
  37. global zeitStart, zeit, gewonnen
  38. def resetLvl2():
  39. global gewonnen, zeitStart
  40. ds.daten_csv(9,len(Monster.monsterListe)) #Level2 Moster Anzahl (für Matlab)
  41. Monster.anzahlGeister = 0
  42. Monster.monsterListe = []
  43. Monster.zeitDupl = 0
  44. prinzessin.reset() #Es wird Alles für die Prinzessin zurück gesetzt
  45. gewonnen = False
  46. zeitStart = True
  47. screen.blit(hintergrundLevel, (0, 0))
  48. if len(Monster.monsterListe) == 0: # falls bereits alle Monster getötet wurden, erstellen wir ein neues Monster für den Neustart des Levels
  49. monster1 = Harpyie(x = feld*4, y = feld*3, geschw = 4, breite = feld, hoehe = feld, level = LevelManagement.Level, bildFigur ="Harpyie", zeitMonster = time())
  50. Monster.monsterListe.append(monster1)
  51. if LevelManagement.debug:
  52. 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
  53. pygame.draw.rect(screen, (255,255,0), (3*feld,0,48,48),0)
  54. pygame.draw.rect(screen, (255,0,255), (prinzessin.x, prinzessin.y, prinzessin.breite, prinzessin.hoehe), 0)
  55. # Tor anzeigen
  56. if LevelManagement.numFrames >= LevelManagement.fpsTarget:
  57. LevelManagement.fpsCurrent = LevelManagement.timeNeeded / LevelManagement.numFrames
  58. LevelManagement.numFrames = 0
  59. LevelManagement.timeNeeded = 0
  60. textsurface = myfont.render("%i fps" % (1000/LevelManagement.fpsCurrent), False, (255, 255, 0))
  61. screen.blit(textsurface,(10,0))
  62. #drawLevel2()
  63. if zeitStart: #Zeit wird ab den ersten aufruf gemäßen (für Matlab)
  64. zeitStart = False
  65. LevelManagement.Level = 2
  66. zeit = time()
  67. prinzessin.mlaufen(spieler)
  68. lebendeMonster = 0
  69. if not gewonnen: # wenn noch nicht gewonnen: aktuelle Anzahl Monster zählen
  70. for dupli in Monster.monsterListe:
  71. if dupli.leben:
  72. lebendeMonster += 1
  73. if lebendeMonster == 0:
  74. gewonnen = True
  75. sounds.soundGewonnen()
  76. for dupli in Monster.monsterListe: #Alle erschaffenen Monster in Bewegung bringen
  77. if LevelManagement.debug:
  78. pygame.draw.rect(screen, (255,0,0), (dupli.x,dupli.y,dupli.breite,dupli.hoehe),0)
  79. pygame.draw.circle(surface = screen, color = (255,0,0), center = (dupli.x,dupli.y), radius = Monster.angriffsradius, width = 2)
  80. if dupli.mlaufen(spieler) or not prinzessin.leben: #mit mlaufen läuft der Boss und es wird überprüft ob der Held getötet wurde
  81. pygame.display.update() #mit mlaufen läuft die Prinzessin und es wird überprüft ob die Prinzessin getötet wurde
  82. pygame.time.wait(1000)
  83. #Monster.reset() #Es wird Alles für den Geist zurück gesetzt
  84. # ich muss kein monster.reset machen, weil ich einfach alle Monster lösche. Damit müssen sie sowieso neu erstellt werden
  85. LevelManagement.Level = 3
  86. #ds.daten_csv(9, round(time() - zeit)) #Zeit für Level3 (für Matlab)
  87. ds.daten_csv(11, 2)
  88. resetLvl2()
  89. return LevelManagement.Level
  90. if spieler.obenKollision.colliderect(tor): #Held muss mit dem Kopf den Eingang berühren
  91. LevelManagement.Level = 4
  92. ds.daten_csv(11, 3) #Nehmen das letzte Level des Spiels auf
  93. for monster in Monster.monsterListe: #Kein Monster mehr da? Wir haben gewonnen.
  94. if monster.leben:
  95. LevelManagement.Level = 3
  96. ds.daten_csv(11, 2) #Nehmen das letzte Level des Spiels auf
  97. break
  98. sounds.soundTor()
  99. pygame.time.wait(500)
  100. #Monster.reset() #Es wird Alles für den Geist zurück gesetzt
  101. # man muss kein monster.reset machen, weil einfach alle Monster gelöscht werden. Damit müssen sie sowieso neu erstellt werden
  102. resetLvl2()
  103. return LevelManagement.Level
  104. else: #Das Level läuft weiter
  105. spieler.steuerung()
  106. return LevelManagement.Level