-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathscore_manager.py
More file actions
88 lines (76 loc) · 2.85 KB
/
score_manager.py
File metadata and controls
88 lines (76 loc) · 2.85 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
from kivy.graphics import Color
from kivy.graphics import Rectangle
from kivy.metrics import dp
from kivy.metrics import sp
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.widget import Widget
class ScoreManager:
def __init__(self, game):
self.score = 0
self.game = game
self.score_file = 'score.txt'
def score_check_button(self):
img_source = 'assets/score.png'
self.sc_button = Button(
background_normal=img_source,
size_hint=(dp(0.050), dp(0.050)),
pos_hint={'x': 0.84, 'y': 0.91},
)
self.sc_button.bind(on_press=self.score_check)
return self.sc_button
def read_scores(self):
scores = []
with open(self.score_file) as file:
lines = file.readlines()
if len(lines) >= 5:
scores = [int(score) for score in lines[4].strip().split(',')]
if scores and scores[0] == 0:
print('no score yet')
return scores
def display_score_overlay(self, scores):
if self.game.overlay is None:
self.game.overlay = Widget()
with self.game.overlay.canvas:
Color(0, 0, 0, 0.5)
self.game.background = Rectangle(
pos=self.game.root.pos,
size=self.game.root.size,
)
pos_text = f'Position left: {len(self.game.pos_set)}'
pos_label = Label(
text=pos_text,
font_size=40,
color=[1, 1, 1, 1],
pos=(self.game.root.width * 0.4, self.game.root.height * 0.1),
)
score_text = '\n'.join(
f'{i + 1}. {score}' for i, score in enumerate(scores)
)
scores_label = Label(
text=score_text,
font_size=50,
color=[1, 1, 1, 1],
pos=(self.game.root.width * 0.4, self.game.root.height * 0.5),
)
self.game.overlay.add_widget(scores_label)
self.game.overlay.add_widget(pos_label)
self.game.root.add_widget(self.game.overlay)
self.game.overlay.bind(on_touch_down=self.score_overlay_touch)
def score_check(self, _):
scores = self.read_scores()
self.display_score_overlay(scores)
def score_overlay_touch(self, touch, instance):
self.game.root.remove_widget(self.game.overlay)
self.game.overlay = None
return True
def update_score_label(self):
self.game.scorelb.text = ' '.join(list(f'{self.score:04d}'))
def create_score_label(self):
return Label(
text=' '.join(list(f'{self.score:04d}')),
pos_hint={'x': 0.64, 'y': 0.784},
size_hint=(dp(0.2), dp(0.2)),
font_size=sp(49),
halign='center',
)