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 :

Crash non identifié (SFML)


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut Crash non identifié (SFML)
    Bonjour!

    Mon programme se plante toujours en arrivant à une étape précise. Je pense qu'il y a une incompatibilité de type ou une bêtise dans ce genre, mais je n'ai aucune idée de comment résoudre ça. Le compilateur passe dessus comme si tout allait bien =)

    Le problème survient lorsque le programme lit ces deux lignes. Le programme crashe complètement et je suis obligé de le fermer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte1.setString(txt[0]);   texte2.setString(txt[16]); // J'utilise SFML pour ça
    Le tableau est initialisé de la manière suivante:
    Il est rempli en utilisant la fonction "Sauvegarde":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int calc3=0; // Préparation de l'index
    while (calc3 < 16)
    {   txt[calc3]=Sauvegarde(101+calc3, 0, ""); // Remplissage des cases 0 à 15
         calc3++;
    }
    while (calc3 < 32)
    {   txt[calc3]=Sauvegarde(101+calc3, 1, ""); // Remplissage des cases 16 à 31
        calc3++;
    }
    Voici le header de la fonction "Sauvegarde":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef SAUVEGARDE_H_INCLUDED
    #define SAUVEGARDE_H_INCLUDED
     
    #include <string.h>
     
    using namespace std;
     
    string Sauvegarde(int a, int b, string c);
     
    #endif // SAUVEGARDE_H_INCLUDED
    Et son implémentation:
    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
    #include <iostream>
    #include <fstream>
    #include <string.h>
     
    #include "Sauvegarde.h"
     
    using namespace std;
     
    string Sauvegarde(int a, int b, string c)
    {   // a est le numéro du fichier utilisé
        // b est la ligne de sauvegarde utilisée
        // c est le contenu à écrire ou à retourner
     
        // Déclaration des variables
        int x; // Compteur de lignes pour la lecture des fichiers
        x=0; // Initialisation
     
        const char* y; // Nom du fichier à lire ou à écrire
     
        switch(a)
        {   case 1:     y="Donnees/Fichier_1.txt";  break; // Fichier 1
            case 2:     y="Donnees/Fichier_2.txt";  break; // Fichier 2
            case 3:     y="Donnees/Fichier_3.txt";  break; // Fichier 3
            case 4:     y="Donnees/Fichier_4.txt";  break; // Fichier 4
     
            case 101:   y="Donnees/Jeu_1.txt";   break; // Pacman 1
            case 102:   y="Donnees/Jeu_2.txt";   break; // Pacman 2
            case 103:   y="Donnees/Jeu_3.txt";   break; // Pacman 3
            case 104:   y="Donnees/Jeu_4.txt";   break; // Pacman 4
            case 105:   y="Donnees/Jeu_5.txt";   break; // Pacman 5
            case 106:   y="Donnees/Jeu_6.txt";   break; // Pacman 6
            case 107:   y="Donnees/Jeu_7.txt";   break; // Pacman 7
            case 108:   y="Donnees/Jeu_8.txt";   break; // Pacman 8
            case 109:   y="Donnees/Jeu_9.txt";   break; // Pacman 9
            case 110:   y="Donnees/Jeu_10.txt";  break; // Pacman 10
            case 111:   y="Donnees/Jeu_11.txt";  break; // Pacman 11
            case 112:   y="Donnees/Jeu_12.txt";  break; // Pacman 12
            case 113:   y="Donnees/Jeu_13.txt";  break; // Pacman 13
            case 114:   y="Donnees/Jeu_14.txt";  break; // Pacman 14
            case 115:   y="Donnees/Jeu_15.txt";  break; // Pacman 15
            case 116:   y="Donnees/Jeu_16.txt";  break; // Pacman 16
        }
     
        if (c == "") // Lecture seule dans la mémoire
        {   ifstream fichier(y);  // Ouvrir le fichier en lecture
     
            while (x <= b)
            {   getline(fichier, c);
                x++;
            }
        }
     
        else // Ecriture dans la mémoire (pas encore terminé, mais on s'en fout puisque je ne l'utilise pas encore non plus =D)
        {   ofstream fichier(y);  // Ouvrir le fichier en écriture
        }
     
        return c;
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    j'ai du mal à croire une seule seconde qu'un setString de SFML entraîne un crash.
    Par contre l'utilisation de Sauvegarde avec a > 116 (ou entre 5 et 100) me parait des plus suspect
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre actif
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Points : 282
    Points
    282
    Par défaut
    Dans sauvegarde tu n'initialises pas y, mais tu supposes à tord qu'il sera rempli lorsque tu liras ton fichier, or tu tu fais un ifstream dessus plus tard, c'est pas étonnant que ton programme plante.

    Sinon juste pour ta culture personnelle tu peux faire une seul boucle au lieu de 2, en faisant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int calc3=0; // Préparation de l'index
    while (calc3 < 32)
    {   txt[calc3]=Sauvegarde(101+calc3, !!(calc3&16), "");
         calc3++;
    }

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Bonsoir,

    j'ai du mal à croire une seule seconde qu'un setString de SFML entraîne un crash.
    Par contre l'utilisation de Sauvegarde avec a > 116 (ou entre 5 et 100) me parait des plus suspect
    T'as raison, en fait je devais redescendre à a=101 à-partir de la 16ème case du tableau

    OK, Danny-K, mais c'est quoi ça exactement? =)

    Détails à-part, c'est vraiment sur la ligne setString() que ça s'arrête. Je ne comprends pas ce qui se passe.
    Même si je remplace ça pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte1.setString("123");   texte2.setString("ABC");
    ça ne marche pas

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Les remarques sont correctes, j'ajouterais:
    - fichier pas testé (il vaut mieux tester les stream pour vérifier que l'acquisition de ressource, en l'occurrence l'ouverture de fichier, soit bien réalisée).
    - Usage suspect d'un tableau de char (pourquoi ne pas utiliser une string ?).

    Citation Envoyé par Danny-k Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int calc3=0; // Préparation de l'index
    while (calc3 < 32)
    {   txt[calc3]=Sauvegarde(101+calc3, !!(calc3&16), "");
         calc3++;
    }
    La double négation, c'est quand même bien laid ! Quitte à faire dans la bricole, autant écrire quelque chose de simple comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int calc3=0; // Préparation de l'index
    while (calc3 < 32)
    {
      txt[calc3]=Sauvegarde(101+calc3, (16 <= calc3), "");
      ++calc3;  // Préférer la pré-incrémentation dans ce cas
    }
    Find me on github

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Ouais, je vais tester le fichier. Mais normalement, je ne voudrais pas laisser le test une fois le dépannage terminé.
    Mon idée, c'est que ça sert à rien de tester un fichier puisque, dans le cas où la lecture ne marcherait pas, le programme ne fonctionne de toute façon pas. Je pars du principe que c'est censé fonctionner, et sinon ce ne serait pas à-cause du code lui-même.
    Tu as un avis là-dessus?
    EDIT: j'ai testé, le fichier est ouvert correctement.

    Plus important que ça: Quoi? où ça un tableau de char? J'ai pas remarqué ça, mais je pensais justement que c'était peut-être un problème de types!

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pourquoi tester le fichier?
    Parce que quitte à ce que le programme ne fonctionne pas, autant qu'il le dise à l'ouverture du fichier.
    Ce n'est pas gentil/correct de le laisser tenter de fonctionner s'il y a moyen de savoir à l'avance que c'est voué à l'échec.

    Ce serait une perte de temps de l'utilisateur, qui préfèrera que le programme lui dise "configuration invalide" plutôt que de le voir crasher plus ou moins violemment.

    C'est ce genre de chose qui rend un programme robuste.
    La robustesse, ce n'est pas de toujours fonctionner, c'est de ne jamais planter.
    S'apercevoir des erreurs, en informer l'utilisateur, et s'arrêter proprement, au plus tôt.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    OK, alors je fais ça...

    Et concernant le problème de types (avec le tableau de chars, tout ça)?

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Re

    Au temps pour moi, txt est bien un tableau de string et pas de char ! y devrait être une string. L'usage de std::array est préférable au tableau C style.
    Find me on github

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    OK pour array. De toute façon c'était au programme (mais j'avais des trucs plus urgents à faire, notamment faire fonctionner mon programme.
    Cela dit, SFML est fait pour le langage C, donc ça devrait pas le déranger d'utiliser des tableaux C-style.
    J'ajoute que le programme se plante même quand j'essaie d'écrire directement "texte1.setString("blablabla");" =)

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Non. La SFML est faite pour le C++.
    Par contre, elle propose un "binding" pour le C, pour pouvoir utilisé dans ce langage.

    C'est la SDL qui est faite pour le C.
    D'ailleurs la SFML est conçue comme son successeur en profitant des avantages du C++.


    Qu'entends-tu par:
    J'ajoute que le programme se plante même quand j'essaie d'écrire directement "texte1.setString("blablabla");" =)
    Quel est le symptome?
    mauvais affichage ou arret violent (par une exception ou une SEGFAULT)?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par leternel Voir le message
    Non. La SFML est faite pour le C++.
    Par contre, elle propose un "binding" pour le C, pour pouvoir utilisé dans ce langage.
    Dans ce cas il doit y avoir un "abus de langage" quelque part! ^^
    http://www.sfml-dev.org/index-fr.php

    je vais essayer de remplacer mes tableaux par des "arrays", et on verra ce que ça donne. Je vais essayer de le faire dans le cours de l'après-midi.


    Sinon, mon problème est que l'exécution s'interrompt lorsque je l'amène à afficher cette partie du programme.
    Je sais pas comme ça s'appelle: windows met un voile clanc par-dessus l'écran, puis une fenêtre disant que le programme a cessé de fonctionner, et tout ça.

  13. #13
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Dans ce cas, il faut que tu nous donne plus de ton code pour t'aider.

    Je t'invite à débugger "à la main", à grand coup d'affichage console (avec cerr).
    N'oublie pas d'utiliser régulièrement std::endl et ou std::flush, le flush n'est pas forcément automatique lors d'un plantage
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par leternel Voir le message
    Dans ce cas, il faut que tu nous donne plus de ton code pour t'aider.

    Je t'invite à débugger "à la main", à grand coup d'affichage console (avec cerr).
    N'oublie pas d'utiliser régulièrement std::endl et ou std::flush, le flush n'est pas forcément automatique lors d'un plantage
    J'ai rien compris MDR

    En fait, je debug toujours à coup de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << "etape X passee" << endl;
    , mais ça m'a juste permis de savoir à quel endroit le programme se plante. J'ai essayé de récupérer l'état de plein de variables, mais tout va pour le mieux, c'est ça le problème.
    Je peux vous envoyer plus de code si vous voulez, mais y'en a un énorme paquet. Je prépare ça (j'enlève ce qui va bien et je prépare le programme à aller directement là où ça fait mal)

  15. #15
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En fait, si tu arrives à faire un programme minimal, qui reproduit l'erreur, tu devrais la cerner rapidement.

    Cela ressemble beaucoup à un null déréférencé. Reste à voir pourquoi.
    ça peut être quelque chose de ta faute explicite, mais aussi un cas pervers de fonction non appelée avant l'affichage (mais, je n'y crois pas)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par leternel Voir le message
    En fait, si tu arrives à faire un programme minimal, qui reproduit l'erreur, tu devrais la cerner rapidement.

    Cela ressemble beaucoup à un null déréférencé. Reste à voir pourquoi.
    ça peut être quelque chose de ta faute explicite, mais aussi un cas pervers de fonction non appelée avant l'affichage (mais, je n'y crois pas)
    Honnêtement, j'en sais rien. J'ai encore trop peu d'expérience.
    Cela-dit, en général le code lui-même marche assez bien, et la plupart de mes erreurs sont justement MES erreurs. Et c'est souvent très con =)

    OK, alors voici le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //	Programme: Démo technique GVSC
     
    #include <iostream>
    #include <windows.h>
    #include "MenuPrincipal.h"
     
    using namespace std;
     
    int main()
    // Programme principal
    {   MenuPrincipal();
    }
    Menuprincipal.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef MENUPRINCIPAL_H_INCLUDED
    #define MENUPRINCIPAL_H_INCLUDED
     
    void MenuPrincipal();
     
    #endif // MENUPRINCIPAL_H_INCLUDED
    MenuPrincipal.cpp (difficile à lire, paraît-il, mais j'ai pas trouvé de tutoriels qui traitent de la structure d'un programme, donc désolé ^^):
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    //	Programme: GVSC, démo technique
     
    #include <SFML/Graphics.hpp>
    #include <iostream>
    #include <windows.h>
    #include <string.h>
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctime>
     
    #include "MenuPrincipal.h"
    #include "Commande.h"
    #include "Sauvegarde.h"
    #include "Texte1.h"
    #include "Vignette1.h"
     
    using namespace std;
    using namespace sf;
     
    void MenuPrincipal()
    {   int width(GetSystemMetrics(SM_CXSCREEN)); // Récupérer résolution horizontale de l'écran
        int height(GetSystemMetrics(SM_CYSCREEN)); // Récupérer résolution verticale de l'écran
     
        Font fonte; // Fonte pour le texte des menus
        fonte.loadFromFile("Fontes/SuperMario256.ttf"); // Chargement d'un fichier font
     
        Color couleur; // Couleur pour le texte des menus
        couleur.r=255; couleur.g=100; couleur.b=0; couleur.a=255; // Création d'une couleur (rouge-orangé opaque)
     
        // Témoins d'exécution (en-cours / terminé)
        bool anim(true), cine(true), load(true);
     
        // Variable pour stocker à très court terme le résultat d'un calcul
        string calc1;
        int calc2;
     
        Texture textureImage[126];
        int temoinChargement[126];
        string caracteresEdition[76];
        double facteurDilatation[14];
        double facteurEntree[14];
        double facteurSortie[14];
        int facteurTransparence[14];
     
        // Index de sélection (fichier de sauvegarde, ligne...)
        int save(0), line(1);
     
        // Gestion du temps temps
        clock_t time1(clock()), time2; // Temps
        int step(0); // Cycles écoulés
        int cont(1); // Compteur de cycles
     
        // Variables de circulation (boucle Z)
        int z(100), y(0),   x(0); // Etape exploitée
        int z0(0),  y0(0),  x0(0); // Etape à exploiter après
     
        // Variables pour contenir la valeur des commandes
        double BoutonA(0.0), BoutonB(0.0), BoutonStart(0.0), FlecheHaut(0.0), FlecheBas(0.0), FlecheGauche(0.0), FlecheDroite(0.0), BoutonESC(0.0);
     
        // Variables pour contenir nom et score des fichiers
        string nom[5], score[5];
     
        // Déclarer la fenêtre
        RenderWindow window;
     
        // Afficher la fenêtre
        window.create(VideoMode(width, height), "GVSC", Style::Fullscreen);
     
        // Création des objets
        Texte1 TEXTE1_1(width, height, fonte, couleur, window);
        Vignette1 VIGNETTE1_1(width, height, fonte, couleur, window);
     
        while (z < 1000)
        {   switch (z) // Boucle Z
            /*  100 : INTRO
                110 : ACCUEIL
                120 : MAIN MENU
                130 : PLAY
                140 : BONUS
                170 : MINI-GAMES
            */
            {   case 100: // Z INTRO - chargement du contenu nécessaire au menu principal, caché par une cinématique puis, éventuellement, l'affichage de "LOADING..."
    //                Cinematique1 CINEMATIQUE(...);
     
                    switch (y)
                    {   case 0: // Y PREPARATION - effectuer le chargement, avec "load" comme témoin
                            load=false;
     
                            y=1; x=0; x0=1;
                        break;
                        case 1: // Y DISTRACTION - afficher la cinématique (pour cacher le chargement)
                            switch (x)
                            {   case 0: // Préparation de la cinématique
    //                                anim=ecran.CinematiqueSet("");
                                    x=1;
                                break;
                                case 1: // Animation de la cinématique
                                    if (anim == true) // Chargement en-cours, cinématique terminée
                                    {   TEXTE1_1.Set(5, "", "", "", "", "", "", "", "", "", "LOADING");
     
                                        x=2;
                                    }
                                    else if (anim == false) // Chargement en-cours, cinématique en-cours
                                    {   /*anim=ecran.CinematiqueAnim(step);*/
                                    }
                                break;
                                case 2: // Affichage de "LOADING"
                                    if (cont == 0)
                                    {   TEXTE1_1.Set(5, "", "", "", "", "", "", "", "", "", "LOADING"); // Réécrire Texte1
     
                                        cont+=step; // Incrémenter le compteur
                                    }
                                    else if (cont >= 15)
                                    {   cont=0; x=3; // Réinitialiser le compteur
                                    }
                                    else
                                    {   cont+=step; // Incrémenter le compteur
                                    }
     
                                    TEXTE1_1.Anim(step); // Animer Texte1
                                break;
                                case 3: // Affichage de "LOADING."
                                    if (cont == 0)
                                    {   TEXTE1_1.Set(5, "", "", "", "", "", "", "", "", "", "LOADING."); // Réécrire Texte1
     
                                        cont+=step; // Incrémenter le compteur
                                    }
                                    else if (cont >= 15)
                                    {   cont=0; x=4; // Réinitialiser le compteur
                                    }
                                    else
                                    {   cont+=step; // Incrémenter le compteur
                                    }
     
                                    TEXTE1_1.Anim(step); // Animer Texte1
                                break;
                                case 4: // Affichage de "LOADING.."
                                    if (cont == 0)
                                    {   TEXTE1_1.Set(5, "", "", "", "", "", "", "", "", "", "LOADING.."); // Réécrire Texte1
     
                                        cont+=step; // Incrémenter le compteur
                                    }
                                    else if (cont >= 15)
                                    {   cont=0; x=5; // Réinitialiser le compteur
                                    }
                                    else
                                    {   cont+=step; // Incrémenter le compteur
                                    }
     
                                    TEXTE1_1.Anim(step); // Animer Texte1
                                break;
                                case 5: // Affichage de "LOADING.."
                                    if (cont == 0)
                                    {   TEXTE1_1.Set(5, "", "", "", "", "", "", "", "", "", "LOADING..."); // Réécrire Texte1
     
                                        cont+=step; // Incrémenter le compteur
                                    }
                                    else if (cont >= 15)
                                    {   cont=0; x=2; // Réinitialiser le compteur
                                    }
                                    else
                                    {   cont+=step; // Incrémenter le compteur
                                    }
     
                                    TEXTE1_1.Anim(step); // Animer Texte1
                                break;
                            }
     
                            y=2; // Aller à chargement
                        break;
                        case 2: // Y CHARGEMENT
                            switch (x0) // Chargement pour l'ensemble du menu principal
                            {   case 1:
                                    if (temoinChargement[0] != 1)
                                    {   textureImage[0].loadFromFile("ContenuGraphique/Fond_BleuDegrade.png");
                                        temoinChargement[0]=1;
                                    }
                                    x0=2;
                                break;
                                case 2:
                                    if (temoinChargement[1] != 1)
                                    {   textureImage[1].loadFromFile("ContenuGraphique/Bandeau_TracesChat.png");
                                        temoinChargement[1]=1;
                                    }
                                    x0=3;
                                break;
                                case 3:
                                    if (temoinChargement[2] != 1)
                                    {   textureImage[2].loadFromFile("ContenuGraphique/Bandeau_NoirFondu.png");
                                        temoinChargement[2]=1;
                                    }
                                    x0=112;
                                break;
                                case 112:
                                    if (temoinChargement[110] != 1)
                                    {   textureImage[110].loadFromFile("ContenuGraphique/Vignette_Pacman_0.png");
                                        temoinChargement[110]=1;
                                    }
                                    x0=113;
                                break;
                                case 113:
                                    if (temoinChargement[111] != 1)
                                    {   textureImage[111].loadFromFile("ContenuGraphique/Vignette_Pacman_1.png");
                                        temoinChargement[111]=1;
                                    }
                                    x0=114;
                                break;
                                case 114:
                                    if (temoinChargement[112] != 1)
                                    {   textureImage[112].loadFromFile("ContenuGraphique/Vignette_Pacman_2.png");
                                        temoinChargement[112]=1;
                                    }
                                    x0=115;
                                break;
                                case 115:
                                    if (temoinChargement[113] != 1)
                                    {   textureImage[113].loadFromFile("ContenuGraphique/Vignette_Pacman_3.png");
                                        temoinChargement[113]=1;
                                    }
                                    x0=116;
                                break;
                                case 116:
                                    if (temoinChargement[114] != 1)
                                    {   textureImage[114].loadFromFile("ContenuGraphique/Vignette_Pacman_4.png");
                                        temoinChargement[114]=1;
                                    }
                                    x0=117;
                                break;
                                case 117:
                                    if (temoinChargement[115] != 1)
                                    {   textureImage[115].loadFromFile("ContenuGraphique/Vignette_Pacman_5.png");
                                        temoinChargement[115]=1;
                                    }
                                    x0=118;
                                break;
                                case 118:
                                    if (temoinChargement[116] != 1)
                                    {   textureImage[116].loadFromFile("ContenuGraphique/Vignette_Pacman_6.png");
                                        temoinChargement[116]=1;
                                    }
                                    x0=119;
                                break;
                                case 119:
                                    if (temoinChargement[117] != 1)
                                    {   textureImage[117].loadFromFile("ContenuGraphique/Vignette_Pacman_7.png");
                                        temoinChargement[117]=1;
                                    }
                                    x0=120;
                                break;
                                case 120:
                                    if (temoinChargement[118] != 1)
                                    {   textureImage[118].loadFromFile("ContenuGraphique/Vignette_Pacman_8.png");
                                        temoinChargement[118]=1;
                                    }
                                    x0=121;
                                break;
                                case 121:
                                    if (temoinChargement[119] != 1)
                                    {   textureImage[119].loadFromFile("ContenuGraphique/Vignette_Pacman_9.png");
                                        temoinChargement[119]=1;
                                    }
                                    x0=122;
                                break;
                                case 122:
                                    if (temoinChargement[120] != 1)
                                    {   textureImage[120].loadFromFile("ContenuGraphique/Vignette_Pacman_10.png");
                                        temoinChargement[120]=1;
                                    }
                                    x0=123;
                                break;
                                case 123:
                                    if (temoinChargement[121] != 1)
                                    {   textureImage[121].loadFromFile("ContenuGraphique/Vignette_Pacman_11.png");
                                        temoinChargement[121]=1;
                                    }
                                    x0=124;
                                break;
                                case 124:
                                    if (temoinChargement[122] != 1)
                                    {   textureImage[122].loadFromFile("ContenuGraphique/Vignette_Pacman_12.png");
                                        temoinChargement[122]=1;
                                    }
                                    x0=125;
                                break;
                                case 125:
                                    if (temoinChargement[123] != 1)
                                    {   textureImage[123].loadFromFile("ContenuGraphique/Vignette_Pacman_13.png");
                                        temoinChargement[123]=1;
                                    }
                                    x0=126;
                                break;
                                case 126:
                                    if (temoinChargement[124] != 1)
                                    {   textureImage[124].loadFromFile("ContenuGraphique/Vignette_Pacman_14.png");
                                        temoinChargement[124]=1;
                                    }
                                    x0=127;
                                break;
                                case 127:
                                    if (temoinChargement[125] != 1)
                                    {   textureImage[125].loadFromFile("ContenuGraphique/Vignette_Pacman_15.png");
                                        temoinChargement[125]=1;
                                    }
                                    x0=128;
                                break;
                                case 128:
                                    if (temoinChargement[126] != 1)
                                    {   textureImage[126].loadFromFile("ContenuGraphique/Vignette_Pacman_16.png");
                                        temoinChargement[126]=1;
                                    }
                                    x0=129;
                                break;
                                case 129:
                                    caracteresEdition[0]="A"; caracteresEdition[1]="B"; caracteresEdition[2]="C"; caracteresEdition[3]="D"; caracteresEdition[4]="E";  caracteresEdition[5]="F"; caracteresEdition[6]="G"; caracteresEdition[7]="H"; caracteresEdition[8]="I";  caracteresEdition[9]="J"; caracteresEdition[10]="K"; caracteresEdition[11]="L"; caracteresEdition[12]="M"; caracteresEdition[13]="N"; caracteresEdition[14]="O"; caracteresEdition[15]="P"; caracteresEdition[16]="Q"; caracteresEdition[17]="R"; caracteresEdition[18]="S"; caracteresEdition[19]="T"; caracteresEdition[20]="U"; caracteresEdition[21]="V"; caracteresEdition[22]="W"; caracteresEdition[23]="X"; caracteresEdition[24]="Y"; caracteresEdition[25]="Z"; caracteresEdition[26]=" "; caracteresEdition[27]="0"; caracteresEdition[28]="1"; caracteresEdition[29]="2"; caracteresEdition[30]="3"; caracteresEdition[31]="4"; caracteresEdition[32]="5"; caracteresEdition[33]="6"; caracteresEdition[34]="7"; caracteresEdition[35]="8"; caracteresEdition[36]="9"; caracteresEdition[37]="OK"; caracteresEdition[38]=" 7  8  9 OK     B  C  D  E "; caracteresEdition[39]=" 8  9 OK  A     C  D  E  F "; caracteresEdition[40]=" 9 OK  A  B     D  E  F  G "; caracteresEdition[41]="OK  A  B  C     E  F  G  H "; caracteresEdition[42]=" A  B  C  D     F  G  H  I "; caracteresEdition[43]=" B  C  D  E     G  H  I  J "; caracteresEdition[44]=" C  D  E  F     H  I  J  K "; caracteresEdition[45]=" D  E  F  G     I  J  K  L "; caracteresEdition[46]=" E  F  G  H     J  K  L  M "; caracteresEdition[47]=" F  G  H  I     K  L  M  N "; caracteresEdition[48]=" G  H  I  J     L  M  N  O "; caracteresEdition[49]=" H  I  J  K     M  N  O  P "; caracteresEdition[50]=" I  J  K  L     N  O  P  Q "; caracteresEdition[51]=" J  K  L  M     O  P  Q  R "; caracteresEdition[52]=" K  L  M  N     P  Q  R  S "; caracteresEdition[53]=" L  M  N  O     Q  R  S  T "; caracteresEdition[54]=" M  N  O  P     R  S  T  U "; caracteresEdition[55]=" N  O  P  Q     S  T  U  V "; caracteresEdition[56]=" O  P  Q  R     T  U  V  W "; caracteresEdition[57]=" P  Q  R  S     U  V  W  X "; caracteresEdition[58]=" Q  R  S  T     V  W  X  Y "; caracteresEdition[59]=" R  S  T  U     W  X  Y  Z "; caracteresEdition[60]=" S  T  U  V     X  Y  Z    "; caracteresEdition[61]=" T  U  V  W     Y  Z     0 "; caracteresEdition[62]=" U  V  W  X     Z     0  1 "; caracteresEdition[63]=" V  W  X  Y        0  1  2 "; caracteresEdition[64]=" W  X  Y  Z     0  1  2  3 "; caracteresEdition[65]=" X  Y  Z        1  2  3  4 "; caracteresEdition[66]=" Y  Z     0     2  3  4  5 "; caracteresEdition[67]=" Z     0  1     3  4  5  6 "; caracteresEdition[68]="    0  1  2     4  5  6  7 "; caracteresEdition[69]=" 0  1  2  3     5  6  7  8 "; caracteresEdition[70]=" 1  2  3  4     6  7  8  9 "; caracteresEdition[71]=" 2  3  4  5     7  8  9 OK "; caracteresEdition[72]=" 3  4  5  6     8  9 OK  A "; caracteresEdition[73]=" 4  5  6  7     9 OK  A  B "; caracteresEdition[74]=" 5  6  7  8    OK  A  B  C "; caracteresEdition[75]=" 6  7  8  9    A  B  C  D ";
                                    x0=130;
                                break;
                                case 130:
                                    facteurDilatation[0]=1.000; facteurDilatation[1]=1.005; facteurDilatation[2]=1.026; facteurDilatation[3]=1.074; facteurDilatation[4]=1.095; facteurDilatation[5]=1.100; facteurDilatation[6]=1.100; facteurDilatation[7]=1.100; facteurDilatation[8]=1.095; facteurDilatation[9]=1.074; facteurDilatation[10]=1.026; facteurDilatation[11]=1.005; facteurDilatation[12]=1.000; facteurDilatation[13]=1.000;
                                    x0=131;
                                break;
                                case 131:
                                    facteurEntree[0]=width; facteurEntree[1]=width*0.996; facteurEntree[2]=width*0.978; facteurEntree[3]=width*0.939; facteurEntree[4]=width*0.870; facteurEntree[5]=width*0.762; facteurEntree[6]=width*0.606; facteurEntree[7]=width*0.394; facteurEntree[8]=width*0.238; facteurEntree[9]=width*0.130; facteurEntree[10]=width*0.061; facteurEntree[11]=width*0.022; facteurEntree[12]=width*0.004; facteurEntree[13]=0.000;
                                    x0=132;
                                break;
                                case 132:
                                    facteurSortie[0]=0.000; facteurSortie[1]=-width*0.004; facteurSortie[2]=-width*0.022; facteurSortie[3]=-width*0.061; facteurSortie[4]=-width*0.130; facteurSortie[5]=-width*0.238; facteurSortie[6]=-width*0.394; facteurSortie[7]=-width*0.606; facteurSortie[8]=-width*0.762; facteurSortie[9]=-width*0.870; facteurSortie[10]=-width*0.939; facteurSortie[11]=-width*0.978; facteurSortie[12]=-width*0.996; facteurSortie[13]=-width;
                                    x0=133;
                                break;
                                case 133:
                                    facteurTransparence[0]=0; facteurTransparence[1]=1; facteurTransparence[2]=6; facteurTransparence[3]=15; facteurTransparence[4]=33; facteurTransparence[5]=61; facteurTransparence[6]=100; facteurTransparence[7]=155; facteurTransparence[8]=194; facteurTransparence[9]=222; facteurTransparence[10]=240; facteurTransparence[11]=249; facteurTransparence[12]=254; facteurTransparence[13]=255;
                                    x0=134;
                                break;
                                case 134:
                                    TEXTE1_1.Cstr(facteurDilatation, facteurEntree, facteurSortie);
                                    x0=140;
                                break;
                                case 140:
                                    Texture tableau1[17]={textureImage[110], textureImage[111], textureImage[112], textureImage[113], textureImage[114], textureImage[115], textureImage[116], textureImage[117], textureImage[118], textureImage[119], textureImage[120], textureImage[121], textureImage[122], textureImage[123], textureImage[124], textureImage[125], textureImage[126]};
     
                                    VIGNETTE1_1.Cstr(facteurDilatation, facteurEntree, facteurSortie, tableau1);
                                    x0=0; load=true;
                                break;
                            }
     
                            if (load == true) // Chargement terminé
                            {   if (anim == true) // Cinématique terminée
                                {   z=110; y=0; x=0;
                                }
                                else if (anim == false) // Cinématique en-cours
                                {   BoutonA=Commande(1); BoutonStart=Commande(5);
     
                                    if (BoutonA != 0.0 || BoutonStart != 0.0) // Bouton pressé
                                    {   z=110; y=0; x=0;
                                    }
                                }
                            }
                            else if (load == false) // Chargement en cours
                            {   if (anim == true) // Cinématique terminée
                                {   TEXTE1_1.Anim(step);
                                }
                                else if (anim == false) // Cinématique en-cours
                                {   /*anim=cinematique.Anim(step);*/
                                }
     
                                y=1; // Aller à distraction
                            }
                        break; // Y CHARGEMENT (fin)
                    }
                break; // INTRO (fin)
     
                case 110: // Z ACCUEIL
                // Jouer le thème principal
                // Afficher le fond d'écran principal
                // Afficher "PRESS START", puis "PRESS START PLEASE"
                // Jouer le MONTRER et afficher "PRESS START"
                {   switch (y)
                    {   case 0: // Y PREPARATION
                            VIGNETTE1_1.Set();
                            VIGNETTE1_1.Cine(0);
     
                            y=1; x=0; // Passer automatiquement à l'étape suivante
                        break; // Y PREPARATION (fin)
     
                        case 1: // Y ECRAN 1 (PRESS START)
                            VIGNETTE1_1.Anim(step);
                        break; // ECRAN 1 (fin)
                    }
                }
                break; // ACCUEIL (fin)
            }
     
            if (load == true) // Chargement pas en cours
            {   window.display(); // Afficher tout le contenu de l'écran
     
                time2=clock(); // Réinitialiser le compteur de temps
     
                calc2=1000*(time2-time1)/CLOCKS_PER_SEC; // Calcul du temps écoulé pendant le dernier cycle
     
                step=1+(calc2-(calc2%33))/33; // Calculer combien de cycles de 0.033 seconde se sont écoulés
     
                Sleep(33-(calc2%33)); // Attendre jusqu'à ce que 0.033 seconde (respectivement un multiple) se soit écoulé
     
                time1=clock(); // Réinitialiser le compteur de temps
     
                window.clear(); // Effacer tout le contenu de la fenêtre
     
                BoutonESC=(Commande(18));
     
                if (BoutonESC != 0.0)   {z=1000;} // Sortie si on appuie sur ESCAPE
            }
            else if (load == false) // Chargement en cours
            {   window.display(); // Afficher tout le contenu de l'écran
     
                time2=clock(); // Réinitialiser le compteur de temps
     
                calc2=1000*(time2-time1)/CLOCKS_PER_SEC; // Calcul du temps écoulé pendant le dernier cycle
     
                if (calc2 < 0.033) // Temps de cycle maximum pas atteint
                {   step=0;
     
                    time1=clock(); // Réinitialiser le compteur de temps
                }
                else // Temps de cycle maximum atteint
                {   step=1+(calc2-(calc2%33))/33; // Calculer combien de cycles de 0.033 seconde se sont écoulés
     
                    time1=clock(); // Réinitialiser le compteur de temps
     
                    window.clear(); // Effacer tout le contenu de la fenêtre
     
                    BoutonESC=(Commande(18));
     
                    if (BoutonESC != 0.0)   {z=1000;} // Sortie si on appuie sur ESCAPE
                }
            }
        }
     
        cout << "Fin de l'execution" << endl;
    }
    Texte1.h
    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
    #ifndef TEXTE1_H_INCLUDED
    #define TEXTE1_H_INCLUDED
     
    #include <SFML/Graphics.hpp>
    #include <string>
     
    using namespace sf;
    using namespace std;
     
    class Texte1 // Afficher le menu Texte1
    {   private:
            // Variables remplies par le constructeur
            double width;
            double height;
            Font fonte; // Fonte pour le texte
            Color couleur; // Couleur pour le texte
            RenderWindow & window;
     
            // Autres variables
            double heightText; // Dimensions de l'écran et du texte
            int options, selection; // Nombre d'options, index de sélection
            int zTexte, iTexte; // Index d'animation
            Text texte1, texte2, texte3, texte4, texte5, texte1_1, texte2_1, texte3_1, texte4_1, texte5_1; // Objets "texte"
            double x1, x2, x3, x4, x5, x1_1, x2_1, x3_1, x4_1, x5_1; // Coordonnées X
            double y1, y2, y3, y4, y5, y1_1, y2_1, y3_1, y4_1, y5_1; // Coordonnées Y
            double facteurDilatation[14], facteurEntree[14], facteurSortie[14]; // Tableaux
            double calc1, calc2; // Variables de travail
            double X, j; // Valeurs de modification, pour l'animation
            bool retourTexte; // Témoin d'animation
     
        public:
            Texte1(double a, double b, Font c, Color d, RenderWindow & e); // Constructeur
     
            void Cstr(double a[], double b[], double c[]); // Constructeur complémentaire
     
            bool Set(int a, string t1, string t2, string t3, string t4, string t5, string t1_1, string t2_1, string t3_1, string t4_1, string t5_1); // Constructeur
     
            void Cine(int a); // Choisit l'animation à réaliser
     
            int Move(int a); // Change la ligne sélectionnée
     
            bool Anim(int a); // Animer Texte1
    };
     
    #endif // TEXTE1_H_INCLUDED
    Texte1.cpp:
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    #include <SFML/Graphics.hpp>
    #include <iostream>
    #include <windows.h>
    #include <string.h>
    #include <math.h>
    #include <cstdlib>
    #include "Texte1.h"
     
    using namespace std;
    using namespace sf;
     
    // Implémentation des méthodes de la classe
        Texte1::Texte1(double a, double b, Font c, Color d, RenderWindow & e): // Constructeur
        width(a), height(b), fonte(c), couleur(d), window(e) // Liste d'initialisation
        {   heightText=height/13; // Taille du texte pour les lignes principales
     
            // Attribution de la fonte au texte
            texte1.setFont(fonte);      texte2.setFont(fonte);      texte3.setFont(fonte);      texte4.setFont(fonte);      texte5.setFont(fonte);
            texte1_1.setFont(fonte);    texte2_1.setFont(fonte);    texte3_1.setFont(fonte);    texte4_1.setFont(fonte);    texte5_1.setFont(fonte);
     
            // Colorer le texte
            texte1.setColor(couleur);   texte2.setColor(couleur);   texte3.setColor(couleur);   texte4.setColor(couleur);   texte5.setColor(couleur);
            texte1_1.setColor(couleur); texte2_1.setColor(couleur); texte3_1.setColor(couleur); texte4_1.setColor(couleur); texte5_1.setColor(couleur);
     
            // Style du texte (normal)
            texte1.setStyle(0);     texte2.setStyle(0);     texte3.setStyle(0);     texte4.setStyle(0);     texte5.setStyle(0);
            texte1_1.setStyle(0);   texte2_1.setStyle(0);   texte3_1.setStyle(0);   texte4_1.setStyle(0);   texte5_1.setStyle(0);
     
            // Coordonnée X des lignes principales
            x1=width/2;
            x1_1=2*width/3;
     
            // Présélection par-défaut de l'animation zéro
            zTexte=4;
        }
     
        void Texte1::Cstr(double a[], double b[], double c[]) // Constructeur complémentaire
        {   // Récupération des tableaux
            int z(0);   while (z < 14)  {facteurDilatation[z]=a[z]; z++;}
            z=0;        while (z < 14)  {facteurEntree[z]=b[z];     z++;}
            z=0;        while (z < 14)  {facteurSortie[z]=c[z];     z++;}
        }
     
        bool Texte1::Set(int a, string t1, string t2, string t3, string t4, string t5, string t1_1, string t2_1, string t3_1, string t4_1, string t5_1) // Constructeur
        {   options=a; // Récupération du nombre d'options
            selection=1; // Présélection de la première ligne
     
            // Contenu du texte
            texte1.setString(t1);       texte2.setString(t2);       texte3.setString(t3);       texte4.setString(t4);       texte5.setString(t5);
            texte1_1.setString(t1_1);   texte2_1.setString(t2_1);   texte3_1.setString(t3_1);   texte4_1.setString(t4_1);   texte5_1.setString(t5_1);
     
            // Coordonnée Y des lignes principales et secondaires
            y1=(7-options)*heightText;
            y1_1=y1+heightText;   y2=y1_1+heightText;   y2_1= y2+heightText;    y3=y2_1+heightText; y3_1=y3+heightText; y4=y3_1+heightText; y4_1=y4+heightText; y5=y4_1+heightText; y5_1=y5+heightText;
     
            return(false);
        }
     
        void Texte1::Cine(int a) // Choisit l'animation à réaliser
        {   /*  a : animation à réaliser
                    0 : standard
                    1 : entrée en glissant par la droite
                    2 : sortie en glissant par la gauche
                    3 : sortie en glissant par la droite
                    4 : animation zéro (ne rien faire)
            */
            zTexte=a; // Effectuer l'animation demandée
            iTexte=0; // Réinitialiser iTexte
     
            X=0; // Parce qu'on utilise X dans l'animation
     
            // Taille des lignes principales et secondaires
            calc1=2*heightText/3; // Taille du texte pour les lignes secondaires
            texte1.setCharacterSize(heightText);    texte2.setCharacterSize(heightText);    texte3.setCharacterSize(heightText);    texte4.setCharacterSize(heightText);    texte5.setCharacterSize(heightText);
            texte1_1.setCharacterSize(calc1);   texte2_1.setCharacterSize(calc1);   texte3_1.setCharacterSize(calc1);   texte4_1.setCharacterSize(calc1);   texte5_1.setCharacterSize(calc1);
     
            // Origine au centre
            texte1.setOrigin(texte1.getGlobalBounds().width/2, texte1.getGlobalBounds().height/2);  texte2.setOrigin(texte2.getGlobalBounds().width/2, texte2.getGlobalBounds().height/2);  texte3.setOrigin(texte3.getGlobalBounds().width/2, texte3.getGlobalBounds().height/2);  texte4.setOrigin(texte4.getGlobalBounds().width/2, texte4.getGlobalBounds().height/2);  texte5.setOrigin(texte5.getGlobalBounds().width/2, texte5.getGlobalBounds().height/2);
            texte1_1.setOrigin(texte1_1.getGlobalBounds().width/2, texte1_1.getGlobalBounds().height/2);    texte2_1.setOrigin(texte2_1.getGlobalBounds().width/2, texte2_1.getGlobalBounds().height/2);    texte3_1.setOrigin(texte3_1.getGlobalBounds().width/2, texte3_1.getGlobalBounds().height/2);    texte4_1.setOrigin(texte4_1.getGlobalBounds().width/2, texte4_1.getGlobalBounds().height/2);    texte5_1.setOrigin(texte5_1.getGlobalBounds().width/2, texte5_1.getGlobalBounds().height/2);
     
            retourTexte=false; // Témoin en-cours/terminé
        }
     
        int Texte1::Move(int a) // Change la ligne sélectionnée
        {   // a : mouvement à effectuer (+ = descendre ; 0 = rester ; - = monter)
            // renvoie le numéro de la ligne sélectionnée
     
            // Détermination de la nouvelle ligne sélectionnée
            if (a > 0) // Si l'utilisateur veut descendre dans le menu
            {   selection+=a; // Descendre
     
                if (selection > options)   {selection=1;}
            }
            else if (a < 0) // Si l'utilisateur veut monter dans le menu
            {   selection+=a; // Monter
     
                if (selection < 1)     {selection=options;}
            }
     
            return(selection); // Renvoyer le numéro de la ligne sélectionnée
        }
     
        bool Texte1::Anim(int a) // Animer Texte1
        {   // a : nombre d'étapes à passer dans l'animation
            // renvoie l'état de l'animation (en cours / terminée)
     
            iTexte+=a; // Incrémenter l'index d'animation
     
            switch (zTexte)
            {   case 0: // Animation standard de la ligne sélectionnée
                    if (iTexte >= 14)    {iTexte-=14;} // Ne pas dépasser 14
     
                    j=facteurDilatation[iTexte]; // Prendre le facteur
     
                    switch (selection) // Appliquer l'animation à la ligne de texte sélectionnée
                    {   case 1: // Animation de la ligne 1
                            texte1.setCharacterSize(j*heightText);
                            texte1_1.setCharacterSize(j*2*heightText/3); // Modifier de la taille du texte
     
                            texte1.setOrigin(texte1.getGlobalBounds().width/2, texte1.getGlobalBounds().height/2);
                            texte1_1.setOrigin(texte1_1.getGlobalBounds().width/2, texte1_1.getGlobalBounds().height/2);
                        break;
                        case 2: // Animation de la ligne 2
                            texte2.setCharacterSize(j*heightText);
                            texte2_1.setCharacterSize(j*2*heightText/3); // Modifier de la taille du texte
     
                            texte2.setOrigin(texte2.getGlobalBounds().width/2, texte2.getGlobalBounds().height/2);
                            texte2_1.setOrigin(texte2_1.getGlobalBounds().width/2, texte2_1.getGlobalBounds().height/2); // Origine au centre
                        break;
                        case 3: // Animation de la ligne 3
                            texte3.setCharacterSize(j*heightText);
                            texte3_1.setCharacterSize(j*2*heightText/3); // Modifier de la taille du texte
     
                            texte3.setOrigin(texte3.getGlobalBounds().width/2, texte3.getGlobalBounds().height/2);
                            texte3_1.setOrigin(texte3_1.getGlobalBounds().width/2, texte3_1.getGlobalBounds().height/2); // Origine au centre
                        break;
                        case 4: // Animation de la ligne 4
                            texte4.setCharacterSize(j*heightText);
                            texte4_1.setCharacterSize(j*2*heightText/3); // Modifier de la taille du texte
     
                            texte4.setOrigin(texte4.getGlobalBounds().width/2, texte4.getGlobalBounds().height/2);
                            texte4_1.setOrigin(texte4_1.getGlobalBounds().width/2, texte4_1.getGlobalBounds().height/2); // Origine au centre
                        break;
                        case 5: // Animation de la ligne 5
                            texte5.setCharacterSize(j*heightText);
                            texte5_1.setCharacterSize(j*2*heightText/3); // Modifier de la taille du texte
     
                            texte5.setOrigin(texte5.getGlobalBounds().width/2, texte5.getGlobalBounds().height/2);
                            texte5_1.setOrigin(texte5_1.getGlobalBounds().width/2, texte5_1.getGlobalBounds().height/2); // Origine au centre
                        break;
                    }
                break;
                case 1: // Entrée en glissant par la droite
                    if (iTexte >= 14)  // Dernière étape atteinte: ne pas dépasser,
                    {   iTexte=13;
     
                        retourTexte=true;
                    }
     
                    X=facteurEntree[iTexte]; // Prendre le facteur
                break;
                case 2: // Sortie en glissant par la gauche
                    if (iTexte >= 14)  // Ne pas dépasser 14
                    {   iTexte=13;
     
                        retourTexte=true;
                    }
     
                    X=facteurSortie[iTexte]; // Prendre le facteur
                break;
                case 3: // Sortie en glissant par la droite
                    if (iTexte >= 14)  // Ne pas dépasser 14
                    {   iTexte=13;
     
                        retourTexte=true;
                    }
     
                    X=-facteurSortie[iTexte]; // Prendre le facteur
                break;
                case 4: // Animation zéro (ne rien faire)
                break;
            }
     
            // Positionner les lignes de texte
            calc1=x1+X; calc2=x1_1+X;
            texte1.setPosition(calc1, y1);  texte2.setPosition(calc1, y2);  texte3.setPosition(calc1, y3);  texte4.setPosition(calc1, y4);  texte5.setPosition(calc1, y5);
            texte1_1.setPosition(calc2, y1_1);  texte2_1.setPosition(calc2, y2_1);  texte3_1.setPosition(calc2, y3_1);  texte4_1.setPosition(calc2, y4_1);  texte5_1.setPosition(calc2, y5_1);
     
            // Préparation à l'affichage
            window.draw(texte1);    window.draw(texte2);    window.draw(texte3);    window.draw(texte4);    window.draw(texte5);
            window.draw(texte1_1);  window.draw(texte2_1);  window.draw(texte3_1);  window.draw(texte4_1);  window.draw(texte5_1);
     
        return(retourTexte); // Animation en cours
    }
    Vignette1.h:
    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
    #ifndef VIGNETTE1_H_INCLUDED
    #define VIGNETTE1_H_INCLUDED
     
    #include <SFML/Graphics.hpp>
    #include <string>
     
    using namespace sf;
    using namespace std;
     
    class Vignette1 // Afficher le menu Vignette1
    {   private:
            // Variables remplies par le constructeur
            double width;
            double height;
            Font fonte; // Fonte pour le texte
            Color couleur; // Couleur pour le texte
            RenderWindow & window;
     
            // Autres variables
            double heightText; // Variables contenant les dimensions de l'écran et du texte
            int options, selection; // Gestion des options et de la sélection
            int zVignette, iVignette; // Index d'animation
            Text texte1, texte2; // Objets "texte"
            double x1, x2, xVignette[16]; // Coordonnées X
            double y1, y2, yVignette[16]; // Coordonnées Y
            double facteurDilatation[14], facteurEntree[14], facteurSortie[14];
            Texture textureVignette[17];
            Sprite vignette[16]; // Tableaux
            string txt[32];
            double calc1, calc2;
            int calc3; // Variables de travail
            double X, j; // Valeurs de modification, pour l'animation
            bool retourVignette; // Témoin d'animation
     
        public:
            Vignette1(double a, double b, Font c, Color d, RenderWindow & e); // Constructeur
     
            void Cstr(double a[], double b[], double c[], Texture d[]); // Constructeur complémentaire
     
            bool Set(); // Constructeur
     
            void Cine(int a); // Choisit l'animation à réaliser
     
            int Move(int a, int b); // Change la ligne sélectionnée
     
            bool Anim(int a); // Animer Vignette1
    };
     
    #endif // VIGNETTE1_H_INCLUDED
    Vignette1.cpp:
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    #include <SFML/Graphics.hpp>
    #include <iostream>
    #include <windows.h>
    #include <string.h>
    #include <cstdlib>
    #include "Vignette1.h"
    #include "Sauvegarde.h"
     
    using namespace std;
    using namespace sf;
     
    // Implémentation des méthodes de la classe
    Vignette1::Vignette1(double a, double b, Font c, Color d, RenderWindow & e): // Constructeur
    width(a), height(b), fonte(c), couleur(d), window(e)
    {   heightText=height/13; // Taille du texte pour les lignes principales
     
        // Attribution de la fonte au texte
        texte1.setFont(fonte);      texte2.setFont(fonte);
     
        // Colorer le texte
        texte1.setColor(couleur);   texte2.setColor(couleur);
     
        // Style du texte (normal)
        texte1.setStyle(0);     texte2.setStyle(0);
     
        // Taille du texte
        texte1.setCharacterSize(heightText);    texte2.setCharacterSize(2*heightText/3);
     
        // Préparer les coordonnées X
        x1=width/2; x2=2*width/3;
        calc1=width/5;      xVignette[0]=calc1;  xVignette[1]=calc1;  xVignette[2]=calc1;  xVignette[3]=calc1;
        calc1=2*width/5;    xVignette[4]=calc1;  xVignette[5]=calc1;  xVignette[6]=calc1;  xVignette[7]=calc1;
        calc1=3*width/5;    xVignette[8]=calc1;  xVignette[9]=calc1;  xVignette[10]=calc1; xVignette[11]=calc1;
        calc1=4*width/5;    xVignette[12]=calc1; xVignette[13]=calc1; xVignette[14]=calc1; xVignette[15]=calc1;
     
        // Préparer les coordonnées Y
        y1=1.5*heightText;  y2=y1+heightText;
        calc1=2.5*heightText;   yVignette[0]=calc1;  yVignette[4]=calc1;  yVignette[8]=calc1;  yVignette[12]=calc1;
        calc1=5*heightText;     yVignette[1]=calc1;  yVignette[5]=calc1;  yVignette[9]=calc1;  yVignette[13]=calc1;
        calc1=7.5*heightText;   yVignette[2]=calc1;  yVignette[6]=calc1;  yVignette[10]=calc1; yVignette[14]=calc1;
        calc1=10*heightText;    yVignette[3]=calc1;  yVignette[7]=calc1;  yVignette[11]=calc1; yVignette[15]=calc1;
     
        // Attribution du texte
        texte1.setPosition(x1, y1);   texte2.setPosition(x2, y2);
    }
     
    void Vignette1::Cstr(double a[], double b[], double c[], Texture d[]) // Constructeur
    {   // Récupération des tableaux
        calc3=0;   while (calc3 < 14)       {facteurDilatation[calc3]=a[calc3]; calc3++;}
        calc3=0;        while (calc3 < 14)  {facteurEntree[calc3]=b[calc3];     calc3++;}
        calc3=0;        while (calc3 < 14)  {facteurSortie[calc3]=c[calc3];     calc3++;}
        calc3=0;        while (calc3 < 17)  {textureVignette[calc3]=d[calc3];   calc3++;}
    }
     
    bool Vignette1::Set()
    {   options=16; // Récupération du nombre d'options
        selection=1; // Présélection de la première ligne
     
        // Récupérer les noms et les scores dans les fichiers de sauvegarde
        calc3=0; // Préparation de l'index
        while (calc3 < 16)
        {   txt[calc3]=Sauvegarde(101+calc3, 0, ""); // Remplissage des cases 0 à 15
     
            calc3++;
        }
        while (calc3 < 16)
        {   txt[calc3+16]=Sauvegarde(101+calc3, 1, ""); // Remplissage des cases 16 à 31
     
            calc3++;
        }
     
        // Attribution des textures aux sprites
        calc3=0; // Préparation de l'index
        while (calc3 < 16)
        {   if (txt[calc3+16] == "")
            {   vignette[calc3].setTexture(textureVignette[0]);
            }
            else
            {   vignette[calc3].setTexture(textureVignette[calc3]);
            }
     
            calc3++;
        }
     
        // Redimensionnement des sprites
        calc1=width/7/vignette[0].getGlobalBounds().width;    calc2=height/7/vignette[0].getGlobalBounds().height;  calc3=0;
        while (calc3 < 16)
        {   vignette[calc3].scale(calc1, calc2);
     
            calc3++;
        }
     
        // Redéfinir l'origine
        calc1=vignette[0].getGlobalBounds().width/2;  calc2=vignette[0].getGlobalBounds().height/2; calc3=0;
        while (calc3 < 16)
        {   vignette[calc3].setOrigin(calc1, calc2);
     
            calc3++;
        }
     
    // PROBLEME ICI
        // Attribution du texte
        texte1.setString(txt[0]);   texte2.setString(txt[16]);
    // PROBLEME ICI
     
        // Redéfinir l'origine
        texte1.setOrigin(texte1.getGlobalBounds().width/2, texte1.getGlobalBounds().height/2);  texte2.setOrigin(texte2.getGlobalBounds().width/2, texte2.getGlobalBounds().height/2);
     
        return(false);
    }
     
    void Vignette1::Cine(int a) // Choisit l'animation à réaliser
    {   /*  a : animation à réaliser
            0 : standard
            1 : entrée en glissant par la droite
            2 : sortie en glissant par la gauche
            3 : sortie en glissant par la droite
            4 : animation zéro
        */
        zVignette=a; // Effectuer l'animation demandée
        iVignette=0; // Réinitialiser iTexte
     
        X=0; // Parce qu'on utilise X dans l'animation
        j=1; // Parce qu'on utilise j dans l'animation
     
        retourVignette=false; // Témoin en-cours/terminé
    }
     
    int Vignette1::Move(int a, int b) // Change la ligne sélectionnée
    {   // a : mouvement vertical à effectuer (+ = descendre ; 0 = rester ; - = monter)
        // b : mouvement horizontal à effectuer (+ = aller à-droite ; 0 = rester ; - = aller à-gauche)
        // renvoie le numéro de la ligne sélectionnée (1 à 4 sur la première ligne, 5 à 8 sur la deuxième...
     
        // Mouvement vertical
        if (a > 0) // Si l'utilisateur veut descendre dans le menu
        {   selection+=a; // Descendre
     
            if (selection > 16)   {selection=1;}
        }
        else if (a < 0) // Si l'utilisateur veut monter dans le menu
        {   selection+=a; // Monter
     
            if (selection < 1)     {selection=16;}
        }
     
        // Mouvement horizontal
        if (a > 0) // Si l'utilisateur veut aller à-droite dans le menu
        {   selection+=4*a; // Descendre
     
            if (selection > 16)   {selection=1;}
        }
        else if (a < 0) // Si l'utilisateur veut aller à-gauche dans le menu
        {   selection+=4*a; // Monter
     
            if (selection < 1)     {selection=16;}
        }
     
        // Redéfinir le contenu
        texte1.setString(txt[selection-1]); texte2.setString(txt[selection+15]);
     
        // Redéfinir l'origine
        texte1.setOrigin(texte1.getGlobalBounds().width/2, heightText/2);   texte2.setOrigin(texte2.getGlobalBounds().width/2, heightText/3);
     
        return(selection); // Renvoyer le numéro de la ligne sélectionnée
    }
     
    bool Vignette1::Anim(int a) // Animer Vignette1
    {   // a : nombre d'étapes à passer dans l'animation
        // renvoie l'état de l'animation (en cours / terminée)
     
        iVignette+=a; // Incrémenter l'index d'animation
     
        switch (zVignette)
        {   case 0: // Animation standard de la ligne sélectionnée
                if (iVignette >= 14)    {iVignette-=14;} // Ne pas dépasser 14
     
                j=facteurDilatation[iVignette]; // Prendre le facteur
            break;
            case 1: // Entrée en glissant par la droite
                if (iVignette >= 14) // Ne pas dépasser 14
                {   iVignette=13;
     
                    retourVignette=true;
                }
     
                X=facteurEntree[iVignette]; // Prendre le facteur
            break;
            case 2: // Sortie en glissant par la gauche
                if (iVignette >= 14) // Ne pas dépasser 14
                {   iVignette=13;
     
                    retourVignette=true;
                }
     
                X=facteurSortie[iVignette]; // Prendre le facteur
            break;
            case 3: // Sortie en glissant par la droite
                if (iVignette >= 14) // Ne pas dépasser 14
                {   iVignette=13;
     
                    retourVignette=true;
                }
     
                X=-facteurSortie[iVignette]; // Prendre le facteur
            break;
            case 4: // Animation zéro
            break;
        }
     
        // Dilatation de la vignette présélectionnée
        vignette[selection-1].scale(j, j); // Taille de la vignette
        vignette[selection-1].setOrigin(vignette[selection-1].getGlobalBounds().width/2, vignette[selection-1].getGlobalBounds().height/2); // Origine
     
        texte1.setPosition(x1+X, y1);   texte2.setPosition(x2+X, y2); // Redéfinir la position
    cout << "1" << endl;
        window.draw(texte1);
    cout << "2" << endl;
        window.draw(texte2); // Préparation à l'affichage
    cout << "3" << endl;
     
        calc3=0; // Préparation de l'index
        while (calc3 < 16)
        {   vignette[calc3].setPosition(xVignette[calc3]+X, yVignette[calc3]);
            window.draw(vignette[calc3]);
            calc3++;
        }
     
        // Taille normale de la vignette présélectionnée
        vignette[selection-1].scale(1/j, 1/j); // Taille de la vignette
        vignette[selection-1].setOrigin(vignette[selection-1].getGlobalBounds().width/2, vignette[selection-1].getGlobalBounds().height/2); // Origine
     
        return(retourVignette); // Renvoyer l'état booléen de l'animation
    }
    C'est lourd à étudier, je pense, mais voilà... si vous voyez quelque chose =D
    Je pense que c'est (encore) une toute petite connerie, même une faute d'inattention. Le problème, c'est que je la trouve pas!
    (Vous avez le droit de regarder la Suisse éclater l'Argentine si vous voulez, j'ai le temps ^^)

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Salut!
    À cette heure tardive, j'ai du nouveau... enfin je crois... j'espère!

    J'ai appris à debugger! Enfin je crois... j'espère!
    Non, en fait j'ai lu le tutoriel de Mathieu Schaller, chercheur en astrophysique et cosmologie, et... ben en fait à première vue ça sert à rien tout ça! MDR

    Plus sérieusement, j'ai essayé de débugger sur Codeblocks, et j'ai reçu ça:
    Nr: 0
    Address: 669814EA
    Function: sf::Font::setCurrentSize(unsigned int) const()
    File: C:\Users\ [...] \bin\Debug\sfml-graphics-2.dll
    Line: (ici c'est vide)

    Voilà... je pense que c'est bien, mais j'en suis pas sûr. Franchement c'est pas pour jouer aux crétins, mais ça m'avance à quoi ça? ^^

    Puisque c'est écrit "Font::setCurrentSize(...)", ça doit avoir un rapport avec la création de mon objet texte. Mais je le savais déjà.
    Je vais vérifier que la taille du texte et la fonte de texte ont été paramétrées correctement dans mon code, mais... C'est ça le debuggage? faire des déductions à-partir de cette fenêtre de merde??? On se fout de notre gueule ou quoi?!

  18. #18
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Le debugger permet de placer des breakpoints, ou l'execution du programme s'interrompra, et d'avancer instruction par instruction.
    Le tout, en pouvant voir les valeurs des variables.

    Je vais regarder ton code, je te ferai un retour plus tard

    Première remarque.
    réduire main à un unique appel de fonction, qui est définie seule dans un unique fichier, c'est s'embetter pour rien.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  19. #19
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Bon, ton problème a une cause "pratique"

    Il te manque au minimum une enum. Tu as ouvert il n'y a pas longtemps une discussion où je t'ai expliqué comment structurer ton menu avec le pattern State ou au minimum une enum.
    C'est cette discussion-ci

    Tu as des dizaines de copié collé, qui sont forcément une source d'erreur.
    Fait des fonctions simples.

    Résouts les erreurs de conceptions tant qu'il est encore temps.
    Ton code pourrait être beaucoup plus petit, et donc plus facile à débugger.

    Je continue à regarder
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  20. #20
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Clairement, tu n'as pas bien compris le principe d'une classe.

    Ce n'est pas juste un sac de variable.
    C'est une description d'objets. (en fait c'est une classe d'objets, au sens mathématique de classe)

    Vignette1 ne devrait pas contenir elle meme les informations sur la taille de l'écran.
    En fait, dans chacune de tes classes, les "autres variables" ne sont pas dans la bonne chose.

    Je fais restructurer ton code, pour que tu saisisses un peu ce que ca veut dire.


    Sachant que je ne connais pas encore SFML, mais que je voulais apprendre.
    Je vais partir du principe que chaque appel à la SFML que tu fais est correctement fait.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Réseau non identifié sous vista
    Par Benawa dans le forum Windows Vista
    Réponses: 3
    Dernier message: 28/11/2008, 11h56
  2. Réseau non identifié sous vista
    Par rimbaut dans le forum Windows Vista
    Réponses: 5
    Dernier message: 27/04/2007, 13h28
  3. problème de variable non identifié
    Par teen6517 dans le forum Langage
    Réponses: 1
    Dernier message: 08/03/2007, 19h35
  4. Bug d'affichage non identifié. . .
    Par TheReturnOfMuton dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 21/06/2006, 20h25
  5. probleme de non identifier (Run On Server) sur tomcat
    Par subzero82 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/05/2006, 19h08

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