-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGuiGameMenu.py
128 lines (94 loc) · 4.26 KB
/
GuiGameMenu.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
import pygame
from pygame import mixer
import Util
import Variables
from Database import Database
from Renderer import Renderer
from engine import Engine
pygame.init()
clock = pygame.time.Clock()
# Sounds
MUSIC_BASE_DIR = "assets/sounds/"
mixer.music.load(MUSIC_BASE_DIR + "click.ogg")
mixer.music.set_volume(0.1)
# FONT
pygame.font.init()
class GuiGameMenu:
def __init__(self, guiFrom, screen, headerImage, gameImage, gameName):
self.db = Database.getInstance()
self.renderer = Renderer(screen)
self.screen = screen
self.headerImage = headerImage
self.gameImage = gameImage
self.guiFrom = guiFrom
self.running = True
self.player_id = Variables.getPlayerId()
self.buttons = []
self.difficulty = 3
self.gameName = gameName
def run(self):
clock.tick(60)
self.draw_menu()
while self.running:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
for button in self.buttons:
if button['rect'].collidepoint(pygame.mouse.get_pos()):
self.on_click(button['name'])
if event.type == pygame.QUIT:
self.running = False
def on_click(self, name):
mixer.music.play()
if "difficulty" in name:
difficulty = int(name.split("_")[1])
if difficulty == self.difficulty:
self.difficulty = -1
else:
self.difficulty = difficulty
self.draw_menu()
if name == "logout":
Variables.PLAYER_ID = None
self.guiFrom.gui_login.runLoginScreen()
self.running = False
if name == "back":
self.guiFrom.run()
self.running = False
if name == "play":
Engine(self.screen, self, self.difficulty - 1, self.gameName).game_loop()
self.running = False
def draw_menu(self):
self.buttons.clear()
self.renderer.draw_background()
headerBtns = self.renderer.draw_heading(self.gameName, Variables.getPlayerName(), True, True)
self.buttons = Util.append_array_to_array(self.buttons, headerBtns)
dButtons = self.renderer.draw_game_preview(self.headerImage, self.gameImage, 80, 160, self.difficulty, 400, 275)
self.buttons = Util.append_array_to_array(self.buttons, dButtons)
self.draw_scores()
pygame.display.update()
def getGameHistory(self):
# if difficulty is not selected
if self.difficulty == -1:
games_summary_player = self.db.getGameHistoryForChosenPlayerFiltered(self.player_id, self.gameName)
else:
games_summary_player = self.db.getGameHistoryForChosenPlayerFiltered(self.player_id, self.gameName, self.difficulty)
return games_summary_player
def draw_scores(self):
x = 80
y = 160
widthX = 400
size = 87
games_summary_player = self.getGameHistory()
# calculate stats based on game history
total_games_played = len(games_summary_player)
total_games_won = sum(1 for game in games_summary_player if game[2] == "won")
total_games_lost = sum(1 for game in games_summary_player if game[2] == "lost")
total_games_canceled = sum(1 for game in games_summary_player if game[2] == "cancelled")
total_pawns_destroyed = sum(game[3] for game in games_summary_player)
self.renderer.draw_score_card(x + widthX + 40, y + 150, size, size, "PLAYED GAMES", total_games_played)
self.renderer.draw_score_card(x + widthX + 40 + (size + 10), y + 150, size, size, "WON GAMES", total_games_won)
self.renderer.draw_score_card(x + widthX + 40 + (size + 10) * 2, y + 150, size, size, "LOST GAMES", total_games_lost)
self.renderer.draw_score_card(x + widthX + 40 + (size + 10) * 3, y + 150, size, size, "CANCELLED GAMES", total_games_canceled)
self.renderer.draw_score_card(x + widthX + 40 + (size + 10) * 4, y + 150, size, size, "DESTROYED PAWNS", total_pawns_destroyed)
def getOwnScore(self, gameName, difficulty, playerID):
ownScore = self.db.getGamesSummaryForGameAndDifficultyAndPlayerID(gameName, difficulty, playerID)
return ownScore