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

Discussion :

Comparaison de scores de jeu

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut Comparaison de scores de jeu
    Bonjour à tous pour mon jeu j arrive a enregistrer les scores dans un fichier score.txt
    mais je n arrive pas a comparer ces score pour les enregistrer et les afficher du plus grand au plus petit
    j ai chercher du coter de QString et du QFile QStream et autre mais sans reussir , SVP quelqu un pour un coup de main.
    voici quelque information .
    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
     
    void enregistrer(int i){
            QFile *file = new QFile ("score.txt");
            QFile *file2 = new QFile ("score.txt");
            file->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append) ;
            file2->open(QIODevice::ReadOnly);
            QTextStream flux(file),flux2(file2);
            int nb_Lignes = 0;
            while (!flux2.atEnd()){
                flux2.readLine();
                nb_Lignes++;
            }
            flux << nb_Lignes+1 << ")  " ;
            flux << i << endl;  // i est un integer pour stocker le score renvoyer par le jeu
            file->close();
            file2->close();   
     }

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    1) Pourquoi faire une allocation dynamique pour les QFile ? Où est-ce qu'ils sont détruits ?

    2) open() renvoie un booléen pour tester si l'ouverture a réussi, car si elle a échoué ce n'est pas la peine d'aller plus loin. Tu devrais alors te rendre compte que tu ne peux pas ouvrir le même fichier deux fois en même temps... Tu dois donc séparer la phase de lecture de celle d'écriture.

    Donc concrètement les étapes à coder :
    - Lire le fichier (ouverture/lecture/fermeture). Donc ok pour les readLines() comme tu as commencé, et tu peux en profiter pour traiter chaque ligne (ne prendre que le score, et l'enregistrer dans une liste)
    - Traiter la lecture : il ne reste qu'à rentrer le nouveau score dans la liste et à l'ordonner (qSort())
    - Écrire la liste dans le fichier (concrètement c'est écraser le fichier, donc pas d'ouverture en mode Append).

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Salut
    Ou alors, autre façon de faire, tu ouvres ton fichier en mode lecture/écriture (attention à ne pas confondre avec le mode écriture/lecture qui commence par vider le fichier).
    Donc dans ce mode lecture/écriture tu peux à la fois lire ce qu'il y a dans le fichier et ensuite écrire dedans. Faut juste bien savoir te positionner (utiliser pos() et seek()) pour bien écrire ce qu'il faut où il faut.

    Accessoirement ta question relève plus de l'apprentissage de la manipulation de fichiers (qu'on peut déjà faire en C/C++) que de la librairie Qt...
    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]

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut
    Bonjour à tous ,
    je remecier tout le monde qui a voulu m aider et je m excuse de ne pas revenir a ce sujet plus tot parceque j étais tres ocupper mais désque j ai eu un peu de temps je mesuis casser la tete et je suis arriver un code qui fonctionne que je vais poster ici peut etre que ça peut aider quelqu un.ce code est baser sur :
    QFile , QTableWidget et QTableWidgetItem
    voici le code:
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
        QFile file("score.data");
        QTextStream flux(&file);
     
        int ro = 10, co = 1, k = 0;
        QString si = QString::number(i,10); // int i , pour stocker le nouveau score.
        QString str, str1, str2 ;
        QStringList sl1;
        QString value = QString::number(k,10);
     
        if( !file.open(QIODevice::ReadWrite | QIODevice::Text )){
            QMessageBox msg(QMessageBox::Warning, tr("Erreur"),
                             tr("file ne peut pas ouvrir le fichier score.txt"), 0, this);
            QPushButton oui(msg.QMessageBox::addButton ( tr("quiter"), QMessageBox::YesRole));
            return ;
        }
        table->setRowCount(ro);
        while (!flux.atEnd()){
            for( int r = 0; r < ro; r++ ) {
                for( int c = 0; c < co; c++) {
                    str = flux.readLine();
                    sl1 = str.split(QRegExp("\\b"), QString::KeepEmptyParts);
                    if(sl1.size() >= 4){
                        str1 = sl1.at(1);
                        str2 = sl1.at(3);
                        QTableWidgetItem * item = new QTableWidgetItem ;
                        item->setText(str1 );
                        table->setItem(r,0,item);
                        QTableWidgetItem * item2 = new QTableWidgetItem ;
                        item2->setText(str2 );
                        table->setItem(r,1,item2);
                        item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
                    }
                }
            }
            table->resizeRowsToContents();
            table->sortByColumn(0,Qt::DescendingOrder);
            }
        QTableWidgetItem *litem = new QTableWidgetItem;
        litem = table->item(0,0);
        if (litem != NULL){
            value = litem->text();
            if (si > value){
                QMessageBox *ms = new QMessageBox(QMessageBox::Information,
                              tr("Gagner"), tr("ouraaaaaah nouveau score"), 0, 0);;
                ms->setFont(QFont("Times new Roman",15,QFont::Normal));
            QPushButton *oui = ms->QMessageBox::addButton ( tr("Oui"), QMessageBox::YesRole);
                oui->setLayoutDirection(Qt::RightToLeft);
                oui->setFocusPolicy(Qt::NoFocus);
                ms->show();
                flux << si+" merci toi " << endl;
            }
            else flux << si+" merci toi " << endl;
        }
        else flux << si+" merci toi " << endl;
        file.close();
     
        if( !file.open(QIODevice::ReadWrite | QIODevice::Text )){
            QMessageBox msg(QMessageBox::Warning, tr("Erreur"),
                             tr("file ne peut pas ouvrir le fichier score.txt"), 0, this);
            QPushButton oui(msg.QMessageBox::addButton ( tr("quiter"), QMessageBox::YesRole));
            return ;
        }
        table->setRowCount(ro);
        while (!flux.atEnd()){
            for( int r = 0; r < ro; r++ ) {
                for( int c = 0; c < co; c++) {
                    str = flux.readLine();
                    sl1 = str.split(QRegExp("\\b"), QString::KeepEmptyParts);
                    if(sl1.size() >= 4){
                        str1 = sl1.at(1);
                        str2 = sl1.at(3);
                        QTableWidgetItem * item = new QTableWidgetItem ;
                        item->setText(str1 );
                        table->setItem(r,0,item);
                        QTableWidgetItem * item2 = new QTableWidgetItem ;
                        item2->setText(str2 );
                        table->setItem(r,1,item2);
                        item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
                    }
                }
            }
            table->resizeRowsToContents();
            table->sortByColumn(0,Qt::DescendingOrder);
        }
        file.close();
    vous remarquer que : a été ouvert est fermer 2 fois c est parceque la premier fois c est pour comparer le nouveau score avec les score sauvegarder est ensuite sauvegarder ce nouveau score est la deuxieme fois c est pour afficher le nouveau score et les ancien score ensemble.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aliwatte Voir le message
    vous remarquer que : a été ouvert est fermer 2 fois c est parceque la premier fois c est pour comparer le nouveau score avec les score sauvegarder est ensuite sauvegarder ce nouveau score est la deuxieme fois c est pour afficher le nouveau score et les ancien score ensemble.
    Salut
    En utilisant fseek ou rewind (qui sont des fonctions associées aux FILE* du C mais qui doivent certainement avoir leur équivalent dans les méthodes des QFile) tu peux revenir au début du fichier pour le relire une seconde fois ce qui t'évite cette seconde ouverture (seconde ouverture accessoirement faite en mode RW alors que tu ne fais que lire le fichier...)
    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 confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 106
    Par défaut
    Merci a tout le monde qui a aider .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insérer un score dans un jeu
    Par audreyoupi dans le forum Flash
    Réponses: 1
    Dernier message: 21/04/2011, 14h26
  2. [Débutant] jeu (problème d'affichage de score)
    Par danièle100 dans le forum C++Builder
    Réponses: 1
    Dernier message: 08/06/2010, 21h08
  3. Proc Npar1way comparaison de 2 score
    Par laptitejujudu35 dans le forum SAS STAT
    Réponses: 0
    Dernier message: 04/05/2010, 15h57
  4. Réponses: 1
    Dernier message: 19/10/2009, 23h00
  5. sauver score jeu dans fichier
    Par cocotomy dans le forum Langage
    Réponses: 18
    Dernier message: 22/12/2006, 16h04

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