123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- # (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz
- # Level2
- # Autor: Viktor Lysow, Johannes Tümler
- # Letzte Änderung: 22.04.2022
- # Zweck: Organisation und Steuerung des zweiten Levels
-
-
- # Der Nachfolgende Codeblock "BLOCK1" sorgt dafür, dass man aus jeder Datei heraus das Hauptprogramm starten kann.
- # Dadurch kann man in jeder Datei auf "play" drücken und es wird automatisch main.py gestartet.
- if __name__=="__main__":
- import subprocess
- # Auf Linux oder Mac aktivieren Sie die folgende Zeile und deaktivieren Sie die Zeile danach:
- #subprocess.call("python3 main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
- subprocess.call("main.py", shell=True) # die richtige Main-Datei aufrufen (unser eigentliches Hauptprogramm)
- exit(0) # nun das Programm hier beenden .. wir wollen ja nur das Hauptprogramm starten und nicht *diese* Datei.
- # 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.
- # Ende "BLOCK1"
- from KlasseLevelmanagement import LevelManagement
- import pygame
- import sounds
- from screen import screen
- from screen import feld
- from screen import feldHalbe
- from screen import myfont
- from hindernisse import drawLevel2
- from time import time
- from KlassePrinzessin import Prinzessin
- from KlasseHarpyie import Harpyie
- from KlasseMonster import Monster
- import DatenSammeln as ds # Für den Matlab Beleg
- # display text
- gewonnen = False
- zeitStart = True
- LevelManagement.Level = 2
- hintergrundLevel = pygame.image.load("Bilder/Karte/Level2.png")
- tor = pygame.Rect(3*feld,0,48,48) #Ziel in Level 2
- def Level2(spieler, prinzessin):
- global gewonnen, zeitStart
- def resetLvl2():
- global gewonnen, zeitStart
- ds.daten_csv(9,len(Monster.monsterListe)) #Level2 Moster Anzahl (für Matlab)
- Monster.monsterListe = []
- Monster.lebendeMonster = 0
- Monster.zeitDupl = time()
- prinzessin.reset() #Es wird Alles für die Prinzessin zurück gesetzt
- gewonnen = False
- zeitStart = True
-
- screen.blit(hintergrundLevel, (0, 0))
- if len(Monster.monsterListe) == 0: # falls bereits alle Monster getötet wurden, erstellen wir ein neues Monster für den Neustart des Levels
- Harpyie() # Hier Parameter anpassen
-
- if LevelManagement.debug:
- 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
- pygame.draw.rect(screen, (255,255,0), (3*feld,0,48,48),0)
- pygame.draw.rect(screen, (255,0,255), (prinzessin.x, prinzessin.y, prinzessin.breite, prinzessin.hoehe), 0)
- pygame.draw.rect(screen,(128,0,255), (spieler.x + spieler.breite / 2 - 2, spieler.y, 4, 4))
- pygame.draw.rect(screen,(128,0,255), (spieler.x + spieler.breite / 2 - 2, spieler.y + spieler.hoehe - 4, 4, 4))
- pygame.draw.rect(screen,(128,0,255), (spieler.x + spieler.breite - 2, spieler.y + spieler.hoehe / 2 - 2, 4, 4))
- pygame.draw.rect(screen,(128,0,255), (spieler.x, spieler.y + spieler.hoehe / 2 - 2, 4, 4))
- if LevelManagement.numFrames >= LevelManagement.fpsTarget:
- LevelManagement.fpsCurrent = LevelManagement.timeNeeded / LevelManagement.numFrames
- LevelManagement.numFrames = 0
- LevelManagement.timeNeeded = 0
- textsurface = myfont.render("%i fps" % (1000/LevelManagement.fpsCurrent), False, (255, 255, 0))
- screen.blit(textsurface,(10,0))
- #drawLevel2()
- if zeitStart: #Zeit wird ab den ersten aufruf gemäßen (für Matlab)
- zeitStart = False
- prinzessin.mlaufen(spieler)
- if Monster.lebendeMonster == 0 and not gewonnen: # wenn noch nicht gewonnen: Gewonnen-Sound abspielen
- sounds.soundGewonnen()
- gewonnen = True
- for dupli in Monster.monsterListe: #Alle erschaffenen Monster in Bewegung bringen
- if LevelManagement.debug:
- pygame.draw.rect(screen, (255,0,0), (dupli.x,dupli.y,dupli.breite,dupli.hoehe),0)
- pygame.draw.circle(surface = screen, color = (255,0,0), center = (dupli.x + feldHalbe,dupli.y + feldHalbe), radius = Monster.angriffsradius, width = 2)
- pygame.draw.rect(screen,(128,255,0), (dupli.x + dupli.breite / 2 - 2, dupli.y, 4, 4))
- pygame.draw.rect(screen,(128,255,0), (dupli.x + dupli.breite / 2 - 2, dupli.y + dupli.hoehe - 4, 4, 4))
- pygame.draw.rect(screen,(128,255,0), (dupli.x + dupli.breite - 2, dupli.y + dupli.hoehe / 2 - 2, 4, 4))
- pygame.draw.rect(screen,(128,255,0), (dupli.x, dupli.y + dupli.hoehe / 2 - 2, 4, 4))
- if dupli.mlaufen(spieler) or not prinzessin.leben: #mit mlaufen läuft der Boss und es wird überprüft ob die Prinzessin noch lebt
- pygame.display.update() #mit mlaufen läuft die Prinzessin und es wird überprüft ob die Prinzessin getötet wurde
- pygame.time.wait(1000)
- LevelManagement.Level = 3
- #ds.daten_csv(9, round(time() - zeit)) #Zeit für Level3 (für Matlab)
- ds.daten_csv(11, 2)
- resetLvl2()
- return LevelManagement.Level
-
- if spieler.obenKollision.colliderect(tor): #Held muss mit dem Kopf den Eingang berühren
- LevelManagement.Level = 4
- ds.daten_csv(11, 3) #Nehmen das letzte Level des Spiels auf
- for monster in Monster.monsterListe: #Kein Monster mehr da? Wir haben gewonnen.
- if monster.leben:
- LevelManagement.Level = 3
- ds.daten_csv(11, 2) #Nehmen das letzte Level des Spiels auf
- break
- sounds.soundTor()
- pygame.time.wait(500)
- resetLvl2()
- return LevelManagement.Level
- else: #Das Level läuft weiter
- spieler.steuerung()
- return LevelManagement.Level
|