Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Implémentation d'un Menu (allegro) [ Divers / Débutant(e) ] (Darksheep)

mardi 4 juillet 2006 à 18:06:07 | Implémentation d'un Menu (allegro)

Darksheep

Bonjour ;
Désolé d'être un newbie ; je commence a comprendre les rudiments d'allegro et j'aimerai ajouter un menu a mon début de jeu (interprétation généreuse) .Voila LE menu de mes rèves (pour commencer) une petite image, si l'on appuie sur ESC pendant le menu on quitte le jeu , si l'on appuie sur ESC pendant le jeu on retourne au menu .key[KEY_SPACE] pour lancer le jeu
Jai cherché et j'ai bidouillé ce que je pouvais avec des variables bool, sans succes car lorsque j'appuie sur ESC je quitte tout ,sans passer par la case Menu.
Utilisation de goto strictement interdite ^^.
Voila ma fonction Main :

int main(int argc, char *argv[])
{
if(init()<0) return 0;
init_game();
   while(!done)
   {  
        if(faire_menu) menu();
       
        while(temps_de_jeu < timer)
        {
         control();
         temps_de_jeu++;
         dessiner = true ;
        }
        if(dessiner)
        {
         clear(buffer);
         draw_all();
        }
         if(key[KEY_ESC]){faire_menu =true; }
   }
    deinit();
   return 0;
}
END_OF_MAIN()

Voila mon Menu :
void menu()
{
while(faire_menu)
 {
  blit((BITMAP*)data[TEXTURE2].dat,screen,0,0,0,0,640,480);
  if(key[KEY_ESC]) 
    {
    faire_menu = false;
    done = true ;
    }
  if(key[KEY_SPACE]) faire_menu = false;
 }
}

Alors pourquoi l'appuie sur la touche ESC déclenche la fermeture du programe au lieu du retour au menu ? ne devrais-je pas à avoir a appuyer 2fois sur ESC ?

jeudi 6 juillet 2006 à 11:05:51 | Re : Implémentation d'un Menu (allegro)

vincelefou

Membre Club
Salut ,

Personnellement, je coderai cela ainsi :

    int done = 0;
    int touche;
    //ici tu affiches le menu
    textprintf(screen,font,10,10,makecol(255,255,255),"* MENU *");
 
    while (!done) {
      //ici on teste les touches
      touche = readkey() >> 8;
      // touche ESC -> on sort
      if (touche == KEY_ESC)
        done = 1;
      // touche SPACE -> on joue
      if (touche == KEY_SPACE)
        textprintf(screen,font,10,30,makecol(255,0,0),"* JEU *");   
    }

A+

Vince Le Fou !

vendredi 7 juillet 2006 à 16:09:09 | Re : Implémentation d'un Menu (allegro)

Darksheep

Désolé je fais un jeu par conséquent (arrétez moi si je dis des bétises ) je ne peux pas attendre pendant son déroulement (sauf quelques circonstances précises ) la lecture d'un touche spécifique , (l'utilisation de readkey); Pendant le jeu les joueurs vont appuyer sur , down , left ,sauter , tirer , courrir ....
De plus le menu doit se trouver dans la boucle évènement , puisque je veux y retourner pour quitter et que je ne souhaite l'utilisation de l'instrument goto.
 Je souhaite organiser mon menu de tel sorte que pendant le jeu , l'apuie de la touche ESC revoie au menu et qu'au menu un deuxieme apuie de cette même touche suffise pour quitter le programme.Malheureusement , j'ai l'impression que mon programme ne fais pas de différence entre le premier et second apuie et quitte tout d'une seule traite.

vendredi 7 juillet 2006 à 16:33:04 | Re : Implémentation d'un Menu (allegro)

Darksheep

Ce qui pourrait m'aider a ce propos aussi serait ce connaître , comment faire une fonction qui retourne un quand une touche est non pas préssée, mais relachée ?

vendredi 7 juillet 2006 à 19:20:20 | Re : Implémentation d'un Menu (allegro)

vincelefou

Membre Club

Salut,

Je ne vois pas ou se trouve ton problème ?
Si tu utilses un "switch( readkey()>>8)" , tu ne seras pas bloqué

A mon avis, tu dois faire 2 boubles.
Exemple :
1er boucle : pour le menu
condition de sortie de la 1er boucle => touche ESC

2eme boucle : traitement principale de ton jeu
condition de sortie de la 2eme boucle => touche ESC or Fin de partie(game over)...

      // 1er boucle
      while (...){

           test des touches
           si touche ESC => on quitte
           si touche SPACE => start => appel nouvelle procédure
      }
  
      // nouvelle procedure : 2eme boucle
      while (...){


      }
      effacement du buffer clavier puis
      RETURN => ce qui permet de revenir dans la 1er boucle

Es-tu d'accord avec cela ?

Vince Le Fou !


samedi 8 juillet 2006 à 13:00:29 | Re : Implémentation d'un Menu (allegro)

Darksheep

Dsl je suis débutant : (pas bien compris XD) j'ignore tout de "return  sans arguments a coté" En fait je n'ai pas été assez clair mon problème , c'est que lorsque j'appuie sur ESC pendant le jeu , cela valide ET la condition pour sortir du jeu ET la condition pour sortir du menu ;cela fait que je quitte tout le programme sans passer par la case menu des que j'appuie sur la touche ESC

while(!done)
   {  
        while(faire_menu)
         {
            clear_keybuf();
            blit((BITMAP*)data[TEXTURE2].dat,screen,0,0,0,0,640,480);
            if(key[KEY_SPACE]&&faire_menu) faire_menu = false;
             else if(key[KEY_ESC])
            {
            faire_menu = false ;
            done = true ;
             }
         }
       
        while(temps_de_jeu < timer)
        {
        
         control();
         temps_de_jeu++;
         dessiner = true ;
        }
      
        if(dessiner)
        {
         clear(buffer);
         draw_all();
        }
         if(key[KEY_ESC]){faire_menu =true; } //Comme ça je reviens au menu , au lieu de cela je quitte le jeu :'(
         if(key[KEY_A]) done = true ;
   }

samedi 8 juillet 2006 à 23:45:09 | Re : Implémentation d'un Menu (allegro)

vincelefou

Membre Club

Voici un exemple de programme !
Recopie le et execute le ...

// DEBUT PROGRAMME
#include <allegro.h>

void monmenu();
void monjeu();

int main() {
    // initialisation de base
 int depth, res;
 allegro_init();
 depth = desktop_color_depth();
 if (depth == 0) depth = 32;
 set_color_depth(depth);
 res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
 if (res != 0) {
  allegro_message(allegro_error);
  exit(-1);
 }

 install_timer();
 install_keyboard();
 install_mouse();
 srand(time(NULL));

    int done=0;
    int touche;
    // on affiche le menu
 monmenu();
    while (!done) {
        touche=readkey()>>8;
        if (touche==KEY_ESC)
          done=1;
        if (touche==KEY_SPACE) {
          monjeu();
          monmenu();
        }
 }

 return 0;
}
END_OF_MAIN();

void monmenu() {
   clear_bitmap(screen);
   textprintf(screen, font, 250, 50, makecol(255, 100, 0), "* Mon Menu *");
   textprintf(screen, font, 250, 65, makecol(255, 255, 0), " SPACE - jouer");
   textprintf(screen, font, 250, 75, makecol(255, 255, 0), "   ESC - exit");    
}

void monjeu() {
    
   int done2 = 0;
   // paramètres de la forme
   int x,y;  // coordonnées
   int tx,ty; // taille
   int px,py; // pas d'avancement en x et y
   // initialisation des variables de la forme
   clear_bitmap(screen);
   tx=rand()%20+20;
   x=rand()%(640-tx*2);
   x+=tx;
   px=(rand()%5)+2;

   ty=rand()%20+20;
   y=rand()%(480-ty*2);
   y+=ty;
   py=(rand()%5)+2;
   rectfill(screen,x,y,x+tx,y+ty,makecol(0,255,0));
  
   while (!done2){

       textprintf(screen, font, 10,10, makecol(255,255,255),
       "Appuyez sur les fleches haut,bas,gauche, droite et ESC pour quitter");    
    if (keypressed()){
           //effacement aux anciennes coordonnées
     rectfill(screen,x,y,x+tx,y+ty,makecol(0,0,0));
     switch (readkey()>>8){  // recup sous la forme scancode
    
        case KEY_UP :  y-=py;  break;
     case KEY_DOWN : y+=py;  break;
     case KEY_LEFT : x-=px;  break;
     case KEY_RIGHT :  x+=px;  break;
     case KEY_ESC : done2=1; break;// pour fin
     default : break;
     }
     // contrôle des bords
     x=(x+tx<0) ? 640-1 : x;
     x=(x>640) ? -tx+1 : x;
     y=(y+ty<0) ? 480-1 : y;
     y=(y>480) ? -ty+1 : y;
           // affichage
     rectfill(screen,x,y,x+tx,y+ty,makecol(0,255,0));
    }
   }
   clear_keybuf();
}
// FIN PROGRAMME

qu'en penses-tu ?

Vince Le Fou !


dimanche 9 juillet 2006 à 19:58:01 | Re : Implémentation d'un Menu (allegro)

Darksheep

Tout simplement génial (je vais méditer dessus)

dimanche 9 juillet 2006 à 19:58:03 | Re : Implémentation d'un Menu (allegro)

Darksheep

Tout simplement génial (je vais méditer dessus)

dimanche 9 juillet 2006 à 19:58:04 | Re : Implémentation d'un Menu (allegro)

Darksheep

Tout simplement génial (je vais méditer dessus)


1 2

Cette discussion est classé dans : menu, jeu, key, appuie, esc


Répondre à ce message

Sujets en rapport avec ce message

allegro pause [ par mat74 ] salut a ts ,j'ai un pb , je suis en train de faire un jeu avec allegro , j'ai fini la boucle principale et j'aimerai pouvoir mettre pause ds le jeu .j menu et opengl [ par turie ] J'ai commencé de faire un petit jeu en opengl en c++ via glut qui tourne. Maintenant j'aimerai y integrer un menu dans la meme fenetre, mais je ne s Menu qui bloque l'application [ par SnOOpss ] Bonjour j'ai une application directX en mode fenetré avec un menu et mon probleme c'est que si quelqu'un clique sur le menu ou affiche les options du menu de jeu [ par crousti42 ] Bonour tout le monde !!!Je souhaiterais pouvoir créer un menu semblable à ceux que l'on trouve dans les jeux d'aujourd'hui (nouvelle partie, charger p menu de jeu video 3D [ par Gotscha ] Bonjour à tous,Actuellement je suis sur un projet et j'ai besoin de faire un menu pour un jeu video 3D.pas un menu : "Fichier Edition Affichage etc... boite de dialogue avec visual c++ [ par romanticide ] Bonjourje voudrais ouvrir une boite de dialogue pour afficher les règles de mon jeu (l'utilisateur fait un clic droit puis sélectionne règle ce qui ou jeu d'echecs... [ par mehdi118218 ] bonjour tt le monde, je m'appelle Mehdi, je commence tout juste a programmer surtout dans le cadre de mes etudes, é g un exercice que j'arrive pas a r arbre alpha-beta [ par tarrache ] bonsoir tout le monde,pour programer un jeu de dame, demandé comme projet dans mon ecole,je serais très reconnaissant pour celui ou celle qui me fourn jeu sdl [ par cheikhouna ] SLT je suis debutant en sdl et j'aimerai avoir un bon projet de jeu ou d'animation 2d merci IA jeu d'échec [ par Leinhardt ] Bonjour à tous.Je suis actuellement en dernière année de licence informatique et ce semestre, nous avons un projet à faire. Mes collègues et moi avons


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.