# (c) Hochschule Anhalt, veröffentlicht unter MIT-Lizenz # Hauptprogramm # Autor: Viktor Lysow, Johannes Tümler # Letzte Änderung: 22.04.2022 # Zweck: Steuerung des gesamten Spielablaufs - dieses Programm muss gestartet werden, um das Spiel zu spielen. # # Das Hauptprgramm # hier wird der Held erstellt # Hauptschleife greift auf alle Level zu from KlasseLevelmanagement import LevelManagement import pygame import sys import sounds from time import time from screen import feld from startBild import start from KlasseHeld import Held from Level1 import Level1 from Level2 import Level2 from GameOver import gameOver from GameWin import gameWin from KlasseMonster import Monster from KlassePrinzessin import Prinzessin import DatenSammeln as ds # Für den Matlab Beleg import button zeitmax = 0 #performance test zeit_start_ges = 0 pygame.init() sounds.soundLevel() LevelManagement.Level = 0 screen = pygame.display.set_mode([816, 624]) clock = pygame.time.Clock() pygame.display.set_caption("Dungeon v2024 Hochschule Anhalt, by Johannes Tümler. Initial design by Viktor Lysow") # Sie dürfen sich hier hinzufügen feld = 48 # pixel go = True clock = pygame.time.Clock() if pygame.joystick.get_count() > 0: pygame.joystick.init() #pygame.event.pump() joystick = pygame.joystick.Joystick(0) joystick.init() LevelManagement.joystick = joystick while go: #print(Monster.lebendeMonster, len(Monster.monsterListe)) #if len(Monster.monsterListe) > 0: #print(Monster.monsterListe[0]) LevelManagement.deltaTime = clock.tick(LevelManagement.fpsTarget) # das Spiel soll mit 30-50 fps (Bilder pro Sekunde) laufen # Falls irgendwas komisch läuft (Monster in Wänden, nichts bewegt sich, oder ähnlich) # dann mal das fpsTarget mit kleineren/größeren Werten testen (siehe Klasse LevelManagement) LevelManagement.numFrames += 1 LevelManagement.timeNeeded += LevelManagement.deltaTime zeit = time() for event in pygame.event.get(): if event.type == pygame.QUIT: ds.write_csv() # bisherige Ergebnisse speichern sys.exit() # Beenden elif event.type == pygame.KEYDOWN: # Wenn Escape gedrueckt wird, posten wir ein QUIT-Event in Pygames Event-Warteschlange. if event.key == pygame.K_ESCAPE: pygame.event.post(pygame.event.Event(pygame.QUIT)) screen.fill((0, 0, 0)) if LevelManagement.Level == 0: #Startbildschrim LevelManagement.Level = start() zeit_start_ges =time() #Zeit des Startes vom Spiel (für Matlab) if LevelManagement.Level != 0: # in dem Moment, wo ein Level gestartet wird, erstellen wir die neue Spielfigur spieler1 = Held(x = 582, y = 476, geschw = 4, breite = feld, hoehe = feld, level = 1, bildFigur=button.selectedButton) #Figuren erstellen elif LevelManagement.Level == 1: #Geist LevelManagement.Level = Level1(spieler1) if LevelManagement.Level == 2: # in dem Moment, wo ein Level gestartet wird, erstellen wir die neue Spielfigur prinzessin = Prinzessin(x = feld*10, y = feld*3, geschw = 7, breite = feld, hoehe = feld, level = LevelManagement.Level, bildFigur = "Prinzessin", zeitMonster= time()) elif LevelManagement.Level == 2: #Boss LevelManagement.Level = Level2(spieler1, prinzessin) elif LevelManagement.Level == 3: #Game Over #ds.daten_csv(10, round(time() - zeit_start_ges)) #Gesamt Spielzeit (für Matlab) LevelManagement.Level = gameOver(spieler1) spieler1.neu_Position(582, 476, 1) #Held wird resetet für neues Spiel elif LevelManagement.Level == 4: #Game Won #ds.daten_csv(10, round(time() - zeit_start_ges)) #Gesamt Spielzeit (für Matlab) LevelManagement.Level = gameWin(spieler1) spieler1.neu_Position(582, 476, 1) #Held wird resetet für neues Spiel pygame.display.update() if zeitmax < time() - zeit: #performance Test zeitmax = time() - zeit #print(zeitmax)