Programme Jeu

Makoumba -  
Mahmah Messages postés 497 Statut Membre -
Bonjour,

J'ai un peu de difficulté dans le code C++ d'un programme de jeu. Le jeu est composé d'un damier de 8 lignes et de 12 colonnes. L'objectif est ,en se déplaçant sur le damier, de découvrir 15 case où il y a des $$$$ cachés, et bien sûr de ramasser ces $$$$. Le jeu se termine lorsqu'on a cumulé 15 point (ou si on ferme la fenêtre de jeu). Tout déplacement illégal sera signalé par un beep (tentative de déplacement hors du jeu ou sur une case de type mur noir).

Chaque casew du jeu est visible sous une des formes suivant:
- pierre blanche;
-pierre grise;
-mur noir;
-$$$$;

Au début toutes les case forment un mur noir ou sont composées de pierre blanche. Lorsque vous quitterez une case pierre blanche, celle-ci deviendra pierre grise ou bien $$$$.

Si on découvre une case $$$, retourner sur cette dernière pour amasser l'argents. En quittant la case $$$$, elle devient pierre grise.

Lorsqu'on quitte une case pierre grise elle devient mur noir et on ne peut plus passer par là.

Bref ça c'est le principe du jeu . La partie code est plus... compliquée.

___________________________________________________________________________

Ma première ébauche de diagramme d'action:


Afficher le jeu
Tant que point < 15
Lire ToucheValide; //une touche valide étant une touche de déplacement
Valider le déplacement;
Calculer le nouvelle position courante; // si le déplacement est valide
Modifier le code de la nouvelle case courante ; //si le déplacement est valide
Afficher le jeu; // Si nécasaire

__________________________________________________________________________

void main(void)
{
const int BAS=80, HAUT=72, DROITE=77, GAUCHE=75, HD=73, HG=71, BG=79, BD=81;
const int Nblig=8, Nbcol=12;
int posi,posj;

// Matrice composant le damier du jeu :
// 0==Normal(Pierre blanche), 1==$$$$ caché, 2==$$$$ visible, 3==Pierre grise, 4==Mur Noir

int Matr[Nblig][Nbcol]={ { 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1},
{ 0, 0, 4, 4, 0, 0, 0, 0, 0, 4, 0, 4},
{ 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 4, 1},
{ 0, 0, 4, 1, 4, 0, 0, 4, 4, 0, 4, 1},
{ 1, 0, 4, 4, 4, 1, 4, 0, 4, 0, 4, 0},
{ 1, 0, 1, 1, 0, 1, 4, 1, 4, 0, 4, 0},
{ 1, 0, 1, 0, 0, 0, 4, 4, 4, 0, 4, 0},
{ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
// ....

int i,j;
bool TVLue=false;
char Touche;
posi=0;
posj=0;

cout<<"Decouvrez et amassez 15 cases $$$$";
cout<<"\t\t\t\tPoints:";

// Touche Valide

while(!TVLue)
{
Touche=getch();

if(Touche!=0)
cout << "\a";
else
Touche=getch();

if(Touche==HAUT||Touche==BAS||Touche==GAUCHE||Touche==DROITE||
Touche==HD||Touche==HG||Touche==BG||Touche==BD)
TVLue=true;
else
cout << "\a";
}

// Affichage

for(i=0;i<Nblig;i++)

for(j=0;j<Nbcol;j++)
{
gotoxy(j*5+11, i*3+3);

if(Matr[i][j]<=1)
{
cout << "\xb2\xb2\xb2\xb2";
gotoxy(j*5+11,i*3+4);
cout << "\xb2\xb2\xb2\xb2";
}
}

for(i=0;i<Nblig;i++)

for(j=0;j<Nbcol;j++)
{
gotoxy(j*5+11, i*3+3);

if(Matr[i][j]==2)
{
cout << "$$$$";
gotoxy(j*5+11,i*3+4);
cout << "$$$$";
}
}

_getch();

for(i=0;i<Nblig;i++)

for(j=0;j<Nbcol;j++)
{
gotoxy(j*5+11, i*3+3);

if(Matr[i][j]==3)
{
cout << "\xb0\xb0\xb0\xb0";
gotoxy(j*5+11,i*3+4);
cout << "\xb0\xb0\xb0\xb0";
}
}

for(i=0;i<Nblig;i++)

for(j=0;j<Nbcol;j++)
{
gotoxy(j*5+11, i*3+3);

if(Matr[i][j]==4)
{
cout << "\xdb\xdb\xdb\xdb";
gotoxy(j*5+11,i*3+4);
cout << "\xdb\xdb\xdb\xdb";
}
}

//Affichage du curseur *_*

gotoxy(posj*5+11,posi*3+4);
cout <<"\xc9\xcb\xcb\xbb";
gotoxy(posj*5+11,posi*3+4);
cout <<"\xc8\xca\xca\xbc";

// To be continu...

_getch();
}
A voir également:

3 réponses

Mahmah Messages postés 497 Statut Membre 125
 
Bonjour,

Je préconiserais une utilisation plus intensive du C++.
(accessoirement l'utilisation des balise < code> < /code> sur ce forum)
Et avant tout l'utilisation d'autres fonctions pour organiser un peu le code. (/voir d'autres fichiers)

Le principe est rigolo, préviens si tu as des questions.

M.
0
Makoumba
 
Mon probleme est que je bloque je ne sais pas comment faire pour modifier le code de la nouvelle case courante etc...c'est-à-dire que après le bout de code que jvous ai copie/past je n'sais plus quoi faire :S
0
Mahmah Messages postés 497 Statut Membre 125
 
Et bien il y a eu une touche de saisie, il faut la prendre en compte...

Selon la touche entrée, il faut vérifier que le déplacement est possible, l'appliquer si oui, bipper si non, et mettre à jour la case (même si on a pas bougé ?)

Moi j'aimais bien tes étapes décrites au début, ce serait presque cool si elles étaient chacune dans une fonction séparée.


void bidule( int pouet );   // déclaration courte pour que le fonction soit connue et utilisable.

int main( int argc, char *argv[] )
{
   ...
   bidule( 2 );
   ...
}


void bidule( int pouet )   // Définition réelle de la fonction.
{
   ...
}



En fait, je ne sais pas si cela t'aiderait à y voir plus clair ou si ce serait une contrainte pour toi, mais ce serait plus beau en mettant bien d'un côté le code qui sert à gérer le jeu et le code qui sert à faire l'interface (Affichage, lecture de touches, Vérification de la lecture)

En passant, je ferais bien une chose du genre pour la fonction de déplacement:


enum EDirection   { haut, bas, gauche, droite }; // définition d'un lot de constante

bool deplacer( EDirection d );   // renvoie vrai si le déplacement a pu être fait.

// if ( d == haut ) ...



M.
0