-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.py
More file actions
134 lines (110 loc) · 4.28 KB
/
Copy pathgame.py
File metadata and controls
134 lines (110 loc) · 4.28 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
125
126
127
128
129
130
131
132
133
134
import pygame
from utils import WaitTimer
from States.play_state import PlayState
from States.menu_state import MenuState, States
from States.additional_states import Pause, BasicState, WinState, WonLevel
SCREEN = (1000, 600)
FIRST_LEVEL = 1
class Game:
def __init__(self):
pygame.mixer.pre_init(44100, -16, 3, 512)
pygame.init()
pygame.mixer.init()
self.level = FIRST_LEVEL
self.EXIT = False
self.screen = pygame.display.set_mode(SCREEN)
self.clock = pygame.time.Clock()
self.win_state = WinState(SCREEN)
self.pause_state = Pause(SCREEN)
self.menu_state = MenuState(SCREEN)
self.won_level_state = WonLevel(SCREEN)
self.game_over_state = BasicState(SCREEN, "Images/game_over.png", States.GAME_OVER)
self.timer = WaitTimer()
self.play_state = PlayState(SCREEN, self.level, self.timer)
self.state = States.MENU
def basic_input(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.EXIT = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_ESCAPE:
if self.state == States.PAUSE:
self.state = States.GAME
elif self.state == States.GAME:
self.state = States.PAUSE
def print_wait(self):
font = pygame.font.Font(None, 48)
text = font.render("Wait", True, (255, 255, 255))
if self.timer.is_running:
self.screen.blit(text,
(SCREEN[0] / 2 - text.get_width() / 2,
SCREEN[1] / 2 - text.get_height() / 2))
def print_level(self):
font = pygame.font.Font(None, 48)
text = font.render("Level: " + str(self.level), True, (255, 255, 255))
self.screen.blit(text,
(SCREEN[0] - text.get_width() - 10, 10))
def exit(self):
self.EXIT = True
def game(self):
self.state = self.play_state.update()
self.play_state.draw(self.screen)
self.timer.update()
self.print_level()
self.print_wait()
def menu(self):
self.state = self.menu_state.update()
self.menu_state.draw(self.screen)
def pause(self):
self.play_state.draw(self.screen)
self.state = self.pause_state.update()
self.pause_state.draw(self.screen)
def retry(self):
self.play_state = PlayState(SCREEN, self.level, self.timer)
self.state = States.GAME
def victory(self):
self.play_state.draw(self.screen)
self.state = self.win_state.update()
self.win_state.draw(self.screen)
def game_over(self):
self.play_state.animation()
self.play_state.draw(self.screen)
self.state = self.game_over_state.update()
self.game_over_state.draw(self.screen)
def won_level(self):
self.play_state.animation()
self.play_state.draw(self.screen)
self.state = self.won_level_state.update()
self.won_level_state.draw(self.screen)
def go_to_menu(self):
self.level = FIRST_LEVEL
self.play_state = PlayState(SCREEN, self.level, self.timer)
self.state = States.MENU
def next_level(self):
self.level += 1
self.timer.start()
self.play_state = PlayState(SCREEN, self.level, self.timer)
self.state = States.GAME
def main(self):
pygame.mixer.music.load("Sounds/background_music")
pygame.mixer.music.play(-1)
do_state = {States.EXIT: self.exit,
States.GAME: self.game,
States.MENU: self.menu,
States.PAUSE: self.pause,
States.RETRY: self.retry,
States.VICTORY: self.victory,
States.GAME_OVER: self.game_over,
States.WON_LEVEL: self.won_level,
States.GO_TO_MENU: self.go_to_menu,
States.NEXT_LEVEL: self.next_level}
while not self.EXIT:
self.screen.fill((0, 0, 0))
self.basic_input()
do_state[self.state]()
pygame.display.update()
self.clock.tick(60)
game = Game()
game.main()
pygame.quit()
quit()