-
Notifications
You must be signed in to change notification settings - Fork 0
/
game.py
146 lines (115 loc) · 4.14 KB
/
game.py
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
135
136
137
138
139
140
141
142
143
#!/usr/bin/env python
#coding: utf8
import pygame
from game_state import GameState
from gameboard import GameBoard
from menus.scoreboard import ScoreBoard
from menus.top_menu import TopMenu
from menus.main_menu import MainMenu
from scoremanager import ScoreManager
from menus.game_over_menu import GameOverMenu
WINDOW_WIDTH = 720#1080
WINDOW_HEIGHT = 600#900
GAME_SIZE = int(WINDOW_WIDTH * 0.70)
FPS = 60
LEFT_KEY = pygame.K_UP#pygame.K_LEFT#
RIGHT_KEY = pygame.K_RETURN#pygame.K_RIGHT#
MODE = 0#pygame.FULLSCREEN
DEBUG = True
DB_FILE = "scoreboard.sqlite"
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
class Game:
controls_reversed = False
score = 0
time_passed = 0
done = False
screen = None
obstacle_manager = None
gameboard = None
scoreboard = None
topmenu = None
gameovermenu = None
state = GameState.MainMenu
pump = None
school_id = 1
score_increment = 1
def __init__(self, pump):
pygame.init()
self.clock = pygame.time.Clock()
self.score_manager = ScoreManager(DB_FILE)
self.pump = pump
def start(self):
self.screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT), MODE)
self.gameboard = GameBoard((GAME_SIZE, GAME_SIZE), self)
self.scoreboard = ScoreBoard((WINDOW_WIDTH - GAME_SIZE, WINDOW_HEIGHT), self.score_manager)
self.topmenu = TopMenu((GAME_SIZE, WINDOW_HEIGHT - GAME_SIZE))
self.mainmenu = MainMenu((WINDOW_WIDTH, WINDOW_HEIGHT), self)
self.gameovermenu = GameOverMenu((WINDOW_WIDTH, WINDOW_HEIGHT), self)
while not self.done:
key = pygame.key.get_pressed()
left, right = self._get_movement(key)
#if key[pygame.K_ESCAPE]:
# self.done = True
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.done = True
if self.state == GameState.Running:
self._tick(left, right)
elif self.state == GameState.MainMenu:
self._main_menu_tick(left, right)
elif self.state == GameState.GameOver:
self._game_over_tick()
pygame.display.flip()
self.time_passed = self.clock.tick(FPS)
pygame.quit()
def reverse_controls(self, reversed):
self.controls_reversed = reversed
def _get_movement(self, key):
left = key[LEFT_KEY] == 1
right = key[RIGHT_KEY] == 1
if self.controls_reversed:
left = not left
right = not right
return left, right
def _main_menu_tick(self, select, switch):
self.mainmenu.update(select, switch)
self.screen.blit(self.mainmenu.render(), (0, 0))
def _game_over_tick(self):
self.screen.blit(self.gameovermenu.render(), (0,0))
def _tick(self, left, right):
direction = 0
if not (left and right):
if left:
direction = -1
elif right:
direction = 1
self.score_manager.increment_score(int(self.score_increment))
self.score_increment += 0.002
self.gameboard.set_player_direction(direction)
self.gameboard.tick(self.time_passed)
self.screen.blit(self.gameboard.render(), (0, WINDOW_HEIGHT - GAME_SIZE))
self.screen.blit(self.scoreboard.render(), (GAME_SIZE, 0))
self.screen.blit(self.topmenu.render(), (0, 0))
def start_game(self, school):
self.set_state(GameState.Running)
self.gameboard.reset()
self.scoreboard.reset()
self.school_id = self.score_manager.get_school_id(school)
self.gameboard.reset()
self.score_increment = 1
def stop_game(self):
self.set_state(GameState.GameOver)
score = self.score_manager.get_score()
self.score_manager.save_game(self.school_id)
self.gameovermenu.update(score)
self.controls_reversed = False
def set_state(self, state):
self.state = state
def drink(self):
self.scoreboard.remove_life()
self.pump.drink()
if self.scoreboard.is_game_over():
self.stop_game()