Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme avec les fleche directionnel du clavier

probleme d'affectation

    14 novembre 2019 à 20:10:36

    bonjour, 

    il faut que j'utilise les fleche du clavier pour faire ce déplacé un pion dans mon tableau, malheureusement apres de nombreuse tentative je n'y arrive pas cependant je sais que met touche tu clavier fonction car pour testé le code un ami ma passer un code permettant d'afficher un message selon la fleche appuyé. mon probleme sais que j'arrive pas a l'adapté au code qui me permet de déplacer mon pion. pouvez vous m'aidez s'il vous plait

    voici le code qui fais bouger mon pion et que je dois modifier :

    void movePions(int table[nbLC][nbLC],  struct PosPion posPion[], char numPion)
    {
        int choix;
        printf("Dans quelle direction voulez vous deplacer votre pion?\n");
        printf("1. Gauche\n2. Droite\n3. Haut\n4. Bas\n");
        scanf("%d",&choix);
    
        table[posPion[numPion-1].y][posPion[numPion-1].x]=0; // permet de placer un zéro a l'ancien emplacement du pion
            if(choix==1) posPion[numPion-1].x--;// déplace le pion a gauche
            if(choix==2) posPion[numPion-1].x++;// déplace le pion a droite
            if(choix==3) posPion[numPion-1].y--;// déplace le pion en Haut
            if(choix==4) posPion[numPion-1].y++;// déplace le pion en Bas
            table[posPion[numPion-1].y][posPion[numPion-1].x]=numPion; // permet de placer le pion a c'est nouvelle coordonnées
    
        }
    

    et voila le code qu'on ma fourni :

    #include <stdio.h>
    #include <conio.h>
    
    #define ESCAPE 27
    
    #define EXTENDED_KEY_1 0
    #define EXTENDED_KEY_2 224
    
    #define ARROW_UP    72
    #define ARROW_DOWN  80
    #define ARROW_LEFT  75
    #define ARROW_RIGHT 77
    
    int main(void)
    {
      int c;
    
      while((c = _getch()) != ESCAPE)
      {
        if(c == EXTENDED_KEY_1 || c == EXTENDED_KEY_2)
        {
          switch(_getch())
          {
            case ARROW_UP:
              puts("UP");
              break;
    
            case ARROW_DOWN:
              puts("DOWN");
              break;
    
            case ARROW_LEFT:
              puts("LEFT");
              break;
    
            case ARROW_RIGHT:
              puts("RIGHT");
              break;
          }
        }
      }
    
      return 0;
    }
    

    merci d'avance 

    bien cordialement,

    Victor


    -
    Edité par VictorHuguet 15 novembre 2019 à 3:42:22

    • Partager sur Facebook
    • Partager sur Twitter
      14 novembre 2019 à 20:23:40

      Hello,

      la variable choix n'est que déclarée, pas initialisée !

      -
      Edité par edgarjacobs 14 novembre 2019 à 20:24:31

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        15 novembre 2019 à 3:10:41

        edgarjacobs a écrit:

        Hello,

        la variable choix n'est que déclarée, pas initialisée !

        -
        Edité par edgarjacobs il y a environ 6 heures

        Ha oups désoler j'avais oublié de retourné en arrière completement du coup le code était incomplet mdr. 

        voila maintenant ya la fontion complet.

        désoler en testant des chose j'avais complement oublié de retourné en arrière complement pour posez ma question.

        mais sinon j'ai toujours pas réussie a associé les fleche au mouvement du pion 

        -
        Edité par VictorHuguet 15 novembre 2019 à 3:45:12

        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2019 à 11:05:53

          Quand tu appuis sur une touche fléchée ça affiche un message, et bien au lieu d'afficher le message, tu fais ce que tu souhaites faire (déplacer ton pion), c'est pas plus compliqué que cela !
          • Partager sur Facebook
          • Partager sur Twitter
            15 novembre 2019 à 11:57:10

            Tu peux tester cet exemple :

            #include <stdio.h>
            #include <conio.h> //_getch()
            
            #define N 8
            
            #define angleHautGauche 218
            #define angleHautDroit  191
            #define angleBasGauche  192
            #define angleBasDroite  217
            
            #define T           194
            #define Tinverse    193
            #define TcoteDroit  180
            #define TcoteGauche 195
            
            #define BarreVerticale   179
            #define BarreHorizontale 196
            #define croix            197
            #define blanc            255
            
            #define ESCAPE 27
            
            #define EXTENDED_KEY_1 0
            #define EXTENDED_KEY_2 224
            
            #define ARROW_UP    72
            #define ARROW_DOWN  80
            #define ARROW_LEFT  75
            #define ARROW_RIGHT 77
            
            struct pion {
              int x, y;
            };
            
            void afficherTable(int table[][N])
            {
              int i, j, k;
            
              printf("%c%c%c%c", angleHautGauche, BarreHorizontale, BarreHorizontale, BarreHorizontale);
              for(i = 0; i < N - 1; i++) {
                printf("%c%c%c%c", T, BarreHorizontale, BarreHorizontale, BarreHorizontale);
              }
              printf("%c\n", angleHautDroit);
            
              for(i = 0; i < N; i++) {
                for(j = 0; j < N; j++) {
                  if(table[i][j]) {
                    printf("%c%c%d%c", BarreVerticale, blanc, table[i][j], blanc);
                  }
                  else {
                    printf("%c%c%c%c", BarreVerticale, blanc, blanc, blanc);
                  }
                }
                printf("%c\n", BarreVerticale);
            
                if(i < N - 1) {
                  printf("%c%c%c%c", TcoteGauche, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                  for(k = 0; k < N - 1; k++) {
                    printf("%c%c%c%c", croix, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                  }
                  printf("%c\n", TcoteDroit);
                }
                else {
                  printf("%c%c%c%c", angleBasGauche, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                  for(k = 0; k < N - 1; k++) {
                    printf("%c%c%c%c", Tinverse, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                  }
                  printf("%c\n", angleBasDroite);
                }
              }
            }
            
            int main(void)
            {
              int c;
              int table[N][N] = {1};
              struct pion pion_new = {0, 0};
              struct pion pion_old = {0, 0};
            
              afficherTable(table);
            
              while((c = _getch()) != ESCAPE)
              {
                table[pion_old.y][pion_old.x] = 0;
            
                if(c == EXTENDED_KEY_1 || c == EXTENDED_KEY_2)
                {
                  switch(_getch())
                  {
                    case ARROW_UP:
                      if(pion_new.y > 0) --pion_new.y;
                      break;
            
                    case ARROW_DOWN:
                      if(pion_new.y < N - 1) ++pion_new.y;
                      break;
            
                    case ARROW_LEFT:
                      if(pion_new.x > 0) --pion_new.x;
                      break;
            
                    case ARROW_RIGHT:
                      if(pion_new.x < N - 1) ++pion_new.x;
                      break;
                  }
            
                  if(pion_old.x != pion_new.x || pion_old.y != pion_new.y)
                  {
                    table[pion_old.y = pion_new.y][pion_old.x = pion_new.x] = 1;
                    afficherTable(table);
                  }
                }
              }
            
              return 0;
            }



            • Partager sur Facebook
            • Partager sur Twitter
              16 novembre 2019 à 13:29:36

              rouloude a écrit:

              Quand tu appuis sur une touche fléchée ça affiche un message, et bien au lieu d'afficher le message, tu fais ce que tu souhaites faire (déplacer ton pion), c'est pas plus compliqué que cela !

              Bonjour,
              rouloude j'ai jamais dit que c'était compliqué mdr c'est juste que quand je les fait bon ça "buguais", genre soit ça déplaçais pas le pions soit ça fait une boucle infini chelou soit y'avais un y'avais un truc qui ce passais mais le pion bougeais pas quand meme xD.

              magma a écrit:

              Tu peux tester cet exemple :

              #include <stdio.h>
              #include <conio.h> //_getch()
              
              #define N 8
              
              #define angleHautGauche 218
              #define angleHautDroit  191
              #define angleBasGauche  192
              #define angleBasDroite  217
              
              #define T           194
              #define Tinverse    193
              #define TcoteDroit  180
              #define TcoteGauche 195
              
              #define BarreVerticale   179
              #define BarreHorizontale 196
              #define croix            197
              #define blanc            255
              
              #define ESCAPE 27
              
              #define EXTENDED_KEY_1 0
              #define EXTENDED_KEY_2 224
              
              #define ARROW_UP    72
              #define ARROW_DOWN  80
              #define ARROW_LEFT  75
              #define ARROW_RIGHT 77
              
              struct pion {
                int x, y;
              };
              
              void afficherTable(int table[][N])
              {
                int i, j, k;
              
                printf("%c%c%c%c", angleHautGauche, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                for(i = 0; i < N - 1; i++) {
                  printf("%c%c%c%c", T, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                }
                printf("%c\n", angleHautDroit);
              
                for(i = 0; i < N; i++) {
                  for(j = 0; j < N; j++) {
                    if(table[i][j]) {
                      printf("%c%c%d%c", BarreVerticale, blanc, table[i][j], blanc);
                    }
                    else {
                      printf("%c%c%c%c", BarreVerticale, blanc, blanc, blanc);
                    }
                  }
                  printf("%c\n", BarreVerticale);
              
                  if(i < N - 1) {
                    printf("%c%c%c%c", TcoteGauche, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                    for(k = 0; k < N - 1; k++) {
                      printf("%c%c%c%c", croix, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                    }
                    printf("%c\n", TcoteDroit);
                  }
                  else {
                    printf("%c%c%c%c", angleBasGauche, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                    for(k = 0; k < N - 1; k++) {
                      printf("%c%c%c%c", Tinverse, BarreHorizontale, BarreHorizontale, BarreHorizontale);
                    }
                    printf("%c\n", angleBasDroite);
                  }
                }
              }
              
              int main(void)
              {
                int c;
                int table[N][N] = {1};
                struct pion pion_new = {0, 0};
                struct pion pion_old = {0, 0};
              
                afficherTable(table);
              
                while((c = _getch()) != ESCAPE)
                {
                  table[pion_old.y][pion_old.x] = 0;
              
                  if(c == EXTENDED_KEY_1 || c == EXTENDED_KEY_2)
                  {
                    switch(_getch())
                    {
                      case ARROW_UP:
                        if(pion_new.y > 0) --pion_new.y;
                        break;
              
                      case ARROW_DOWN:
                        if(pion_new.y < N - 1) ++pion_new.y;
                        break;
              
                      case ARROW_LEFT:
                        if(pion_new.x > 0) --pion_new.x;
                        break;
              
                      case ARROW_RIGHT:
                        if(pion_new.x < N - 1) ++pion_new.x;
                        break;
                    }
              
                    if(pion_old.x != pion_new.x || pion_old.y != pion_new.y)
                    {
                      table[pion_old.y = pion_new.y][pion_old.x = pion_new.x] = 1;
                      afficherTable(table);
                    }
                  }
                }
              
                return 0;
              }

              woaw merci magma je vais testé ça, sinon j'adore ta photo de profile mdr.

              j'en demande peut etre trop mais je ne sais pas vraiment si c'est possible : en gros ici on reinitialise le tableau en affichant le pion a ses nouvelle coordonné mais est il possible de faire en sorte que le pion ce deplace sans réinitialisé le tableau ? 



              -
              Edité par VictorHuguet 16 novembre 2019 à 14:45:22

              • Partager sur Facebook
              • Partager sur Twitter
                16 novembre 2019 à 16:18:22

                Hello,

                VictorHuguet a écrit:

                j'en demande peut etre trop mais je ne sais pas vraiment si c'est possible : en gros ici on reinitialise le tableau en affichant le pion a ses nouvelle coordonné mais est il possible de faire en sorte que le pion ce deplace sans réinitialisé le tableau ? 


                Je pense que t'exprimes mal. Le tableau n'est pas réinitialisé à chaque fois, mais redessiné, ce qui fait que quand tu bouges le pion, un nouveau tableau est affiché à l'écran sous le précédent. Et toi tu souhaiterais que la case où le pion était affiché devienne "vide" et que la case de destination devienne "pleine".

                Pour répondre à ta question, oui c'est faisable, voir du côté des fonctions console de l'api windows (à moins que quelqu'un ait une solution plus simple ?)

                -
                Edité par edgarjacobs 16 novembre 2019 à 16:19:08

                • Partager sur Facebook
                • Partager sur Twitter

                On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                  17 novembre 2019 à 13:13:26

                  edgarjacobs a écrit:

                  Hello,

                  VictorHuguet a écrit:

                  j'en demande peut etre trop mais je ne sais pas vraiment si c'est possible : en gros ici on reinitialise le tableau en affichant le pion a ses nouvelle coordonné mais est il possible de faire en sorte que le pion ce deplace sans réinitialisé le tableau ? 


                  Je pense que t'exprimes mal. Le tableau n'est pas réinitialisé à chaque fois, mais redessiné, ce qui fait que quand tu bouges le pion, un nouveau tableau est affiché à l'écran sous le précédent. Et toi tu souhaiterais que la case où le pion était affiché devienne "vide" et que la case de destination devienne "pleine".

                  Pour répondre à ta question, oui c'est faisable, voir du côté des fonctions console de l'api windows (à moins que quelqu'un ait une solution plus simple ?)

                  -
                  Edité par edgarjacobs il y a environ 20 heures


                  merci pour l'info au fait ya moyen de faire choisir la premier position du pion ? car avec ma méthode ça fonctionne pas
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 novembre 2019 à 13:39:46

                    VictorHuguet a écrit:

                    .... au fait ya moyen de faire choisir la premier position du pion ? car avec ma méthode ça fonctionne pas


                    Demander à l'utilisateur ? Utiliser rand() ? Elle est où, ta "méthode" ? J'ai pas vu ton code (le tien, pas celui de @magma).
                    • Partager sur Facebook
                    • Partager sur Twitter

                    On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                      17 novembre 2019 à 17:08:37

                      VictorHuguet : dans ta version du week-end dernier, celle où j'avais montré comment localiser un problème, le programme demandait à l'utilisateur une position de départ et ça marchait (ce qui posait problème, c'est le déplacement de ce pion). Quand tu dis « ça ne fonctionne pas », tu parles de quoi : de la saisie de la position de départ ou d'autre chose (le faire avec les touches fléchées plutôt que par saisie de l'utilisateur ?).

                      -
                      Edité par robun 17 novembre 2019 à 17:10:03

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 novembre 2019 à 5:20:03

                        robun a écrit:

                        VictorHuguet : dans ta version du week-end dernier, celle où j'avais montré comment localiser un problème, le programme demandait à l'utilisateur une position de départ et ça marchait (ce qui posait problème, c'est le déplacement de ce pion). Quand tu dis « ça ne fonctionne pas », tu parles de quoi : de la saisie de la position de départ ou d'autre chose (le faire avec les touches fléchées plutôt que par saisie de l'utilisateur ?).

                        -
                        Edité par robun 17 novembre 2019 à 17:10:03


                        ce que je veux dire c'est que le code sans utilisé les fleche de la semaine derniere fonctionne et ya pas de probleme avec le positionnement du pion parcontre que je veux l'adapté pour utilisé les fleche il fait une erreur mais pour l'instant j'ai mis en pause ce programme je doit faire un code de cryptage décryptage avec du chiffrement de césar du XOR avec une demande de mot de passe avant de pouvoir décrypté ainsi que une fonction pour décrypté un fichier qu'un college me donne
                        • Partager sur Facebook
                        • Partager sur Twitter

                        probleme avec les fleche directionnel du clavier

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown