Module Python de gestion des scores pour les jeux
par
, 26/11/2021 à 01h36 (992 Affichages)
Je reviens ici avec la version de module complet d'un gestionnaire de fichier contenant les dix meilleurs scores (et les noms/pseudos correspondant) des joueurs de n'importe quel type de jeu.
Voici le fichier de module: scoremanage.py et son code source en Python:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 # -*- coding:utf8 -*- # "gestion d'un fichier des 10 meilleurs scores et noms des joueurs" import pickle def inisco(namfisco): "fonction interne/utile de (re)initialisation du fichier de scores" tmpsco=[0,"no one"]*10 tmpfsc=open(namfisco,"wb") pickle.dump(tmpsco,tmpfsc) tmpfsc.close() return def vrisco(namfisco): "fonction interne de vérification d'existence du fichier de scores" try: fs=open(namfisco,"rb") fs.close() except: inisco(namfisco) return def lirsco(namfisco): "fonction utile de lecture du fichier de scores" vrisco(namfisco) fisco=open(namfisco,"rb") sco=pickle.load(fisco) fisco.close() return(sco) def addsco(namfisco,score,gamer): "fonction utile d'ajout dans le fichier scores d'un score d'un joueur" if gamer=="": gamer="Anonymous" totsco=lirsco(namfisco) tmpsco=[score,gamer] fs=open(namfisco,"wb") for p in range(0,19,2): if score > totsco[p]: totsco=totsco[:p]+tmpsco+totsco[p:] del totsco[20:] break pickle.dump(totsco,fs) fs.close() return
Comme on le lit, il peut être effectivement appelé comme module, même si ce n'est qu'un module de définitions de fonctions, ou il peut être placé au tout début de chaque programme de jeu, au niveau le plus bas du programme certes mais en tous les cas le plus possible avant toute ligne de code propre au jeu (y compris les classes donc). L'avantage de cette dernière méthode sur son usage "module" est que l'interpréteur Python n'a pas à "trouver" le module (cela règle les problèmes de chemins d'accès), mais le désavantage est qu'alors il faudra faire attention (hormis au sein des classes) à ne pas définir une fonction ayant le même nom qu'une des fonctions de ce gestionnaire de scores.
Voici une vidéo explicative de la structuration que doivent prendre les commandes voulant utiliser ce module en tant que module proprement dit. J'ai finalement réussi à en faire une classe bien propre avec un def __init__(self, args) mais je trouve cela bien lourd pour le peu qu'il effectue.
<span style="color:#008000;">
En exemple ce petit jeu très simple et modeste, à exécuter dans un terminal. Notez bien que pour que le module soit accessible (et c'est pourquoi on préférera inclure ces lignes de code directement au début de chaque programme de jeu), il convient que le jeu développé soit réellement "Open Source", et soit donc appelable depuis un IDE (EDI) associé à Python.
Ce petit jeu est un classique des années début 1970, je l'ai découvert bêtement la première fois sur une TI programmable.
Le voici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 # -*- coding:utf8 -*- # import scoremanage gs=scoremanage global fisc fisc="trouve_sco" from random import randrange def choix(): print("1: Nouvelle partie") print("2: Liste des scores") print("Q: Quitter") print("") r=input("Choix :") if r!="1" and r!="2" and r!="Q" and r!="q": choix() return(r) def liste(): scores=gs.lirsco(fisc) z=0 for p in range(0,19,2): print(z,":",scores[p+1]," ",scores[p]) z=z+1 print("") return def partie(): print("") pseudo=input("Pseudo :") nombre=randrange(10001) print("") print("Trouvez un nombre entre 0 et 10000 inclus.") print("") e=99999 ne=0 while e!=nombre: ne=ne+1 e=input("Essai :") if e=="Q" or e=="q": return if e=="": e=0 e=int(e) score=10000/ne if score<1: score=0 score=round(score) if e<nombre: print(e,"est trop petit...") if e>nombre: print(e,"est trop grand...") print("") print(e,"était le nombre à trouver!!!") print("Votre score est de",score) gs.addsco(fisc,score,pseudo) liste() return print("************************") print("* TROUVE UN NOMBRE *") print("************************") print("") r="" while r!="Q" and r!="q": r=choix() if r=="2": liste() elif r=="1": partie() exit()
Et en fichier :
trouve.py