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 :

Faire un menu de Sélection "C" Mode Console


Sujet :

C

  1. #1
    Membre averti Avatar de Zanaki
    Homme Profil pro
    Hunter
    Inscrit en
    Novembre 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Hunter
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2017
    Messages : 20
    Par défaut Faire un menu de Sélection "C" Mode Console
    Bien le bonjours tout le monde.

    Comme dit dans le titre, j'aimerais savoir faire un menu de Sélection où grâce a ce petit caractère ">" qui nous servira de curseur, permettre aux utilisateur de choisir leur choix. Je m'explique;

    A l'heure actuel bien que je débute, j'ai pour projets de faire un petit jeux en mode Console. Ce petit jeux consistera à faire une histoire avec avec l'utilisateur. Bien entendu, le scénario et l'histoire global est déjà écrites.
    Mais étant donnée qu'il y aura que du texte, je veux faire interagir l'utilisateur au maximum, c'est-à-dire qu'il y aura beaucoup de choix possible et selon c'est réponses il sera diriger vers d'autre scénario.

    Je peux également faire en sorte de demander à l'utilisateur de taper sur les touche 1, 2, 3, 4... Pour choisir le choix qu'il décidera, mais ça ne m'intéresse pas vraiment, je veux vraiment quelque chose un peu plus poussé.
    J'avais pour idée aussi de faire un menu déroulant pour donner un peu plus de couleurs que le blanc et noir, mais au bon du coup, c'est vraiment mais vraiment pas terrible.

    Je vous donne un exemple concret.

    Personnage = Hey est-ce que tu m'entends ?
    Utilisateur = Oui, je ne suis pas sourd
    Personnage = Hé hé oui, désolé. J'espère que je ne te dérange pas.

    Choix utilisateur
    1 = Non pas du tout
    2 = Je suis occuper là...
    3 = Ça dépends c'est pourquoi ?

    Si réponse 1 | Personnage = Tu n'aurais pas vu une jeune femme par hasard ?
    Si réponse 2 | Personnage = Excusez-moi... Pourrais-tu m'accorder quelque secondes ?
    Si réponse 3 | Personnage = Pour savoir si tu aurais pas croisé une jeune femme...
    Etc... Etc... Etc...

    Au bout du coup, il y aura une ou plusieurs histoires de cette façon, avec un scénario écrit au préalable.

    Du coup, je vous envoie le code que j'ai pu faire;

    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
     
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    void Locate(SHORT x,SHORT y)
    {
        HANDLE hmenu=GetStdHandle(STD_OUTPUT_HANDLE);
        COORD Pos;
        Pos.X = x;
        Pos.Y = y;
        SetConsoleCursorPosition(hmenu,Pos);
    }
     
    void Afficher(int curs)
    {
        Locate(3,0);
        printf("%c Jouer\n\n",(curs==0)?'>':' ');
        Locate(3,2);
        printf("%c Quitter\n\n",(curs==1)?'>':' ');
        Locate(3,4);
    }
     
     
     
    int Choisir()
    {
        int curs = 0;
        int touche;
        do
        {
            Afficher(curs);
            touche = _getch();
            if (touche==0xE0) // fleche : le code fleche renvoie 2 caracteres.
            {
                touche = _getch();
                if (touche==0x50 && curs==0)  // fleche bas
                    curs = 1;
                else if (touche==0x48 && curs==1)  // fleche bas
                    curs = 0;
            }
        } while (touche!=0x0D);  // enter
        return curs;
    }
     
    int main()
    {
        int choix;
        choix = Choisir();
        Locate(0,7);
        printf("Vous avez choisi : %s\n\n\n",(choix==0)?"Jouer":"Quitter");
        return 0;
    }
    Le code fonctionne c'est pas le soucis, mais ça va me posé d'énorme problèmes à la longue.
    Je vais devoir faire énormément de variables, de void.

    Du coup, est-ce que vous avez une technique pour faire un menu déroulant dans un void (Que je placerais dans un Fichier.h) qui me permettra simplement de placer dans une boucle quand il y aura un choix. Mais j'aimerais si possible que sa soit simplement le curseur qui se déplace sans avoir à écrire comme dans mon code plusieurs fois les mêmes phrases.

    Maintenant regarder se code "C'est presque le même avec quelque trucs rajoutés.
    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
     
    void Locate(SHORT x,SHORT y)
    {
        HANDLE hmenu=GetStdHandle(STD_OUTPUT_HANDLE);
        COORD Pos;
        Pos.X = x;
        Pos.Y = y;
        SetConsoleCursorPosition(hmenu,Pos);
    }
     
    void Afficher(int curs)
    {
        Locate(3,0);
        printf("%c Jouer\n\n",(curs==0)?'>':' ');
        Locate(3,2);
        printf("%c Réglement\n\n",(curs==1)?'>':' ');
        Locate(3,4);
        printf("%c Quitter\n\n",(curs==2)?'>':' ');
    }
     
     
     
    int Choisir()
    {
        int curs = 0;
        int touche;
        do
        {
            Afficher(curs);
            touche = _getch();
            if (touche==0xE0) // fleche : le code fleche renvoie 2 caracteres.
            {
                touche = _getch();
                if (touche==0x50 && curs==0)  // fleche bas
                    curs = 1;
                else if (touche==0x50 && curs==1)  // fleche bas
                    curs = 2;
                else if (touche==0x48 && curs==2)  // fleche haut
                    curs = 1;
                else if (touche==0x48 && curs==1)  // fleche haut
                    curs = 0;
            }
        } while (touche!=0x0D);  // enter
        return curs;
    }
     
    int main()
    {
        int choix;
        choix = Choisir();
        Locate(0,7);
        printf("Vous avez choisi : %s\n\n\n",(choix==0)?"Jouer":"Réglement":"Quitter");
        return 0;
    }
    Donc, j'ai changer un peu mon code, j'ai rajouter un Menu Réglement; Si vous regarder bien le dernier printf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("Vous avez choisi : %s\n\n\n",(choix==0)?"Jouer":"Réglement":"Quitter");
    Qui se trouve tout en bas de page. Il ne fonctionne pas. Ça me dis une erreur; Error: expected ')' before ':' token

    Puis avouez quand même qu'un jeux comme j'aimerais faire, avec un code comme ça pour chaque choix, je vais jamais en voir le bout et je prendrais le chemin super long. Je suis sur que vous arriverez à me donner un raccourcis.

    J'espère que j'ai pas été trop flou, ni trop vague et que vous allez comprendre mon problème. Si vous avez des questions, n'hésitez pas.
    Je vous dis un grand merci et à bientôt !

  2. #2
    Membre averti Avatar de Zanaki
    Homme Profil pro
    Hunter
    Inscrit en
    Novembre 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Hunter
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2017
    Messages : 20
    Par défaut
    J'ai trouvés la solution Merci quand même

    Pour ceux qui veulent voici se qu'on a faits;

    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
     
    void Locate(SHORT x, SHORT y)
    {
        HANDLE hmenu = GetStdHandle(STD_OUTPUT_HANDLE);
        COORD Pos;
        Pos.X = x;
        Pos.Y = y;
        SetConsoleCursorPosition(hmenu, Pos);
    }
     
     
    int Choix(const char* ch[],int taille,int x, int y)
    {
        int i,curs = 0;
        Locate(x, y);
        for (i = 0; i < taille; i++)
            printf("  %s\n", ch[i]);
        Locate(x, y);
     
        while (1)
        {
            int touche = _getch();
            if (touche == 0x50 && curs < taille-1)
                curs++;
            if (touche == 0x48 && curs > 0)
                curs--;
            if (touche == 0x0D)
                return curs + 1;
            Locate(x, y);
            for (i = 0; i < taille; i++)
                printf("%c\n", (i == curs) ? '>':' ');
        }
        return 0;
    }
     
    int main(int argc, char *argv[])
    {
        const char* tab[] = {"Choix 1","Choix 2","Choix 3"};
        int c = Choix(tab,3,0,15);
     
        }
     
    return 0;
       }
    Cordialement Zanaki

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

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