menu deroulant

menu deroulant - C - Programmation

Marsh Posté le 30-04-2006 à 13:40:29    

Bonjour tout le monde,
 
voila je veux créer un petit jeux en langage c
 
j'ai fait un menu déroulant, des fonctions,...
 
Le programme se compile bien et quand je lance mon programme, le menu déroulant apparait mais rien d'autre ne se fait... vous pouvez voir le code source du programme a cettre adresse: http://home.scarlet.be/kio/

Message cité 1 fois
Message édité par kiooik le 30-04-2006 à 13:42:02
Reply

Marsh Posté le 30-04-2006 à 13:40:29   

Reply

Marsh Posté le 30-04-2006 à 13:45:33    

kiooik a écrit :

voila je veux créer un petit jeux en langage c
j'ai fait un menu déroulant, des fonctions,...
 
Le programme se compile bien et quand je lance mon programme, le menu déroulant apparait mais rien d'autre ne se fait... vous pouvez voir le code source du programme http://home.scarlet.be/kio/ici


  • main() retourne int. Toujours...
  • Pour le reste, tu utilises des fonctions de la version originale de Borland C qui ne sont pas supportées par le portage de conio pour MinGW. (window(), par exemple) que je ne peux donc pas tester. C'est le problème avec le code non portable...


OK, j'ai vu que l'impact de window() était faible, et je l'ignore.
 
J'ai donc compilé et lancé ton code. (Code::Blocks avec libconio.a et <conio2.h> )
 
Le menu déroulant fonctionne, mais effectivement, on ne peut pas sélectionner...  Le problème semble venir de menuprincipal()...
 
Visiblement, tu ne sais pas lire les données du clavier... Evidemment, ça ne s'invente pas... Il faut lire la doc...  
 
http://www.developpez.net/forums/s [...] p?t=131260
 
Ceci fonctionne :  

Code :
  1. #define CR 0x0D
  2. #define TAB 0x09
  3. <...>
  4. static int menuprincipal(void)
  5. {
  6.    char menu[4][25] =
  7.       {
  8.          "1: Commencer",
  9.          "2: Ajouter des questions",
  10.          "3: Highscore",
  11.          "4: Quitter"
  12.       };
  13.    int level = 1, i;
  14.    int key ;
  15.    gotoxy(12, 6);
  16.    cprintf("<=MENU=>" );
  17.    textcolor(YELLOW);
  18.    do
  19.    {
  20.       for (i = 1; i <= 4; i++)
  21.       {
  22.          if (level == i) //teste si le compteur est = au menu selectionn,
  23.             textbackground(CYAN); //selection
  24.          else
  25.             textbackground(BLUE); //normal
  26.          gotoxy(3, i + 1);
  27.          cprintf("%s", menu[i - 1]);
  28.       }
  29.       key = getch();
  30.       printf("key=%d\n", key);
  31.       if (key == 0 ||key == 224)
  32.       {
  33.          if (kbhit())
  34.          {
  35.             key = getch();
  36.             switch (key)
  37.             {
  38.             case KEY_DOWN:
  39.                level++;
  40.                if (level > 4) //si on depace
  41.                {
  42.                   level = 1; //la tranche de valeur
  43.                }
  44.                break;
  45.             case KEY_UP:
  46.                level--;
  47.                if (level < 1) //autorisee pour le menu
  48.                {
  49.                   level = 4;
  50.                }
  51.                break;
  52.             }
  53.          }
  54.       }
  55.    }
  56.    while (key != CR && key != TAB); ////fin do tant que l'on appuie pas sur ENTER ou TAB
  57.    return level;
  58. }

Message cité 1 fois
Message édité par Emmanuel Delahaye le 30-04-2006 à 14:48:58

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 04-05-2006 à 14:02:09    

salut ,
mois j'utilise BORLAND C++ (bc 45) , mais je ne comprend pas pourquoi sont code ne marche pas (chez moi),
d’ailleurs ce n'est pas le seul , il y a beaucoup de code qui marche sous gcc (sur linux) , mais ca ne marche pas chez moi , avec Borland !!!
je ne comprend pas pourquoi , alors si quelqu'un peux m'éclaircir le prob ...
 
 

Reply

Marsh Posté le 04-05-2006 à 14:19:51    

big_dadi_fat a écrit :

salut ,
mois j'utilise BORLAND C++ (bc 45) , mais je ne comprend pas pourquoi sont code ne marche pas (chez moi),
d’ailleurs ce n'est pas le seul , il y a beaucoup de code qui marche sous gcc (sur linux) , mais ca ne marche pas chez moi , avec Borland !!!
je ne comprend pas pourquoi , alors si quelqu'un peux m'éclaircir le prob ...


Parce que dès qu'on sort du code standard, tout peut arriver...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 07-05-2006 à 12:16:36    

Emmanuel Delahaye a écrit :

Code :
  1. case KEY_DOWN:
  2.                level++;
  3.                if (level > 4) //si on depace
  4.                {
  5.                   level = 1; //la tranche de valeur
  6.                }
  7.                break;
  8.             case KEY_UP:
  9.                level--;
  10.                if (level < 1) //autorisee pour le menu
  11.                {
  12.                   level = 4;
  13.                }
  14.                break;



Est-il bon d'effectuer un incrément (décrément) qui peut parfois avoir été fait pour rien ?

Code :
  1. case KEY_DOWN:
  2.                if (level < 4)
  3.                   level++;
  4.                else
  5.                   level=1;
  6.                break;
  7.             case KEY_UP:
  8.                if (level > 1)
  9.                    level--;
  10.                else
  11.                   level=4;
  12.                break;


[:aloy]


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

Marsh Posté le 07-05-2006 à 12:23:31    

Sve@r a écrit :

Est-il bon d'effectuer un incrément (décrément) qui peut parfois avoir été fait pour rien ?

Code :
  1. case KEY_DOWN:
  2.                if (level < 4)
  3.                   level++;
  4.                else
  5.                   level=1;
  6.                break;
  7.             case KEY_UP:
  8.                if (level > 1)
  9.                    level--;
  10.                else
  11.                   level=4;
  12.                break;




Oui, c'est mieux comme çà...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 07-05-2006 à 12:57:29    

Emmanuel Delahaye a écrit :

Oui, c'est mieux comme çà...


Je me demande si on peut faire mieux encore...

Code :
  1. case KEY_DOWN:
  2.     level=(level % 4) + 1;
  3.     break;
  4. case KEY_UP:
  5.     // Là, j'y arrive pas avec les modulo...
  6.     level=level  > 1 ?level - 1 : 4;
  7.     break;

Message cité 1 fois
Message édité par Sve@r le 07-05-2006 à 12:58:20

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

Marsh Posté le 07-05-2006 à 13:11:00    

Sve@r a écrit :

Je me demande si on peut faire mieux encore...

Code :
  1. case KEY_DOWN:
  2.     level=(level % 4) + 1;
  3.     break;
  4. case KEY_UP:
  5.     // Là, j'y arrive pas avec les modulo...
  6.     level=level  > 1 ?level - 1 : 4;
  7.     break;


Le modulo, c'est intellectuellement satisfaisant, mais ça fait appelle à une division entière. Sur les petites machines genre 8051, c'est très couteux... J'évite.
Dans ma vieille FIFO (un des premier module réutilisable que j'ai fait en 1998)
 
http://mapage.noos.fr/emdel/clib/ed/src/fifo.c
 
j'ai renoncé aux modulo au profit des tests.

Code :
  1. FIFO_get(...)
  2.    ...
  3.          this->Lec++;
  4.          if (this->Lec == this->Max)
  5.          {
  6.             this->Lec = 0;
  7.          }


Message édité par Emmanuel Delahaye le 07-05-2006 à 13:17:26

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

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