-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathleaderboard.py
178 lines (157 loc) · 10.9 KB
/
leaderboard.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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# Imports
import json, pygame, sys
import math
from typing import Any
from config import *
from save_progress import SaveProgress
class Leaderboard:
def __init__(self, game):
"""
For leaderboard
"""
self.game = game
def show_leaderboard(self):
"""
Opens leaderboard
"""
leaderboarding: bool = True
is_up: bool = True
page_number: int = 1
row = pygame.image.load("img/leaderboard_row.png")
bg = pygame.image.load("img/leaderboard_bg.jpg")
first_medal = pygame.image.load("img/first_medal.png")
second_medal = pygame.image.load("img/second_medal.png")
third_medal = pygame.image.load("img/third_medal.png")
db = SaveProgress.load_data("")
players: int = len(db)
max_page_number = math.ceil(players / 6)
player_names = db
name_ending: list[tuple] = []
for player in range(players):
if 'endings' not in player_names[player].keys(): player_names[player]['endings'] = []
name_ending.append((len(player_names[player]['endings']), player_names[player]['name']))
name_ending.sort(reverse=True)
while leaderboarding:
# Events
for event in pygame.event.get():
# Close button
if event.type == pygame.QUIT: sys.exit()
# Keyboard
if event.type == pygame.KEYDOWN:
# WHAT THE HELL
if event.key == pygame.K_DOWN and is_up: page_number += 1
elif event.key == pygame.K_UP and is_up: page_number -= 1 if page_number > 1 else 0
# Escape
elif event.key == pygame.K_ESCAPE: leaderboarding = False
# First page
if page_number <= max_page_number and page_number == 1:
self.game.screen.blit(bg, (0, 0))
if players <= 6:
for player in range(players):
self.game.screen.blit(row, (0, player * row.get_height()))
if player == 0: self.game.screen.blit(first_medal, (WIN_WIDTH // 2 - 247, player * row.get_height() + 10))
elif player == 1: self.game.screen.blit(second_medal, (WIN_WIDTH // 2 - 245, player * row.get_height() + 10))
elif player == 2: self.game.screen.blit(third_medal, (WIN_WIDTH // 2 - 245, player * row.get_height() + 10))
player_name = self.game.font.render(name_ending[player][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, player * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, player * row.get_height() + 23))
else:
for player in range(6):
self.game.screen.blit(row, (0, player * row.get_height()))
if player == 0: self.game.screen.blit(first_medal, (WIN_WIDTH // 2 - 234, player * row.get_height() + 10))
elif player == 1: self.game.screen.blit(second_medal, (WIN_WIDTH // 2 - 234, player * row.get_height() + 10))
elif player == 2: self.game.screen.blit(third_medal, (WIN_WIDTH // 2 - 234, player * row.get_height() + 10))
player_name = self.game.font.render(name_ending[player][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, player * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, player * row.get_height() + 23))
# Second page
elif page_number <= max_page_number and page_number == 2:
self.game.screen.blit(bg, (0, 0))
if players - 6 <= 6:
for player in range(6, players):
self.game.screen.blit(row, (0, (player - 6) * row.get_height()))
player_name = self.game.font.render(name_ending[player][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, (player - 6) * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, (player - 6) * row.get_height() + 23))
else:
for player in range(6):
self.game.screen.blit(row, (0, player * row.get_height()))
player_name = self.game.font.render(name_ending[player + 6][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player + 6][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, player * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, player * row.get_height() + 23))
# Third page
elif page_number <= max_page_number and page_number == 3:
self.game.screen.blit(bg, (0, 0))
if players - 12 <= 6:
for player in range(12, players):
self.game.screen.blit(row, (0, (player - 12) * row.get_height()))
player_name = self.game.font.render(name_ending[player][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, (player - 12) * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, (player - 12) * row.get_height() + 23))
else:
for player in range(6):
self.game.screen.blit(row, (0, player * row.get_height()))
player_name = self.game.font.render(name_ending[player + 12][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player + 12][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, player * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, player * row.get_height() + 23))
# Fourth page
elif page_number <= max_page_number and page_number == 4:
self.game.screen.blit(bg, (0, 0))
if players - 18 <= 6:
for player in range(18, players):
self.game.screen.blit(row, (0, (player - 18) * row.get_height()))
player_name = self.game.font.render(name_ending[player][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, (player - 18) * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, (player - 18) * row.get_height() + 23))
else:
for player in range(6):
self.game.screen.blit(row, (0, player * row.get_height()))
player_name = self.game.font.render(name_ending[player + 18][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player + 18][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, player * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, player * row.get_height() + 23))
# Fifth page
elif page_number <= max_page_number and page_number == 5:
self.game.screen.blit(bg, (0, 0))
if players - 24 <= 6:
for player in range(24, players):
self.game.screen.blit(row, (0, (player - 24) * row.get_height()))
player_name = self.game.font.render(name_ending[player][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, (player - 24) * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, (player - 24) * row.get_height() + 23))
else:
for player in range(6):
self.game.screen.blit(row, (0, player * row.get_height()))
player_name = self.game.font.render(name_ending[player + 24][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player + 24][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, player * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, player * row.get_height() + 23))
# Sixth page
elif page_number <= max_page_number and page_number == 6:
self.game.screen.blit(bg, (0, 0))
if players - 30 <= 6:
for player in range(30, players):
self.game.screen.blit(row, (0, (player - 30) * row.get_height()))
player_name = self.game.font.render(name_ending[player][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, (player - 30) * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, (player - 30) * row.get_height() + 23))
else:
for player in range(6):
self.game.screen.blit(row, (0, player * row.get_height()))
player_name = self.game.font.render(name_ending[player + 30][1], True, BLACK)
endings = self.game.font.render("Endings: " + str(name_ending[player + 30][0]), True, BLACK)
self.game.screen.blit(player_name, (WIN_WIDTH // 2 - 160, player * row.get_height() + 23))
self.game.screen.blit(endings, (WIN_WIDTH // 2 + 60, player * row.get_height() + 23))
else: page_number = max_page_number
# Updates
self.game.clock.tick(FPS)
pygame.display.update()