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 :

deplacement plus rapide (les fleches de direction)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut deplacement plus rapide (les fleches de direction)
    bonsoir tout le monde

    j'ai pensé a utiliser les flèches de direction (clavier), pour cela j'ai créer ce programme :

    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
    #include<stdio.h>
    #include<conio.h>
     
    char c;
     
    void main()
    {
      int x=30,y=20;
      clrscr();
     
      do
      {
       gotoxy(x,y);
        textcolor(YELLOW);
         cprintf("ILIASS 007");
     
         c=getch();
         if(c==0)
          {
          c=getch();
           switch(c)
    	{ case 72 :  if(y==1) y=49;
    		      else  y--;
    		      clrscr(); break;
    	  case 80 : if(y==49) y=1;
    		      else y++;
    		      clrscr(); break;
    	  case 75 :  if(x==1) x=80;
    		      else x--;
    		     clrscr(); break;
    	  case 77 :  if(x==80) x=1;
    		      else  x++;
    		      clrscr(); break;
    	}
          }
      }
      while(c!=27); //Echap
     
    }
    si on utilise les pixels ,le déplacement va être lent , je veux modifier mon programme ,pour que : lorsque je tape les flèches seulement ,le déplacement (+1) -par défaut ,et si je tape (SHIFT)+(flèche) -au même temps- déplacement à (+10) d'une manière plus rapide .

    merci d'avance

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Pour faire simple, vous pouvez gérer une vitesse au lieu de directement la position.
    Par exemple :
    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
     
    int vx = 0; // Vitesse axe des x
    int vy = 0; // Vitesse axe des y
     
    c=getch();
    switch(c)
    {
    	case 72 :
    		if(y<=1) y=49;
    		else	vy = -1;
    		clrscr();
    	break;
    	case 80 : 
    		if(y>=49) y=1;
    		else y = 1;
    		clrscr();
    	break;
    	case 75 :
    		if(x<=1) x=80;
    		else x = -1;
    		clrscr();
    	break;
    	case 77 :
    		if(x>=80) x=1;
    		else x = 1;
    		clrscr();
    	break;
    }
    if ( c == /*Touche Shift*/ )
    {
    	vx *= 2;
    	vy *= 2;
    }
    x += vx;
    y += vy;
    J'ai refais la présentation du code , qui permet une meilleur lecture, je vous conseille de toujours coder en suivant ce type de présentation.

    Pour la vérification des bordures, il est préférable de mettre '>=' ou '<=' à la place de '==' dans le cas où l'on se déplace de plus d'un pixel à la fois.

    Pour savoir si la touche Shift est appuyé , cela doit être marqué dans la documentation.
    Je pense que soit les la valeur de c change, soit une fonction spécial permet de récupéré l'état de Shift... ( en fait je n'avais pas vu cette particularité avant d'écrire le message )
    Mince pensant que c'était dans la documentation de conio , je n'ai rien trouvé.
    Il existerai deux autres méthodes :
    Soit on utilise pas la touche shift et une lettre , lorsque cette lettre est appyuée , on met une variable à 1 ( mode turbo activé ) et on change la vitesse comme dans le code que j'ai ecrit ( 0 turbo désactivé ).
    Soit avec la touche shift , mais sans les flèches , pour savoir si une lettre est en majuscules ou pas ... ( dans ce cas là , on pourrai ce passer des variable de vitesse ).
    La valeur récupéré par getch , change si on appuie sur une lettre en même temps que sur shift ( permet de savoir si on a une majuscule )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut rep
    merci "LittleWhite" pr votre aide

    mais ,ça marche pas , même le code que vs m'avez proposé , n'a pas marcher :s

    j'ai pansé a faire cela :

    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
     
       /* 9 c'est le code standard de (tab)  et b est un char */                               
         b=getch();
    	if(b==9)
    	    d=10;
    	    else d=0; */
    	c=getch();
    	if(c==0)
    	{  c=getch();
           switch(c)
    	{
    	  case 72 :  if(y==147) y=430;
    		      else  y=y-(1+d);
    		    break;
    	  case 80 : ify==430) y=147;
    		      else y=y+(1+d);
    		     break;
    	  case 75 :  if(x==-27) x=315;
    		      else x=p->x-(1+d);
    		     break;
    	  case 77 :  if(x==315) x=-27;
    		      else  x=x+(1+d);
    		     break;
    	}
    et ça marche avec ce code ,mais le probléme içi , il faut taper une 1érement (tab) pui 2émement (une fleche)

    j'arrive pas a les commendés d'un seul coup ,dans une seule saisie (tape)!!!

    merci

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par iliass001 Voir le message
    mais ,ça marche pas , même le code que vs m'avez proposé , n'a pas marcher
    Dans cet article, j'explique que le le code de 'fleche' et de 'shift-fleche' est le même :
    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
     
    Flèches
     
    224  72 Haut
    224  80 Bas
    224  75 Gauche
    224  77 Droite
     
    224  72 Shift-Haut
    224  80 Shift-Bas
    224  75 Shift-Gauche
    224  77 Shift-Droite
     
    224 141 Ctrl-Haut  
    224 145 Ctrl-Bas   
    224 115 Ctrl-Gauche
    224 116 Ctrl-Droite
     
      0 152 Alt-Haut  
      0 160 Alt-Bas   
      0 155 Alt-Gauche
      0 157 Alt-Droite
    Je recommande donc crtl-fleche...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut merci
    merci a tous , problème résolu

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2008, 13h35
  2. Réponses: 2
    Dernier message: 06/05/2007, 22h37
  3. Réponses: 2
    Dernier message: 02/11/2006, 20h21
  4. parcourir les Jmenu avec les fleches directions avec [alt]
    Par mortalius dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 07/04/2006, 15h04
  5. dans quels cas les pointeur sont plus rapides ?
    Par 180degrés dans le forum C++
    Réponses: 12
    Dernier message: 20/08/2005, 23h12

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