Bomberman avec turbo c++

cs_xav42 Messages postés 26 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 17 juillet 2007 - 9 mai 2002 à 15:00
WariorProg Messages postés 18 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 15 décembre 2013 - 17 janv. 2005 à 20:43
Bonjour, je suis étudiant et à mon iut on utilise turbo c++ qui date un peu
mais bon...
Voici mon probleme :
j'ai un projet pour la fin de l'annee: faire un bomberman tres simplifié,
donc j'utiser par de sprite mais tout simplement un carré que je deplace
dans toute les zone de l'ecran a l'aide du clavier, ça j'y arrive avec un:
c= getch
if (c==27)
{ deplacement de mon carré...}
Mon probleme: il y a 2 joueurs donc 2 carré a deplacer....
j'y arrive mais un gros probleme: on peux pas les deplacer en meme temps...
les combinaison de touche marche pas, du style: if (c==27 && autre code
ascii...)
donc ça bouche mais chacun son tour...
comment faire pour pouvoir avoir une interuption avec plusieur touche, une
combinaison de touche... enfin, une solution qui ferrai que je peu deplacer
les 2 carré en meme temps, si j'appuis sur '' par exemple : mon carré bleu
va a gauche et si j'ppuis en meme temps sur 'L' : le rouge va vers la
droite...
Merci
Xav

Revenir en haut

programmaeur fou
Invité

Posté le: Lun Avr 22, 2002 12:17 Sujet du message:

il n'y a po de solution comme tu dis, où chaque touche serait gérée
parallèlement !
Les touches seront toujours traités l'une après l'autre.
je te conseille d'utiliser kbhit() qui permet de savoir quand une touche est
pressée.
genre :
while (...)
{
if (kbhit())
c = getch();
}
switch(c)
{
case 'codeASCII de la touche' :
deplacement du premier joueur
break;
case 'code ASCII d'une autre touche' :
deplacement du secon joueur
break;
}

Comme ça même si les deux joueurs appuient en même temps sur une touche,
grace à la grande vitesse de ton PC tu auras l'impression que les deux
carrés se déplacent en même temps, alors qu'ils se seront déplacés l'un
après l'autre.

Bon j'espère que ça va t'aider !!!
Sinon je veux bien aussi t'expliquer comment gérer les interruptions clavier
mais ça va te compliquer la vie pour rien

Revenir en haut

Invité

Posté le: Mar Avr 30, 2002 11:15 Sujet du message:

Sur un PC, il est possible de tester une action simultanée sur les touches
shift crtl et alt. Ces touches n'envoient pas de code caractere mais les
modifient.
La particularité c'est qu'ils sont lisibles en permanence.

Le bout de programme renvoie l'état des touches (combinaison binaire sur 8
bits)

//****************************************************************
char ShiftCtrl(void) // Detecter l' appui sur shift ou ctrol
{
char temp;
asm {
// ****************** LIRE L ETAT DU CLAVIER
MOV AH,2; // fonction
INT 0x16; // lire les flags clavier dans AL
AND AL,0x7;
MOV temp,AL; // sortir les nouvelle donnees dans une variable C
}
return (temp);
}

Revenir en haut

xav42
Nouveau membre du Club

Inscrit le: 20 Avr 2002
Messages: 4

Posté le: Jeu Mai 09, 2002 13:17 Sujet du message: Merci mais...

Avec le switch.. marche pas vraiment... quand j'appuis une fois relaché le
carré continu a avancer et de + ça change rien, 2 touche en meme temps ça
marche pas...
Ensuite pour l'autre reponse... je capte rien, je suis tout debut...
l'assembleur me parré un autre monde...lol
je fé une copie de mon projet:

#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>

void Titre() // ecran titre du jeu
{
char f;
cleardevice();
setcolor(RED);
settextstyle(TRIPLEX_FONT, HORIZ_DIR, 6);
outtextxy(100,30," boomberman!!! ");
do //Boucle pour faire clignoter le texte en mode graphique
{ settextstyle(TRIPLEX_FONT, HORIZ_DIR, 2);
setcolor(9);
outtextxy(160,420," appuyer sur une touche ");
delay(500);
setfillstyle(SOLID_FILL,BLACK);
bar(160, 400, 600,460);
delay(500);
}while(!kbhit());
f=getch(); /*sort si on appuit sur echap */
if (f==27)
{
closegraph();
}
cleardevice();
}

void joueur(int mi , int ni )
{
char c;
while (c!=27)
{

setfillstyle(SOLID_FILL,BLUE);
bar(mi,ni,mi+30,ni+30);

if (kbhit())
{
c=getch();
/* deplacement du joueur bleu */

if(c==77 && mi<getmaxx()-30) /*deplacement vers la droite*/
{

setfillstyle(SOLID_FILL,BLACK);
bar(mi,ni,mi+30,ni+30);
mi=mi+10;

}

if(c==75 && mi>0) /*deplacement vers la gauche*/
{
setfillstyle(SOLID_FILL,BLACK);
mi=mi-10;
bar(mi+30,ni,mi+60,ni+30);

}

if(c== 72 && ni>0) /*deplacement vers le haut*/
{
setfillstyle(SOLID_FILL,BLACK);
ni=ni-10;
bar(mi,ni+30,mi+30,ni+60);

}

if(c==80 && ni<getmaxy()-30) /*deplacement vers le bas*/
{
setfillstyle(SOLID_FILL,BLACK);
ni=ni+10;
bar(mi,ni-30,mi+30,ni);

}

/* fin du deplacement */
}
delay(3);
}
}

void main()
{
int gdriver = DETECT, gmode, errorcode;
char E;
initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("carte graphique...: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}

while (E!=27)
{
Titre();
joueur(200,100);

}

enfin, la c quand j'ai pas encore essayer de mettre un joueur 2 avec
switch(c) mais comme ça marche pas...
si vous pouvez quelque chose pour moi.. ça serrai super simpa
merci >>

1 réponse

WariorProg Messages postés 18 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 15 décembre 2013
17 janv. 2005 à 20:43
WariorProg

Merci beaucoup car moi je galerai avec int86(0x16,..............)
il est vrai que ca a l air plus leger avec kbhit()
0
Rejoignez-nous