Implimenter Un Menu En C Avec Allegro

Implimenter Un Menu En C Avec Allegro - C - Programmation

Marsh Posté le 13-04-2013 à 15:39:55    

S'il vous plait quelqu'un peut m'aider à implimenter un menu du jeu en c  j'ai essayé avec ce code mais ça marche pas  
int i=0;
int menu=0;
while(continuer!=0)
{
 
 clear_bitmap(Buffer);
 
if(  key[KEY_DOWN]  )
{
i++;
menu=(i-1)%3;
 
}
 
 
else if(  key[KEY_UP]  )
{
i--;
menu=(i-1)%3;
 
}
 
Buffer = create_bitmap(800, 480);  
blit(img[menu], Buffer, 0, 0, 0, 0, img[menu]->w, img[menu]->h);  
 
blit(Buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);  
}

Reply

Marsh Posté le 13-04-2013 à 15:39:55   

Reply

Marsh Posté le 17-04-2013 à 11:23:33    

Bonjour,
 
On ne connait ni tes valeurs de choix de menus, ni combien il y en a.
 
Es-tu new à la programmation en C?
Si oui, ne commence certainement pas par là.
 
Sinon, on ne voit pas l'intégralité de ton code. On ne voit pas l'initialisation de la var "continuer" ni ce que représente le tableau key[].
 
A mon avis, si tu mets un tableau de key comme ceci :
key[0] = 21;
key[1] = 42;
Ton KEY_DOWN est égal à 0 et donc ton KEY_UP à 1. (supposition)
 
(imaginons que les touches 21 et 42 sont les touches bas et haut)...
Dans le premier if, ca équivaudra à :
   
if ( 21 )  
{
i++;  
menu=(i-1)%3;  
}  
else if ( 42 )
{
i--;
menu = (i-1)%3;
}
 
Dans tous les cas, il rentrera forcément dans le 1er if, et pas dans le second.
Puisque tu demandes à ton ordi "Est-ce que 21 est différent de 0 ?" il te répond "Bah oui !" donc il rentre dans c'te condition.
 
 
Si tu vas tout le temps vers le bas, c'est donc normal, et je te conseille de faire une sorte de "keypressed = getch();" (en SDL je sais pas à quoi ça équivaut) et de vérifier la valeur de keypressed (c'est un int).


Message édité par Profil supprimé le 17-04-2013 à 11:25:19
Reply

Marsh Posté le 17-04-2013 à 19:10:55    

Sauf que si c'est comme la SDL, chaque case correspond à la clef et renvoi l'état (appuyé/pas appuyé).
Sinon, tu as pas mis assez de code, on a aucune idée de ce qui se passe derrière, de plus tu recréer tout le temps ton buffer ce qui me semble bizarre et pour finir, tu dis pas ce qui ne marche pas :D


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 19-04-2013 à 00:17:15    

Je parlais par KEY_DOWN et KEY_UP la fleche du haut et flèche du bas...
 
Sinon je n'ai pas comris ton problème, donc exprime toi mieux..

Reply

Marsh Posté le 19-04-2013 à 00:47:12    

Non je suis pas débutant en c mais j'ai pas trouvé la solution pour implimenter un menu en c avec la bibliothéque ALLEGRO et non  pas avec  SDL , ce que je me demande c'est que j'ai 3 images (jouer/option/quitter) , la  1 ère  correspond à menu 1 (jouer)  et lorsque je clique sur la touche bas elle m'affiche la 2 eme image (option ) et finalement lorsque je clique encore sur la touche bas   elle m'affiche la 3 eme image (quitter )

Reply

Marsh Posté le 07-05-2013 à 15:36:49    

ala99 a écrit :

Non je suis pas débutant en c mais j'ai pas trouvé la solution pour implimenter un menu en c avec la bibliothéque ALLEGRO et non  pas avec  SDL , ce que je me demande c'est que j'ai 3 images (jouer/option/quitter) , la  1 ère  correspond à menu 1 (jouer)  et lorsque je clique sur la touche bas elle m'affiche la 2 eme image (option ) et finalement lorsque je clique encore sur la touche bas   elle m'affiche la 3 eme image (quitter )


 
Avec Allegro, tu as deux possibilités
 
Afficher une image du menu (ou du texte) et gérer le clic avec la souris
 
Afficher une image du menu (ou du texte) et gérer le clavier
 
En général ça se passe comme ça pour le clavier
 

Code :
  1. ALLEGRO_EVENT_QUEUE *events;
  2. ALLEGRO_EVENT event;
  3. /*
  4. je suppose que tu as déjà initialisé Allegro et ouvert une fenêtre...
  5. al_init();
  6. al_install_keyboard();
  7. al_install_mouse();
  8. al_create_display(...,...);
  9. */
  10. events=al_create_event_queue();
  11. al_register_event_source(events, al_get_keyboard_event_source());
  12. al_register_event_source(events, al_get_mouse_event_source());
  13. redo=1;
  14. while (redo) {
  15.     al_wait_for_event(events,&event);
  16.     if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
  17.        redo=0;
  18.     }
  19. }


 
avec la souris, un truc du genre

Code :
  1. if ((event.type==ALLEGRO_EVENT_MOUSE_BUTTON_DOWN && event.mouse.button==1))
  2. {
  3. if (event.mouse.x>positionmenu && event.mouse.x>positionmenufin && event.mouse.y  etc.
  4. }


Message édité par edwoud le 07-05-2013 à 15:40:54
Reply

Sujets relatifs:

Leave a Replay

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