Allegro pause

Signaler
Messages postés
241
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
dletozeun
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
-
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'ai tenter sa :

//la pause
pause:;
while (1)
{
if (key[KEY_R]) goto jeu;
......
}

//le jeu
jeu:;
while (1)
{
if (key[KEY_P]) goto pause;
......
}

je precise que j'utilise des classes .

mais le pb c'est que qd je met pause il y a des fonction qui s'execute qui ne devrai ce qui fait que les vaisseau ennemis n'ont pas la meme place qd le joueur met la pause que qd il la retire .
je ne sais pas si vous pouvez savoir de koa sa vien sans le code complet mais il est un peu long .

si vous avez des idees ...
merci

3 réponses

Messages postés
172
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2009

je sais pas pourquoi ca marche pas tu peux mettre le code de rafraichissement de la pos des vaisseau?
j utilise une methode pour mettre les jeu en pause avec une fonction commme ceci:


void pause()
{
while(!key(KEY_ESC])
{
blablabla

}
}

while(1)
{
if (key[KEY_P]) pause();
logic;
redraw;
}


voila,j ai jamais utiliser goto et les labels dans un prog en c,je sais pas si tu les utilise bien.Tu as des timer?tu as mis koi dedans?
Messages postés
241
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
16 juin 2010

voila le main
( pr le timer j'utilise la fonction d'allegro )

#include "init.h"

int main ()
{

//initialiser allegro
allegro_init() ;
install_keyboard() ;
install_timer();
install_mouse();
install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL);
set_color_depth(16) ;
set_gfx_mode(GFX_AUTODETECT,640,480,0,0);

//creer le buffer
buffer=create_bitmap(640,480) ;

//charger les bitmap
charger_bitmap ();

//initialiser les positions des etoiles
for (int a=0; a<20; a++)
etoile_x[a]=1+rand()% 640;

//le timer
LOCK_VARIABLE(counter);
LOCK_FUNCTION(timer);
install_int_ex(timer,BPS_TO_TIMER(100));

//definir les variables pour le ou les personnages
j_1.definir_variable(320,440,1.6,100,3,100,0);
//j_2.definir_variable(200,440,1.6,10,3,100,0);

//charger le datafile
datafile=load_datafile("shoot.dat");

/**************************************** menu *************************************************/

menu:;

while (1)
{

blit(buffer,screen,0,0,0,0,buffer->w,buffer->h);
clear_bitmap(buffer);

textprintf(buffer,font,200,200,makecol(255,0,0),"menu");
textprintf(buffer,font,10,10,makecol(255,0,0),"i_arrive_ennemis = %d",i_arrive_ennemis);

if (key[KEY_J]) goto jeu;

}

/**************************************** pause ************************************************/

pause:;

while (1)
{

blit(buffer,screen,0,0,0,0,buffer->w,buffer->h);
clear_bitmap(buffer);

textprintf(buffer,font,200,200,makecol(255,0,0),"pause");

if (key[KEY_J]) goto jeu;
if (key[KEY_M]) goto menu;
textprintf(buffer,font,10,10,makecol(255,0,0),"i_arrive_ennemis = %d",i_arrive_ennemis);

}

/***************************************** jeu *************************************************/

jeu:;

while(!key[KEY_ESC] && !fin)
{

while (counter>0)
{

if (key[KEY_P]) goto pause;
if (key[KEY_M]) goto menu;
textprintf(buffer,font,100,100,makecol(255,0,0),"i_arrive_ennemis = %d",i_arrive_ennemis);

//determiner qd les ennemis deviendrons actifs
arrive_ennemis ();

//joueur 1
j_1.deplacer_personnage(KEY_LEFT,KEY_RIGHT,KEY_UP,KEY_DOWN);
j_1.limiter_personnage((BITMAP*)datafile[avionj1milieu].dat);
j_1.ajouter_missiles ((BITMAP*)datafile[avionj1milieu].dat,missile_joueur,KEY_SPACE);
j_1.fonction_missiles (buffer,missile_joueur,missile_croissant_joueur,avion);
j_1.collision_perso_rochers (rocher[0],missile_joueur,missile_croissant_joueur,(BITMAP*)datafile[avionj1milieu].dat);
j_1.vie_armur ();
j_1.collision_perso_ennemis (missile_ennemis,(BITMAP*)datafile[avionj1milieu].dat,missile_joueur,missile_croissant_joueur,avion);
j_1.collision_perso_bonus ((BITMAP*)datafile[bonus1].dat,(BITMAP*)datafile[avionj1milieu].dat);
j_1.utiliser_bonus (KEY_LCONTROL,KEY_RCONTROL);
j_1.collision_perso_boss ((BITMAP*)datafile[avionj1milieu].dat,missile_boss1,missile_boss1_b,missile_boss1_c);

/*
//joueur 2
j_2.deplacer_personnage(KEY_J,KEY_L,KEY_I,KEY_K);
j_2.limiter_personnage((BITMAP*)datafile[avionj2milieu].dat);
j_2.ajouter_missiles ((BITMAP*)datafile[avionj2milieu].dat,missile,KEY_S);
j_2.augmenter_x ();
j_2.augmenter_y ();
j_2.effacer_missiles ();
j_2.collision_perso_enn ((BITMAP*)datafile[avionj2milieu].dat,avion);
j_2.vie_armur ();
j_2.collision_missiles_perso_enn (missile,avion);
j_2.collision_missiles_enn_perso (missile_ennemis,(BITMAP*)datafile[avionj2milieu].dat);
*/

//faire les calcules en rapport avec les ennemis
for (it_liste_ennemis = liste_ennemis.begin (); it_liste_ennemis != liste_ennemis.end (); it_liste_ennemis++)
{
if ((*it_liste_ennemis).activer==true)
{
(*it_liste_ennemis).deplacer_ennemis ();
(*it_liste_ennemis).desactiver_ennemis ();
}

//pr supp les éléments
else
{
it_liste_ennemis = liste_ennemis.erase (it_liste_ennemis);
it_liste_ennemis--;
}

}

counter--;

draw=true;//confirme le dessin

}

if (draw)
{

blit(buffer,screen,0,0,0,0,buffer->w,buffer->h);
clear_bitmap(buffer);

//afficher le nb de frames par secondes
textprintf(buffer,font,10,460,makecol(255,0,0),"fps = %d",fps ());

//les etoiles
afficher_fond ();

//afficher les ennemis

ajouter_afficher_boss ();

/*
//le boss
b.afficher_boss ();
b.deplacer_boss (true);
b.missiles (missile_boss1,missile_boss1_b,1,j_1,j_2,(BITMAP*)datafile[avionj1milieu].dat);
b.ajouter_missiles (missile_boss1,1,j_1,j_2,true,true,true,true);
*/

for (it_liste_ennemis = liste_ennemis.begin (); it_liste_ennemis != liste_ennemis.end (); it_liste_ennemis++)
{
if ((*it_liste_ennemis).activer==true)
{
(*it_liste_ennemis).ia (1,j_1,j_2,avion);
(*it_liste_ennemis).afficher_ennemis (buffer);
(*it_liste_ennemis).missiles (buffer,missile_ennemis,mine);
(*it_liste_ennemis).afficher_explosion ((BITMAP*)datafile[explosion1n1].dat,
(BITMAP*)datafile[explosion1n2].dat,
(BITMAP*)datafile[explosion1n3].dat,
(BITMAP*)datafile[explosion1n4].dat,
(BITMAP*)datafile[explosion1n5].dat,
(BITMAP*)datafile[explosion1n6].dat,
(BITMAP*)datafile[explosion1n7].dat,
(BITMAP*)datafile[explosion1n8].dat,
(BITMAP*)datafile[explosion1n9].dat,
(BITMAP*)datafile[explosion1n10].dat,
(BITMAP*)datafile[explosion1n11].dat,
(BITMAP*)datafile[explosion1n12].dat,
(BITMAP*)datafile[explosion1n13].dat,
(BITMAP*)datafile[explosion1n14].dat,
(BITMAP*)datafile[explosion1n15].dat,
(BITMAP*)datafile[explosion1n16].dat,
(BITMAP*)datafile[explosion1n17].dat,
(BITMAP*)datafile[explosion1n18].dat);
}
}

//joueur 1
switch (choix_perso)
{
case 1:
j_1.afficher_personnage(buffer,
(BITMAP*)datafile[avionj1ggg].dat,
(BITMAP*)datafile[avionj1gg].dat,
(BITMAP*)datafile[avionj1g].dat,
(BITMAP*)datafile[avionj1milieu].dat,
(BITMAP*)datafile[avionj1d].dat,
(BITMAP*)datafile[avionj1dd].dat,
(BITMAP*)datafile[avionj1ddd].dat);
break;
case 2:
j_1.afficher_personnage(buffer,
(BITMAP*)datafile[avionj2ggg].dat,
(BITMAP*)datafile[avionj2gg].dat,
(BITMAP*)datafile[avionj2g].dat,
(BITMAP*)datafile[avionj2milieu].dat,
(BITMAP*)datafile[avionj2d].dat,
(BITMAP*)datafile[avionj2dd].dat,
(BITMAP*)datafile[avionj2ddd].dat);
break;
case 3:
j_1.afficher_personnage(buffer,
(BITMAP*)datafile[avionj3ggg].dat,
(BITMAP*)datafile[avionj3gg].dat,
(BITMAP*)datafile[avionj3g].dat,
(BITMAP*)datafile[avionj3milieu].dat,
(BITMAP*)datafile[avionj3d].dat,
(BITMAP*)datafile[avionj3dd].dat,
(BITMAP*)datafile[avionj3ddd].dat);
break;
case 4:
j_1.afficher_personnage(buffer,
(BITMAP*)datafile[avionj4ggg].dat,
(BITMAP*)datafile[avionj4gg].dat,
(BITMAP*)datafile[avionj4g].dat,
(BITMAP*)datafile[avionj4milieu].dat,
(BITMAP*)datafile[avionj4d].dat,
(BITMAP*)datafile[avionj4dd].dat,
(BITMAP*)datafile[avionj4ddd].dat);
break;
}

j_1.afficher_statistique (buffer,10,10,120,10,340,6,210,8,(BITMAP*)datafile[cadencedetir].dat);
j_1.afficher_explosion_mort ((BITMAP*)datafile[explosion1n1].dat,
(BITMAP*)datafile[explosion1n2].dat,
(BITMAP*)datafile[explosion1n3].dat,
(BITMAP*)datafile[explosion1n4].dat,
(BITMAP*)datafile[explosion1n5].dat,
(BITMAP*)datafile[explosion1n6].dat,
(BITMAP*)datafile[explosion1n7].dat,
(BITMAP*)datafile[explosion1n8].dat,
(BITMAP*)datafile[explosion1n9].dat,
(BITMAP*)datafile[explosion1n10].dat,
(BITMAP*)datafile[explosion1n11].dat,
(BITMAP*)datafile[explosion1n12].dat,
(BITMAP*)datafile[explosion1n13].dat,
(BITMAP*)datafile[explosion1n14].dat,
(BITMAP*)datafile[explosion1n15].dat,
(BITMAP*)datafile[explosion1n16].dat,
(BITMAP*)datafile[explosion1n17].dat,
(BITMAP*)datafile[explosion1n18].dat);
j_1.afficher_bonus (5,200);

/*
//joueur 2
j_2.afficher_personnage(buffer,(BITMAP*)datafile[avionj2ggg].dat,(BITMAP*)datafile[avionj2gg].dat,(BITMAP*)datafile[avionj2g].dat,(BITMAP*)datafile[avionj2milieu].dat,(BITMAP*)datafile[avionj2d].dat,(BITMAP*)datafile[avionj2dd].dat,(BITMAP*)datafile[avionj2ddd].dat);
j_2.afficher_missiles (buffer,missile);
j_2.afficher_statistique (buffer,10,20,120,20,340,16,210,18,(BITMAP*)datafile[cadencedetir].dat);
j_2.afficher_explosion_mort ((BITMAP*)datafile[explosion1n1].dat,
(BITMAP*)datafile[explosion1n2].dat,
(BITMAP*)datafile[explosion1n3].dat,
(BITMAP*)datafile[explosion1n4].dat,
(BITMAP*)datafile[explosion1n5].dat,
(BITMAP*)datafile[explosion1n6].dat,
(BITMAP*)datafile[explosion1n7].dat,
(BITMAP*)datafile[explosion1n8].dat,
(BITMAP*)datafile[explosion1n9].dat,
(BITMAP*)datafile[explosion1n10].dat,
(BITMAP*)datafile[explosion1n11].dat,
(BITMAP*)datafile[explosion1n12].dat,
(BITMAP*)datafile[explosion1n13].dat,
(BITMAP*)datafile[explosion1n14].dat,
(BITMAP*)datafile[explosion1n15].dat,
(BITMAP*)datafile[explosion1n16].dat,
(BITMAP*)datafile[explosion1n17].dat,
(BITMAP*)datafile[explosion1n18].dat,
(BITMAP*)datafile[explosion1n19].dat,
(BITMAP*)datafile[explosion1n20].dat);
*/

//les bonus
ajouter_afficher_bonus ();

//les rochers
ajouter_afficher_rochers ();

i_arrive_ennemis+=2;

draw=false;

}

while (counter <=0) {} //attend que counter se remette en marche

}

//on libere la memmoire
detruire_bitmap ();
unload_datafile(datafile);

return 0 ;

}
END_OF_MAIN() ;

void timer(void)//notre fonction timer
{
counter++;
}
END_OF_FUNCTION(timer);//fin de la fonction timer
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008

moi ce que j'utiliserais avec allegro c'est

int pause()
{
while(! key[KEY_ESC]) //ou n'importe quelle touche
{
//boucle vide
}
}

Si ca peux t'aider....