Skip to content

Commit da8306b

Browse files
authored
Merge pull request #37 from PaulBayfield/feat-stats
feat: Added player stats
2 parents b65fcc9 + 350461b commit da8306b

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
.ruff_cache/
2+
stats.json
23

34
# Byte-compiled / optimized / DLL files
45
__pycache__/

game/game.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
from .components.item import Item
1010
from .enums.game import GameState
1111
from .enemies.enemy_spawner import EnemySpawner
12+
from .utils.stats import Stats
1213
from typing import Optional
14+
from datetime import datetime
1315

1416

1517
class Game:
@@ -40,6 +42,8 @@ def __init__(self) -> None:
4042
self.paused = False
4143
self.state = GameState.MENU
4244

45+
self.stats = Stats()
46+
4347
def _initialize_display(self) -> None:
4448
"""
4549
Initialisation de l'affichage général du jeu
@@ -188,7 +192,10 @@ def main(self) -> None:
188192
self.footsteps.set_volume(0.1)
189193
self.footsteps.play(-1)
190194

195+
self.stats.update("gamesPlayed", 1)
196+
191197
self.state = GameState.PLAYING
198+
self.start_time = datetime.now()
192199

193200
while self.running:
194201
self.events()
@@ -218,6 +225,11 @@ def update(self) -> None:
218225
self.interface.update()
219226
self.enemy_spawner.update()
220227
elif self.state == GameState.GAME_OVER:
228+
self.end_time = datetime.now()
229+
self.stats.update(
230+
"secondsPlayed", (self.end_time - self.start_time).seconds
231+
)
232+
221233
self.footsteps.stop()
222234
self.interface.end()
223235
self.running = False
@@ -227,6 +239,11 @@ def update(self) -> None:
227239
self.footsteps.stop()
228240
self.interface.paused()
229241
elif self.state == GameState.END:
242+
self.end_time = datetime.now()
243+
self.stats.update(
244+
"secondsPlayed", (self.end_time - self.start_time).seconds
245+
)
246+
230247
self.running = False
231248
self.state = GameState.MENU
232249
self.reset()

game/utils/stats.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import json
2+
import os
3+
4+
from typing import Any, Dict
5+
6+
7+
class Stats:
8+
"""
9+
Classe pour gérer les statistiques du jeu
10+
"""
11+
12+
def __init__(self):
13+
"""
14+
Initialisation de la classe
15+
"""
16+
if not os.path.exists("stats.json"):
17+
stats = {
18+
"kills": 0,
19+
"deaths": 0,
20+
"secondsPlayed": 0,
21+
"gamesPlayed": 0,
22+
}
23+
24+
with open("stats.json", "w", encoding="utf-8") as file:
25+
json.dump(stats, file)
26+
27+
def update(self, key: str, value: Any) -> None:
28+
"""
29+
Met à jour les statistiques du jeu
30+
31+
:param data: Les données à mettre à jour
32+
:type data: dict
33+
"""
34+
data = self.load()
35+
if key in data:
36+
data[key] += value
37+
else:
38+
data[key] = value
39+
40+
with open("stats.json", "w", encoding="utf-8") as file:
41+
json.dump(data, file, indent=4)
42+
43+
def load(self) -> Dict[str, Any]:
44+
"""
45+
Charge les statistiques du jeu
46+
47+
:return: Les statistiques du jeu
48+
:rtype: dict
49+
"""
50+
with open("stats.json", "r", encoding="utf-8") as file:
51+
return json.load(file)

0 commit comments

Comments
 (0)