Programme Jeu
Makoumba
-
Mahmah Messages postés 497 Statut Membre -
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();
}
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:
- Programme Jeu
- Programme demarrage windows - Guide
- 94 degrés jeu - Télécharger - Divers Jeux
- 94 jeu - Télécharger - Puzzle & Réflexion
- Jeu java - Télécharger - Jeux vidéo
- Jeu zuma - Télécharger - Jeux vidéo
3 réponses
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.
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.
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
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.
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:
M.
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.