-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain.py
More file actions
124 lines (99 loc) · 3.23 KB
/
Copy pathMain.py
File metadata and controls
124 lines (99 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# ==============================================================================
#
# WICHTIG: ZUM AUSFUEHREN WIRD DAS MODUL "pygame" BENOETIGT!
#
# ==============================================================================
#
# Steuerung:
# Rotation links / rechts: A / D
# Boost: W
# Schuss: Leertaste
# Menue: Esc
#
# Ziel des Spiels ist es, so viele Asteroiden wie moeglich zu zerstoeren, ohne
# dabei selbst Schaden zu nehmen.
#
# Die farbigen PowerUps koennen hierbei behilflich sein.
#
# ==============================================================================
import pygame
from src.EventHandler import EventHandler
from src.Menu import Menu
from src.Game import Game
from src.Highscores import Highscores
from src.GameOver import GameOver
# Pygame initialisieren
pygame.init()
# ==============================================================================
screenSize = (1280, 720)
screen = pygame.display.set_mode(screenSize)
eventHandler = EventHandler()
highscores = Highscores("./resources/highscores.dat")
menu = Menu(screenSize, eventHandler)
game = Game(screenSize, eventHandler, highscores.highscore)
gameOver = GameOver(screenSize, eventHandler)
clock = pygame.time.Clock()
# ==============================================================================
while eventHandler.windowActive:
# Events abhandeln
eventHandler.handleEvents()
if eventHandler.pressed_Esc:
highscores.active = False
gameOver.active = False
game.state = Game.GameStates.inactive
menu.reload()
if menu.active:
# Menue aktualisieren
menu.update()
# Menueauswahl
if menu.selection == Menu.MenuSelection.resumeGame:
game.resume()
elif menu.selection == Menu.MenuSelection.startNewGame:
# Spiel neu starten
# Nicht ideal, besser waere das vorhandene Game Objekt auf einen Ausgangszustand zurueckzusetzen
# TODO: better restart
game = Game(screenSize, eventHandler, highscores.highscore)
game.state = Game.GameStates.active
elif menu.selection == Menu.MenuSelection.highscores:
highscores.active = True
elif menu.selection == Menu.MenuSelection.quit:
eventHandler.windowActive = False
# Menue zeichnen
menu.draw(screen)
elif highscores.active:
# Highscores
highscores.draw(screen)
elif game.state == Game.GameStates.active:
# Spiellogik
game.update()
# Rendern
game.draw(screen)
elif game.state == Game.GameStates.over:
# Game Over -> Score mit Highscores vergleichen
if highscores.addScore(game.player.score):
gameOver.newHighscore(game.player.score)
else:
gameOver.newHighscore(False)
game.state = Game.GameStates.inactive
gameOver.active = True
elif game.state == Game.GameStates.ended:
# Game Over -> Score nicht mit Highscores vergleichen
game.state = Game.GameStates.inactive
gameOver.active = True
elif gameOver.active:
# Game Over Screen
if pygame.time.get_ticks() - gameOver.timeUpdated > GameOver.displayDelay and eventHandler.pressed_Any:
gameOver.active = False
menu.reload()
gameOver.draw(screen)
# Fenster aktualisieren
pygame.display.flip()
# Refreshrate
clock.tick(60)
# FPS Anzeige
title = "Asteroids" \
+ f" | Frame Time: {clock.get_rawtime()} ms" \
+ f" | FPS: {clock.get_fps() : 6.1f}"
pygame.display.set_caption(title)
# Spiel beenden
pygame.quit()