IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Système de high score


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut Système de high score
    Bonjour,

    J'ai un petit soucis avec un système de higscore que je voudrai mettre au point.

    Dans mon jeu codé en C avec la libGE (une lib pour PSP) j'ai réussi à afficher le temps min:sec:ms sur mon jeu mais maintenant je veux faire un système de high score.

    Je me suis penché sur un fopen du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FILE* fichier = NULL;
     
        fichier = fopen("highscore.txt", "w");
     
        if (fichier != NULL)
        {
            fprintf(fichier,"%s", fichier);
        }
    Et voici comment j'affiche mon temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int ms = timer->ellapsed / 1000 - (timer->hours*3600000+timer->minuts*60000+timer->seconds*1000);
    char temps[64] = "";
    sprintf(temps, "Temps \t\t:\t\t %01d\t.\t%02d\t.\t%02d", timer->minuts, timer->seconds,ms);
    geFontPrintScreen(240, 10, font, temps, RGB(255, 255, 255));
    Sauf que j'aimerai qu'il y est deux temps en faite car quand on fini un objectif, le temps s'arrete et une comparaison se fait avec le temps du fichier txt (si il y en a un, et si il y en a pas ca l'ecrit).

    Si le temps et plus petit, alors on l'écrit dans le fichier (on écrase le précèdent).
    Si le temps est plus grand, on écrit pas dans le fichier.

    Voilà a l'heure actuelle comment j'écris le score et le high score :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sprintf(temps, "Your \tscore \t\t:\t\t %01d\t.\t%02d\t.\t%02d", timer->minuts, timer->seconds,ms);
    geFontPrintScreen(157, 170, font, temps, RGB(255, 255, 255));
    sprintf(temps, "Your \tHigh\t Score \t\t:\t\t %01d\t.\t%02d\t.\t%02d", timer->minuts, timer->seconds,ms);
    geFontPrintScreen(157, 219, high, temps, RGB(255, 0, 0));
    Mais bien évidemment j'aimerai metre a la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Your \tHigh\t Score \t\t:\t\t %01d\t.\t%02d\t.\t%02d
    le temps qui se trouve dans le fichier.

    Quelqu'un peut m'aider ?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nicovideo Voir le message
    Bonjour,

    J'ai un petit soucis avec un système de higscore que je voudrai mettre au point.

    Dans mon jeu codé en C avec la libGE (une lib pour PSP) j'ai réussi à afficher le temps min:sec:ms sur mon jeu mais maintenant je veux faire un système de high score.

    Je me suis penché sur un fopen du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FILE* fichier = NULL;
     
        fichier = fopen("highscore.txt", "w");
     
        if (fichier != NULL)
        {
            fprintf(fichier,"%s", fichier);
        }
    Salut
    Déjà le fprintf(fichier, "%s", fichier) me semble un poil douteux...

    Citation Envoyé par Nicovideo Voir le message
    Mais bien évidemment j'aimerai metre a la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Your \tHigh\t Score \t\t:\t\t %01d\t.\t%02d\t.\t%02d
    le temps qui se trouve dans le fichier.
    J'ai pas compris toute ton histoire de geFontPrintScreen() mais bon, si tu veux à un moment donné afficher un truc qui se trouve dans le fichier (et semble-t-il, écrit dans un format "human's mode"), alors la procédure est la suivante
    1) ouvrir fichier en lecture
    2) lire son contenu via fgets()
    3) éventuellement, si le contenu est écrit dans un format très spécifique, comme par exemple une date serait écrite dd/mm/yyyy, alors tu peux utiliser sscanf() pour splitter l'info lue dans des variables spécifiques
    4) afficher l'info lue (ou les variables)

    Si le fichier est binary mode, alors tu peux remplacer 2 et 3 par un fscanf()...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FILE* fichier = NULL;
     
        fichier = fopen("highscore.txt", "w");
     
        if (fichier != NULL)
        {
            fprintf(fichier,"%s", temps);
        }
    Oui en faite c'était la variable temps que je voulais mettre.
    geFontScreenPrint est une fonction de la lib que j'utilise sur PSP pour pouvoir afficher un texte à l'écran.

    Donc pour la lecture il faudrait que je fasse une boucle avec fgets ? mais comment le récuperer dans le sprintf ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    Bonjour,
    Citation Envoyé par Nicovideo Voir le message
    Donc pour la lecture il faudrait que je fasse une boucle avec fgets ? mais comment le récuperer dans le sprintf ?
    Effectivement , comment faire avec sprintf() ?

    En fait, ce n'est pas *printf() qu'il faut utiliser mes sscanf().
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nicovideo Voir le message
    Donc pour la lecture il faudrait que je fasse une boucle avec fgets ? mais comment le récuperer dans le sprintf ?
    Comment récupérer quoi dans le sprintf ? Là je ne pige plus ce que tu veux faire !!! Tu veux récupérer le temps ??? Et pourquoi un sprintf() ???

    Donc ton fichier contient une string sous forme, si j'ai bien lu, de chaine ressemblant à Temps \t\t:\t\t mn\t.\tss\t.\tms (les mn, ss et ms étant des valeurs numériques).

    Donc en récupérant la string dans un char toto[80] via fgets(), tu auras, dans toto, la string Temps \t\t:\t\t mn\t.\tss\t.\tms...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    Lol je m'explique très mal je sais, c'est parce que j'ai du mal à exposer mon problème..

    Donc en gros j'écris dans mon fichier mon score sous forme comme tu as dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Temps \t\t:\t\t mn\t.\tss\t.\tms
    Maintenant je veux faire un test a chaque fois que j'ecris dans le fichier pour savoir si le temps est plus grand ou plus petit.
    Si le temps est plus grand que le temps déjà écrit, alors on écrit pas dans le fichier et on affiche donc le score qui se trouve dans le fichier (high score).
    Si le temps est plus petit que le temps déjà écrit, alors on écrase ce temps et on affiche ce temps.

    Mon problème est donc deux comparer ces deux chaines, comment savoir si Temps \t\t:\t\t 0\t.\t3\t.\t320 est plus grand que Temps \t\t:\t\t 0\t.\t5\t.\t250

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nicovideo Voir le message
    Lol je m'explique très mal je sais, c'est parce que j'ai du mal à exposer mon problème..

    Donc en gros j'écris dans mon fichier mon score sous forme comme tu as dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Temps \t\t:\t\t mn\t.\tss\t.\tms
    Maintenant je veux faire un test a chaque fois que j'ecris dans le fichier pour savoir si le temps est plus grand ou plus petit.
    Si le temps est plus grand que le temps déjà écrit, alors on écrit pas dans le fichier et on affiche donc le score qui se trouve dans le fichier (high score).
    Si le temps est plus petit que le temps déjà écrit, alors on écrase ce temps et on affiche ce temps.

    Mon problème est donc deux comparer ces deux chaines, comment savoir si Temps \t\t:\t\t 0\t.\t3\t.\t320 est plus grand que Temps \t\t:\t\t 0\t.\t5\t.\t250
    Ben te faut
    1) récupérer la string "Temps \t\t:\t\t mn\t.\tss\t.\tms" du fichier
    2) découper cette string pour en extraire les valeurs mn, ss et ms
    3) comparer ces valeurs avec celles de ton score actuel
    4) si celles de ton score actuel sont plus grandes, écrire alors le nouveau score
    Tu remarqueras que la difficulté principale vient du point 2. Toutefois, je te pose une question => est-il important que le fichier contienne tout ce formalisme si agréable à nos yeux mais si inutile pour l'ordi ??? Tu ne pourrais pas écrire dans ton fichier simplement
    mn
    ss
    ms
    que tu récupèrerais avec 3 fgets() sans te préoccuper de devoir découper ?

    Ou mieux => tu enregistres ton score directement avec fwrite(). Ca stocke le score sous forme binaire (donc illisible avec notepad) mais tu le récupères facilement avec fread(). Et si ton score se trouve dans une structure, un seul fread() suffit pour tout récupérer.

    Ou mieux => tu stockes en mémoire le score et le high-score. Si le score est meilleur tu l'enregistres donc dans le fichier et aussi en mémoire donc inutile de relire le fichier à chaque fois...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Créer un High score par du PHP
    Par Yoskys dans le forum Langage
    Réponses: 10
    Dernier message: 02/05/2014, 22h50
  2. [API HTML5] high scores en javascript ?
    Par elhadiDZ dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/03/2013, 23h25
  3. Stockage de High scores sécurisé
    Par Risike dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 25/05/2008, 10h12
  4. Ecrire des high scores
    Par kmekme dans le forum C#
    Réponses: 4
    Dernier message: 26/04/2008, 12h31
  5. Faire des high score en java
    Par Kcrik dans le forum Linux
    Réponses: 1
    Dernier message: 28/04/2006, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo