Selecteur code bon ou pas...

Résolu/Fermé
toufeux Messages postés 43 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 28 novembre 2017 - Modifié par NHenry le 21/03/2017 à 18:38
toufeux Messages postés 43 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 28 novembre 2017 - 31 mars 2017 à 20:22
Bonjours,
Je viens de coder un sélecteur assez design. Je voudrais que quelqu’un de plus expérimente que moi commente mon programme. Merci d'avance pour vos réponses. ;)

#include <iostream>
#include <conio.h>
#include <vector>
#include <windows.h>
#include <string>
#include "Jeu_entete.h"

int selecteur();
int main();

int main()                                         /*interface sans "interaction importante"*/
{
    std::cout<<"\t"<<"======================="<<std::endl;
    std::cout<<"\t"<<"=LES JEUX DE L'ENNUIE ="<<std::endl;
    std::cout<<"\t"<<"======================="<<std::endl;
    std::cout<<std::endl;
    std::cout<<"fait et cree par toufeux"<<std::endl;
    Sleep(1000);
    std::cout<<"Appuyez sur une touche pour acceder au menu :"; getch();
    return selecteur();
}
int selecteur()
{
    system ("cls");
    int vers = 0;
    int i;
    int nombrec = 4;
    std::vector<std::string> bouge(nombrec);
/*======================================*/
    std::vector<std::string> affichage(nombrec);
    affichage[0]=" ";
    affichage[1]="jeu des allumettes.";                   /*variable pour l'affichage menu déroulent*/
    affichage[2]="pas encore decider";
    affichage[3]=" ";
/*======================================*/
    std::string curseur = "0", vide = " ", choix;
    for (i = 0;i<nombrec;i++)
    {
        bouge[i]=vide;
    }
    bouge[1]=curseur;

for(;;)
        {
            std::cout<< "les touches sont : 1 pour monter, 2 pour descendre et 3 pour selectionner la case"<<std::endl;
            for(i=0; i<nombrec; i++)
            {
                std::cout<< "|"<< bouge[i]<< "|"<< affichage[i]<< std::endl;
            }
            choix = getch();

system ("cls");
/*====================================*/
        if (choix == "2")                                /*si on veut que le curseur avance */
        {
            bouge[vers]=vide; vers = vers+1;
            bouge[vers] = curseur;
        }

if (choix == "1")                               /*si on veut que le curseur recule */
        {
            bouge[vers]=vide; vers = vers-1;
            bouge[vers] = curseur;
        }

if (curseur==bouge[3])                         /*si on essaiye de d'avancer quand le 0 est au tabl 2*/
        {
            for(i=0; i<nombrec; i++)
            {
                bouge[i]=vide;
            }
            vers =+ 1;
            bouge[vers]=curseur;
        }
        if (curseur==bouge[0])                         /*si on essaiye de reculer quand le 0 est au tabl 0*/
        {
            for(i=0; i<nombrec; i++)
            {
                bouge[i]=vide;
            }
            vers =+ 1;
            bouge[vers]=curseur;
        }
/*====================================*/
        if (choix=="3")
        {
            if (bouge[1]==curseur)                      /*aller au jeu voulu en appuyant sur 3*/
            {
                return mainAllumettes();
                getch();
                system("cls");
            }
            if (bouge[2]==curseur)
            {
                std::cout<<"d";
                getch();
                system("cls");
            }
/*====================================*/
        }
        }
        return 0;
}
A voir également:

2 réponses

NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 333
21 mars 2017 à 18:38
Nous ne feront pas votre exercice à votre place.
Merci de décrire précisément votre problème et en postant le code déjà réalisé.

Cliquez ici pour des conseils d'écriture des messages et ici concernant les devoirs scolaires ou PFE.

Pour poster votre code, merci de penser à la coloration syntaxique.
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 088
21 mars 2017 à 19:10
Salut toufeux,

Je n'ai testé ton code, étant sous Linux, mais au lieu d'effacer tout l'écran, tu pourrais fluidifier le changement de l'affichage en remplaçant seulement les parties de l'écran à modifier.

Pour te déplacer sur l'écran, tu peux utiliser SetConsoleCursorPosition() de l'API Windows, et placer ton curseur d'écriture à l'endroit souhaité.

https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044844545&id=1043284392

Ce lien comprend un exemple de fonction gotoxy(), qui utilise cette API.

Cette fonction non standard existait dans conio.h du temps de DOS, mais ne semble plus l'être dans les implémentations actuelles.

Tu devrais aussi permettre à l'utilisateur de sélectionner en utilisant les flèches du clavier, et la touche entrée... c'est plus intuitif que 1, 2 et 3.


Dal
toufeux Messages postés 43 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 28 novembre 2017
22 mars 2017 à 21:28
merci pour ta réponse rapide !
Mais tu pourrais m'expliquer un peu comment ça fonctionne car c'est un peu bête mais
du haut de mes 15 ans je ne suis pas bilingue :) .
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 088
23 mars 2017 à 10:04
ok, pas de pb :-)

voilà en code une illustration de ce que je veux dire :

#include <stdio.h>
#include <windows.h>
#include <conio.h>

void gotoxy(int x, int y)
{
        COORD point;
        point.X = x; point.Y = y;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point);
}

int main(void)
{
        gotoxy(10,10);
        printf("|O| pouet\n");
        gotoxy(10,11);
        printf("| | plop\n");
        gotoxy(10,12);
        printf("| | quitter\n");
        gotoxy(1,15);
        printf("Pressez une touche pour faire descendre "
                        "la selection sur plop\n");
        getch();
        gotoxy(11,10); printf(" \n");
        gotoxy(11,11); printf("O\n");
        gotoxy(1,15);

        return 0;
}

Donc : on efface le sélecteur là où il ne doit plus être, et on le place là où il doit être, pour le faire "bouger", au lieu d'effacer et de réécrire tout l'écran.

Cela donne un affichage plus fluide, et qui ne "clignote" pas.

Dal
0
toufeux Messages postés 43 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 28 novembre 2017
23 mars 2017 à 20:33
merci beaucoup !!! Je regarderais plus tard car je n'ai pas trop le temps. :}
0
toufeux Messages postés 43 Date d'inscription vendredi 24 février 2017 Statut Membre Dernière intervention 28 novembre 2017
Modifié le 23 mars 2017 à 21:45
est-ce que je suis obligé d'utiliser printf ou je peux utiliser cout ?
Sinon merci pour ta demonstration
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 088
24 mars 2017 à 09:09
tu peux utiliser cout. mon exemple était en C :-)
0