[C] problème de boucle

problème de boucle [C] - C - Programmation

Marsh Posté le 08-10-2004 à 21:35:06    

Hello
 
le plus simple c'est de mettre le code :]
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char *argv[])
  4. {
  5.   char touche=' ';
  6.   char touchevitesse=' ';
  7.   char ter[10][20];
  8.   int i=0,j=0,a=4,b=9,k=0;
  9.   int timer=5;
  10.   int puissance=1000000;
  11.   srand(time(0));
  12.             // réglage de la vitesse : c'est ici qu'est mon problème
  13.   while(touchevitesse!='0')
  14.        {
  15.        if(kbhit())
  16.           {
  17.           touchevitesse=getch();
  18.           }
  19.        if(touchevitesse=='+')
  20.          {
  21.          puissance=puissance/10;
  22.          touchevitesse=' ';
  23.          }
  24.        else if(touchevitesse=='-')
  25.          {
  26.          puissance=puissance*10;
  27.          touchevitesse=' ';
  28.          }
  29.             // initialisation du terrain
  30.        for (i=0;i<10;i++)
  31.            {
  32.            for (j=0;j<20;j++)
  33.                {
  34.                ter[i][j]=' ';
  35.                }
  36.            }
  37.        ter[a][b]='X';
  38.             // terrain de test
  39.        printf("Choisissez la vitesse :\n+ pour accelerer\n- pour ralentir\n0 pour commencer\n\n\n" );
  40.        printf(" --------------------\n" );
  41.        for (i=0;i<10;i++)
  42.            {
  43.            printf("|" );
  44.            for (j=0;j<20;j++)
  45.                {
  46.                printf("%c",ter[i][j]);
  47.                }
  48.            printf("|" );
  49.            printf("\n" );
  50.            }
  51.        printf(" --------------------\n" );
  52.        if (b==19)
  53.            {
  54.            b=0;
  55.            ter[a][0]='X';
  56.            ter[a][19]=' ';
  57.            }
  58.        else
  59.            {
  60.            ter[a][b]=' ';
  61.            b++;
  62.            ter[a][b]='X';
  63.            }
  64.        system("cls" );
  65.       }
  66.             // on ralentit l'exécution du programme
  67.        for (k=0;k<puissance;k++)
  68.            {
  69.            timer=timer^2;
  70.            }


 
Vient ensuite le reste du programme qui est en gros un simili début d'ersatz de pacman. En fait ce que je comprends pas c'est pourquoi au niveau du réglage de la vitesse je ne peux pas tapoter sur + ou - pour la changer autant de fois que nécessaire. J'étais au départ passé par un switch/cases mais le problème était déjà là. Donc si vous pouviez m'éclairer sur ce qui est foireux... :s
 
Merci d'avance :o


Message édité par Coim le 08-10-2004 à 23:00:13
Reply

Marsh Posté le 08-10-2004 à 21:35:06   

Reply

Marsh Posté le 08-10-2004 à 21:45:45    

De Rien  
 
XaT


---------------
"Xat le punk à chien facho raciste. C'est complexe comme personnage." caudacien 05/10/2020
Reply

Marsh Posté le 09-10-2004 à 08:25:48    

Coim a écrit :

Hello
 
le plus simple c'est de mettre le code :]
 

Code :
  1. ...
  2.     while(touchevitesse!='0')
  3.        {
  4.        if(kbhit())
  5.           {
  6.           touchevitesse=getch();
  7.           }
  8. ...


 
Vient ensuite le reste du programme qui est en gros un simili début d'ersatz de pacman. En fait ce que je comprends pas c'est pourquoi au niveau du réglage de la vitesse je ne peux pas tapoter sur + ou - pour la changer autant de fois que nécessaire. J'étais au départ passé par un switch/cases mais le problème était déjà là. Donc si vous pouviez m'éclairer sur ce qui est foireux... :s
 
Merci d'avance :o


 
Vérifie donc la valeur de "touchevitesse" juste après le "getch()"


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 09-10-2004 à 08:45:27    

Avec certaines touches "étendues" (numpad, flèches de direction, toussa) il faut faire 2 getch de suite (le clavier envoie 2 codes l'un derrière l'autre), la première valeur étant 0 ou 0xE0
 
Puis le getch il devrait avoir sa petite boucle à lui, parce que là tu te tapes toute la boucle en permanence [:spamafote] (tu redessines le terrain sans arrêt)


Message édité par masklinn le 09-10-2004 à 08:47:09

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 09-10-2004 à 11:51:57    

Merci pour vos réponses. :hello:  
 
Par contre j'ai fait des dumps et apparemment ça rentre bien dans les if et else if. Donc le problème viendrait plutôt de la partie chargée de ralentir la vitesse. J'y suis quand même arrivé en ne changeant pas la valeur de puissance mais en rajoutant un compteur l et en calculant la valeur de puissance en dehors du if(kbht()).
 
Pour ce qui est de redessiner le terrain sans arrêt, ça me semblait normal puisque le X doit défiler tout seul. :/
 
Sinon pour la version qui marche:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5. int main(int argc, char *argv[])
  6. {
  7.   char touche=' ';
  8.   char touchevitesse=' ';
  9.   char ter[10][20];
  10.   int i=0,j=0,a=4,b=9,k=0,l=0;
  11.   int timer=5;
  12.   int puissance=100000000;
  13.   srand(time(0));
  14.             // réglage de la vitesse
  15.   while(touchevitesse!='0')
  16.        {
  17.         if(kbhit())
  18.            {
  19.            touchevitesse=getch();
  20.            }
  21.         if(touchevitesse=='+')
  22.           {
  23.           touchevitesse=' ';
  24.           l--;
  25.           }
  26.         else if(touchevitesse=='-')
  27.           {
  28.           touchevitesse=' ';
  29.           l++;
  30.           }
  31.             // initialisation du terrain
  32.        for (i=0;i<10;i++)
  33.            {
  34.            for (j=0;j<20;j++)
  35.                {
  36.                ter[i][j]=' ';
  37.                }
  38.            }
  39.        ter[a][b]='X';
  40.             // terrain de test
  41.        printf("Choisissez la vitesse :\n+ pour accelerer\n- pour ralentir\n0 pour commencer\n\n\n" );
  42.        printf(" --------------------\n" );
  43.        for (i=0;i<10;i++)
  44.            {
  45.            printf("|" );
  46.            for (j=0;j<20;j++)
  47.                {
  48.                printf("%c",ter[i][j]);
  49.                }
  50.            printf("|\n" );
  51.            }
  52.        printf(" --------------------\n" );
  53.        if (b==19)
  54.            {
  55.            b=0;
  56.            ter[a][0]='X';
  57.            ter[a][19]=' ';
  58.            }
  59.        else
  60.            {
  61.            ter[a][b]=' ';
  62.            b++;
  63.            ter[a][b]='X';
  64.            }
  65.        system("cls" );
  66.             // on ralentit l'exécution du programme
  67.        puissance=1000*exp(l);
  68.        for (k=0;k<puissance;k++)
  69.            {
  70.            timer=timer^2;
  71.            }
  72.        k=0;
  73.       }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed