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 :

[gcc-unix] touches directionnelles


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Par défaut [gcc-unix] touches directionnelles
    Bonjour a tous,
    je désirerais pouvoir me déplacer dans le terminal a l'aide des flèches
    exemple en pascal :
    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
     
    program test;
    uses crt;
    var i, j : integer;
        fleches : char;
    begin
         i := 39; j := 15;
         fleches := #0;
    	 gotoxy (i,j);
         while ( fleches <> #27 ) do {escape}
         begin
              fleches := readkey;
              if ( fleches = #13 ) then writeln('enter');
    		  if ( fleches = #32 ) then writeln('espace');
              if ( fleches = #0 ) then
              begin
                   fleches := readkey;
                   case ( ord ( fleches ) ) of
               {gauche}75 : i := i - 4;
               {droite}77 : i := i + 4;
                 {haut}72 : j := j - 2;
                  {bas}80 : j := j + 2;
                   end;
              end;
              if ( i = 31) then i := 35;
              if ( i = 47) then i := 43;
              if ( j = 19 ) then j := 17;
              if ( j = 11 ) then j := 13;
              gotoxy (i,j); 
         end;
    end.
    en recherchant sur le forum je n'ai trouvé que des solutions pour windows
    j'ai essayé de faire un bout de programme en m inspirant de la fac dont voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include <stdio.h>
    #include <termios.h>
    #include <unistd.h>
    static void mode_raw(int);
    int main(void) {
       unsigned char c;
       mode_raw(1);
       c = getchar();
       if(c == 0 || c == 224) {c = getchar();}
       if(c == 65||c == 66||c == 67||c == 68) {printf("fleches\n");}
       mode_raw(0);
    }
    void mode_raw(int activer) {
       static struct termios cooked;
       static int raw_actif = 0;
       if (raw_actif == activer) {return;}
       if (activer) { 
          struct termios raw;
            tcgetattr(STDIN_FILENO, &cooked);
            raw = cooked;
            cfmakeraw(&raw);
            tcsetattr(STDIN_FILENO, TCSANOW, &raw);
        }
        else
       {tcsetattr(STDIN_FILENO, TCSANOW, &cooked);}
               raw_actif = activer;
    }
    pouvez-vous m'aider?

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut j'ai fait ceci ...
    #include <stdio.h>
    #include <termios.h>
    #include <unistd.h>
    static void mode_raw(int);
    static void terrain(void);
    static void deplacement(void);
    int main(void) {
    terrain();
    deplacement();
    }
    void deplacement(void) {
    unsigned char c;
    int x=2,y=2;
    mode_raw(1);
    terrain();
    printf("\x1B[%.2d;%.2dH",y,x);
    c = getchar();
    while(c!='q') {
    if(c == 10) {printf("*");}
    if(c == 32) {printf("#");}
    if(c == 27) {c = getchar();}
    if(c == 91) {c = getchar();}
    if(c == 65) {y=y-2;}
    if(c == 68) {x=x-2;}
    if(c == 66) {y=y+2;}
    if(c == 67) {x=x+2;}
    printf("\x1B[%.2d;%.2dH",y,x);
    }
    mode_raw(0);
    }
    void terrain(void) {
    printf("\x1B[2J\x1B[;H");
    printf("\x1B[%.2d;%.2dH",1,1); printf("+-+-+-+-+-+-+-+-+-+-+\n");
    printf("\x1B[%.2d;%.2dH",2,1); printf("| | | | | | | | | | |\n");
    printf("\x1B[%.2d;%.2dH",3,1); printf("+-+-+-+-+-+-+-+-+-+-+\n");
    printf("\x1B[%.2d;%.2dH",4,1); printf("| | | | | | | | | | |\n");
    printf("\x1B[%.2d;%.2dH",5,1); printf("+-+-+-+-+-+-+-+-+-+-+\n");
    printf("\x1B[%.2d;%.2dH",6,1); printf("| | | | | | | | | | |\n");
    printf("\x1B[%.2d;%.2dH",7,1); printf("+-+-+-+-+-+-+-+-+-+-+\n");
    printf("\x1B[%.2d;%.2dH",8,1); printf("| | | | | | | | | | |\n");
    printf("\x1B[%.2d;%.2dH",9,1); printf("+-+-+-+-+-+-+-+-+-+-+\n");
    printf("\x1B[%.2d;%.2dH",10,1);printf("| | | | | | | | | | |\n");
    printf("\x1B[%.2d;%.2dH",11,1);printf("+-+-+-+-+-+-+-+-+-+-+\n");
    }
    void mode_raw(int activer) {
    static struct termios cooked;
    static int raw_actif = 0;
    if (raw_actif == activer) {return;}
    if (activer) {
    struct termios raw;
    tcgetattr(STDIN_FILENO, &cooked);
    raw = cooked;
    cfmakeraw(&raw);
    tcsetattr(STDIN_FILENO, TCSANOW, &raw);
    }
    else
    {tcsetattr(STDIN_FILENO, TCSANOW, &cooked);}
    raw_actif = activer;
    }
    aidez moi s'il vous plaît ;-)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Par défaut
    merci oli ;-)



    UPUPUP please

    reste juste les touches enter, escape, et les whille ( not KEYPRESSED )

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    de rien puce je suis la pour ca
    et moi aussi j'ai besoin d'aide...

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/02/2008, 13h17
  2. Scrollbar et touches directionnelles
    Par kitsune dans le forum MFC
    Réponses: 10
    Dernier message: 08/11/2007, 08h53
  3. Touches directionnels : annuler
    Par MayOL69bg dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/04/2007, 22h25
  4. ecrire une touche directionnelle dans un fichier excel
    Par aA189 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/08/2006, 20h41
  5. Réponses: 8
    Dernier message: 18/09/2003, 18h12

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