#define CASE_JEU_VIDE 'O' // case vide
#define CASE_JEU_OK 'S' // case a trouver
#define CASE_NON '-' // case non encore selectionnee
void LigneSeparatrice(void)
{
int i;
printf("+---+");
for (i=0 ; i<TAILLE_MAX ; ++i) printf("---+");
printf("\n");
}
int main(void)
{
// --- Grille des cases a decouvrir
bool abJeu[TAILLE_MAX][TAILLE_MAX];
// --- Grille des cases a montrer
bool abDecouvert[TAILLE_MAX][TAILLE_MAX];
int i,j,iColonne,iLigne,iTrouve;
// --- Initialisations
for (i=0 ; i<TAILLE_MAX ; ++i)
{
for (j=0 ; j<TAILLE_MAX ; ++j)
{
// --- Toutes les cases sont vides
abJeu[i][j] = false;
// --- Toutes les cases sont cachees
abDecouvert[i][j] = false;
}
}
// --- Remplissage aléatoire du jeu
srand(time(NULL));
for (i=0 ; i<TAILLE_MAX ; ++i)
abJeu[rand() % TAILLE_MAX][rand() % TAILLE_MAX] = true;
// --- Boucle du jeu
while (true)
{
// --- Visu de la grille
printf("\n");
LigneSeparatrice();
printf("| |");
for (i=0 ; i<TAILLE_MAX ; ++i) printf(" %d |",i + 1);
printf("\n");
LigneSeparatrice();
iTrouve = 0; // compteur de cases trouvees
for (i=0 ; i<TAILLE_MAX ; ++i)
{
printf("| %d |",i + 1);
for(j=0 ; j<TAILLE_MAX ; ++j)
{
if (abDecouvert[i][j])
{
// --- Case a montrer
printf(" %c |",abJeu[i][j] ? CASE_JEU_OK : CASE_JEU_VIDE);
if (abJeu[i][j]) ++iTrouve;
}
else
{
// --- Case a ne pas montrer
printf(" %c |",CASE_NON);
}
}
printf("\n");
}
LigneSeparatrice();
printf("%d case(s) trouvee(s)\n\n",iTrouve);
// --- Saisie de la colonne de la case a montrer (ou arret du jeu)
// --- (boucle tant que la colonne saisie est incorrecte)
do
{
printf("Quelle colonne (1 a %d, 0=arret du jeu) ? ",TAILLE_MAX);
scanf("%d",&iColonne);
} while (iColonne < 0 || iColonne > TAILLE_MAX);
if (iColonne == 0) break; // fin du jeu
// --- Saisie de la ligne de la case a montrer (ou arret du jeu)
// --- (boucle tant que la ligne saisie est incorrecte)
do
{
printf("Quelle ligne (1 a %d, 0=arret du jeu) ? ",TAILLE_MAX);
scanf("%d",&iLigne);
} while (iLigne < 0 || iLigne > TAILLE_MAX);
if (iLigne == 0) break; // fin du jeu
// --- Nouvelle case a montrer
// --- ("x - 1" pour ramener les indices a zero)
abDecouvert[iLigne - 1][iColonne - 1] = true;
}
printf("\n*** Fin du jeu ***\n");
system ("pause");
return 0;
}
lil_adriano
Messages postés42Date d'inscriptionvendredi 26 janvier 2007StatutMembreDernière intervention16 juin 2008 23 févr. 2008 à 03:49
Apres des jours d'acharrement et en m'inspirant des autres j'ai trouve la solution a mon probleme il y a un semaine environ, j'aurai bien pu prendre direct le solution de jfrançois mais etant un futur programmeur je devais la trouvée!!! chose faites donc je la partage avec futur progammeur et confirmé!!
Nb=0;
do
{
i=rand()%5;
j=rand()%5;
if(serp[i][j]=='°'){
serp[i][j]='S';
Nb++;
}
}while(Nb<5);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
tab[i][j]='°';
}
}
printf("\n");
printf(" | A B C D E \n");
printf("_______________________\n");
for (i=0;i<5;i++)
{
printf("\n");
printf("%d |",g);
g++;
for(j=0;j<5;j++)
{
printf(" %c |",serp[i][j] );
}
}
g=0;
printf("\n");
printf("\n\nquel colonne?\n");
scanf("%d",&col);
printf("quel ligne?\n");
scanf("%d",&ligne);
//stock la ligne voulue
i=ligne;
//stock la colonne voulue
j=col;
if (tab[i][j]!=serp[i][j])
{
tab[i][j]='S';
printf("\nVous avez Perdu vous tombez sur un S!!!!\n");
printf("DOMMAGE !!!\n");
}
else
{
cpt=48;
if (serp[i-1][j-1]=='S'){cpt=cpt+1;}
if (serp[i-1][j]=='S'){cpt=cpt+1;}
if (serp[i+1][j-1]=='S'){cpt=cpt+1;}
if (serp[i][j-1]=='S'){cpt=cpt+1;}
if (serp[i][j+1]=='S'){cpt=cpt+1;}
if (serp[i-1][j-1]=='S'){cpt=cpt+1;}
if (serp[i][j-1]=='S'){cpt=cpt+1;}
if (serp[i+1][j+1]=='S'){cpt=cpt+1;}
//affiche d'un X si les cases concordent
tab[i][j]=cpt++;
}
printf("\n");
printf(" | A B C D E \n");
printf("_______________________\n");
for (i=0;i<5;i++)
{
printf("\n");
printf("%d |",g);
g++;
for(j=0;j<5;j++)
{
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 18 févr. 2008 à 02:28
Pas du tout compris.
"révéler le point voulu."
Ça veut dire quoi ?
Afficher seulement une valeur précise (ou différente de) ?
Simple, t'as qu'à tester la valeur:
lil_adriano
Messages postés42Date d'inscriptionvendredi 26 janvier 2007StatutMembreDernière intervention16 juin 2008 18 févr. 2008 à 02:37
Salut desole je me suis mal exprime mais apparement grace a toi j'ai peu etre trouvre la solution en faite je veux bien afficher une valeur precise. c'est que au depart mon tableau est rempli de valeur mais le joueur ne le vois pas c'est avec les combinaison de i et j la valeur s'affiche. et je pense que ca donc j'avais besoin. merci encore je regarde apres je de te dis.
Vous n’avez pas trouvé la réponse que vous recherchez ?
printf("\n");
printf(" | A B C D E \n");
printf("_______________________\n");
for (i=0;i<5;i++)
{
printf("\n");
printf("%d |",g);
g++;
for(j=0;j<5;j++)
{
printf(" %c |",tab[i][j] );
}
}
g=0;
printf("\n");
printf("\n\nquel colonne?\n");
scanf("%d",&col);
printf("quel ligne?\n");
scanf("%d",&ligne);
//stock la ligne voulue
i=ligne;
//stock la colonne voulue
j=col;
}while(choix<2);
for (i=0;i<5;i++)
{
printf("\n");
printf("%d |",g);
g++;
for(j=0;j<5;j++)
{
// Si le caractère diffère de 'O', on affiche
if(serp[i][j] != 'O' && tab[i][j]=='O')
{
printf(" %c |",serp[i][j]);}
else
printf(" O |");
}
}
g=0;
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 18 févr. 2008 à 04:03
Normale.
De 1, j'ignore complètement à quoi sert ton tableau tab.
De 2, toute les cases de tab contienne 'O'
Donc cette partie (en gras)
if(serp[i][j] != 'O' && tab[i][j]=='O' )
sera toujours vrai.
Ensuite:
if(serp[i][j] ! = 'O' && tab[i][j]=='O')
{
printf(" %c |",serp[i][j]);}
else
printf(" O |");
}
C'est inutile ce code. Si serp[i][j] égal O, on affiche O.... ça ne mène nul part.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 18 févr. 2008 à 13:53
Bonjour,
1) A quoi servent les saisies de ligne et de colonne ? Les résultats "col" et "ligne" sont stockés dans les variables "i" et "j" qui servent d'indices dans les boucles "for" de la boucle "do" qui recommence au début après ces saisies ! "i" et "j" repartent à zéro et finalement "col" et "ligne" ne servent à rien.
lil_adriano
Messages postés42Date d'inscriptionvendredi 26 janvier 2007StatutMembreDernière intervention16 juin 2008 18 févr. 2008 à 14:20
bonjour jfrancois
-la saisie de ligne et colonne permet de place un point dans le tableau a l'aide des indices .
-choix c'est inutile j'ai oublier de le retirer, mais en faite c'est utile pour la creation de mon jeu.mais j'ai donner seulement la partie du code source dont j'ai besion
- mon jeu c'est un peu comme le demineur il faut trouver des points genere aleatoirement
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 18 févr. 2008 à 14:38
Ok ! mais la saisie de "ligne" et "col" ne sert à rien dans ce code ! ces 2 variables sont transférées dans "i" et "j" qui servent dans la double boucle d'affichage.
do
{
printf("\n");
printf(" | A B C D E \n");
printf("_______________________\n");
for (i=0;i<5;i++)
{
printf("\n");
printf("%d |",g);
g++;
for(j=0;j<5;j++) printf(" %c |",tab[i][j]);
}
g=0; <-- à mettre avant la boucle for (i)
printf("\n");
printf("\n\nquelle colonne ? ");
scanf("%d",&col);
printf("quelle ligne ? ");
scanf("%d",&ligne);
//stock la ligne voulue
i=ligne; // var "i" qui est écrasée à l'itération suivante de la boucle "do"
//stock la colonne voulue
j=col; // var "j" qui est écrasée à l'itération suivante de la boucle "do"
} while (choix < 2);