begin process at 2012 02 10 20:15:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Implémentation d'un Menu (allegro)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Implémentation d'un Menu (allegro)

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ée 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 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... 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 Comment retourner à une certaine ligne du code ? [ par BabyAzerty ] Bonjour, Je souhaiterai savoir comment retourner à un certain point du code ? Par exemple : Je lance un pendu (ou n'importe quel jeu) Et lorsque je Aide pour mastermind [ par Giuventine ] Bonjour à tous, Je débute en programmation et dans le cadre du cours je dois réaliser un projet qui est le Mastermind en C. Pour cela, j'ai conçu u Transparence sous windows xp [ par vince1633 ] bonjour tout le monde, alors voila depuis un petit moment je cherche un moyen de mettre mes bordure de fenêtre en transparence, ainsi que ma bar de me


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales