cs_Darksheep
Messages postés69Date d'inscriptionsamedi 4 novembre 2000StatutMembreDernière intervention15 septembre 2009
-
4 juil. 2006 à 18:06
cs_Darksheep
Messages postés69Date d'inscriptionsamedi 4 novembre 2000StatutMembreDernière intervention15 septembre 2009
-
9 juil. 2006 à 19:58
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.
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 ?
vincelefou
Messages postés16Date d'inscriptionvendredi 24 décembre 2004StatutMembreDernière intervention28 juillet 2007 6 juil. 2006 à 11:05
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 *");
}
cs_Darksheep
Messages postés69Date d'inscriptionsamedi 4 novembre 2000StatutMembreDernière intervention15 septembre 2009 7 juil. 2006 à 16:09
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.
cs_Darksheep
Messages postés69Date d'inscriptionsamedi 4 novembre 2000StatutMembreDernière intervention15 septembre 2009 7 juil. 2006 à 16:33
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 ?
cs_Darksheep
Messages postés69Date d'inscriptionsamedi 4 novembre 2000StatutMembreDernière intervention15 septembre 2009 8 juil. 2006 à 13:00
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
vincelefou
Messages postés16Date d'inscriptionvendredi 24 décembre 2004StatutMembreDernière intervention28 juillet 2007 8 juil. 2006 à 23:45
Voici un exemple de programme !
Recopie le et execute le ...
// DEBUT PROGRAMME
#include
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);
}
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();
}
}
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;
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