Allegro pause

cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 30 mai 2004 à 21:26
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 31 mai 2004 à 15:11
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

xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009
31 mai 2004 à 12:00
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?
0
cs_mat74 Messages postés 241 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 16 juin 2010
31 mai 2004 à 12:51
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
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
31 mai 2004 à 15:11
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....
0