IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Town Ground

Module Python de gestion des scores pour les jeux

Noter ce billet
par , 26/11/2021 à 01h36 (832 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

Envoyer le billet « Module Python de gestion des scores pour les jeux » dans le blog Viadeo Envoyer le billet « Module Python de gestion des scores pour les jeux » dans le blog Twitter Envoyer le billet « Module Python de gestion des scores pour les jeux » dans le blog Google Envoyer le billet « Module Python de gestion des scores pour les jeux » dans le blog Facebook Envoyer le billet « Module Python de gestion des scores pour les jeux » dans le blog Digg Envoyer le billet « Module Python de gestion des scores pour les jeux » dans le blog Delicious Envoyer le billet « Module Python de gestion des scores pour les jeux » dans le blog MySpace Envoyer le billet « Module Python de gestion des scores pour les jeux » dans le blog Yahoo

Commentaires