-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathleaderboard.py
61 lines (53 loc) · 2.19 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
import pygame
import csv
import sys
from menu import TITLE_FONT, SIDE_FONT, BACKGROUND_COLOR, TEXT_COLOR
MAIN_ROW_COLOR = (41, 100, 138)
def draw_leaderboard(surface, leaderboard, width, height):
menu_text = TITLE_FONT.render("LEADERBOARD", True, TEXT_COLOR)
surface.blit(menu_text, (width / 2 - menu_text.get_width() / 2, height / 2 - 350))
width_btn = -400
height_btn = -100
for i, v in enumerate(leaderboard):
for index, j in enumerate(v):
# draw title row
if i == 0:
label = SIDE_FONT.render(j, True, MAIN_ROW_COLOR)
button_x = width / 2 - label.get_width() / 2
surface.blit(label, (button_x + width_btn, height / 3 - 100))
else:
# draw place of score
if index == 0:
label = SIDE_FONT.render(str(i), True, TEXT_COLOR)
button_x = width / 2 - label.get_width() / 2
surface.blit(label, (button_x + width_btn, height / 3 + height_btn))
width_btn += 150
# draw score and time
label = SIDE_FONT.render(j, True, TEXT_COLOR)
button_x = width / 2 - label.get_width() / 2
surface.blit(label, (button_x + width_btn, height / 3 + height_btn))
width_btn += 150
width_btn = -400
height_btn += 50
def get_leaderboard(surface, width, height):
rows = [["No.", "Name", "Score", "Speed level", "Time", "Date"]]
with open("scores.csv", "a+") as f:
f.seek(0)
reader = csv.reader(f, delimiter=",")
for row in reader:
rows.append(row)
leaderboard = [rows[0]] + sorted(rows[1:], key=lambda x: int(x[1]), reverse=True)[
:10
]
high_scores = True
while high_scores:
surface.fill(BACKGROUND_COLOR)
draw_leaderboard(surface, leaderboard, width, height)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
high_scores = False