cs_puich
Messages postés2Date d'inscriptionvendredi 1 janvier 2010StatutMembreDernière intervention 2 janvier 2010
-
1 janv. 2010 à 15:54
cs_puich
Messages postés2Date d'inscriptionvendredi 1 janvier 2010StatutMembreDernière intervention 2 janvier 2010
-
2 janv. 2010 à 15:30
Bonjour a tous je suis nouveau sur le forum.
Je doit crée un jeux (morpion) en C mais je ne c pas trop comment le faire car je ne suis pas super fort en C !
Pouvez vous m'aidez ?
C'est assez Urgent car je doit rendre le projet début de semaine !!!
Un tout grand MERCI a tous ceux qui pourront m'aider.
Voici ci-dessous ce qu'il mes demandé :
Définition du projet :
Le Tic-Tac-Toe est une variante simplifiée du morpion, qui se joue sur
des damiers 3x3.
Les joueurs doivent placer chacun à leur tour sur le damier le symbole
qui leur est attribué : O ou X. Le gagnant est celui qui arrive à aligner
trois symboles identiques, horizontalement, verticalement ou en
diagonale.
Spécifications de l’interface texte :
Au lancement du programme, affichez les informations reprises ci-dessous ainsi que le menu.
-----------------------------------------
====== MENU ========
(1) : Jouer
(2) : Règles du jeu
(3) : Quitter
=====================
Que voulez-vous faire ?
Le programme ne peut pas « planter » si l’utilisateur saisi une entrée non valide pour le choix du
menu.
Lors du lancement du jeu (menu « Jouer » ) :
· chaque joueur saisi son nom
· le programme affiche le damier 3x3 en numérotant chaque case
· le programme invite le premier joueur (choisi aléatoirement) à placer son symbole en
désignant le numéro de la case.
cs_puich
Messages postés2Date d'inscriptionvendredi 1 janvier 2010StatutMembreDernière intervention 2 janvier 20101 2 janv. 2010 à 15:30
Bonjours , oui je c que vous n'allez pas faire le boulot a ma place...
Je bloque sur cette partie (ces oui il y a =>) :
char Jeu()
{
int i,j,coup = 0;
char Plateau[3][3],*ptPlateau,etat_partie=0,Joueur[2][100],*ptJoueur,nom[100],case_choisie=0;
=> ptPlateau = Init(Plateau); // Initialisation du plateau du jeu
ptJoueur = &Joueur[0];
srand(time(NULL));
coup = 1+rand()%2; // Choix au hasard du premier joueur a placer un pion
Voici l'ensemble du code,pouvez vous me dire si il est correcte ?
merci
/* --------------- Programme principal (bloc main)------------------ */
int main()
{
int menu=0;
char etat_gen=0,recommencer='o';
printf("-----------------------------------------\n");
printf("Programme réalisé par: Hannard Gaetan\n");
printf("Section : Infographie Groupe : 2\n");
printf("Année académique : 2009-2010\n");
printf("Nom de l'enseignant : M. Tricarico\n");
printf("Projet : Jeu Tic-tac-toe\n");
printf("-----------------------------------------\n\n");
while (recommencer 79 || recommencer 111) // Boucle de recommecement du programme avec utilisation du code ascii pour le test
{
menu = AfficherMenu(); //Affichage du menu avec memorisation du choix
switch(menu) // Test du choix du menu
{
case 1:
etat_gen = Jeu(); // Lancement du jeu avec récupération de l'état a la fin de la partie
AfficherResultat(etat_gen); // Affichage du résultat en fonction de l'état du jeu
break;
case 2:
Regles(); // Affichage des règles
break;
case 3:
recommencer = 'n'; // Met 'N' dans recommencer pour quitter le programme
break;
default:
printf("Choix erroné"); // Lorsque l'utilisateur essaye un choix non disponible
break;
}
if (recommencer != 110 || recommencer!=78) // Pour eviter de poser la question lorsque l'utilisateur a choisi de quitter le programme juste avant
{
printf("Voulez vous recommencer (o)ui / (n)on ??\n");
scanf("%d",&recommencer);
fflush(stdin); // Vide le cache mémoire
}
}
void Regles()
{
printf("Règles du jeu: 2 joueurs: \n\nChaque joueur a son tour pose un de ses pions sur une case.\n Le premier des deux qui arrive a aligner trois de ses pions horizontalement, verticalement ou en diagonale\n est déclaré vainqueur.\n");
}
if (etat_gen == 'N') // test de l'état du jeu MATCH NUL ou FINI
{
printf("Match NUL !!!!!!!\n");
}
else
{
printf("félicitations vous avez gagné \\o/ *\n");
printf("********************************************\n");
}
}
char Jeu()
{
int i,j,coup = 0;
char Plateau[3][3],*ptPlateau,etat_partie=0,Joueur[2][100],*ptJoueur,nom[100],case_choisie=0;
ptPlateau = Init(Plateau); // Initialisation du plateau du jeu
ptJoueur = &Joueur[0];
srand(time(NULL));
coup = 1+rand()%2; // Choix au hasard du premier joueur a placer un pion
/* Enregistrement du nom des joueur */
printf("Entrer le nom du joueur 1: ");
scanf("%s",nom);
strcpy(Joueur[0],nom);
printf("Entrer le nom du joueur 2: ");
scanf("%s",nom);
strcpy(Joueur[1],nom);
AfficherDamier(Plateau); // Affichage du plateau du jeu
while (etat_partie != 'F' && etat_partie != 'N') // Tant que la partie n'est pas finie ou en match nul on continue a jouer
{
coup++; // Incrémentation du nombre des coup pour retrouver le joueur grace au modulo (%)
do
{
case_choisie = choixJoueur(Joueur,coup); // Appel de la fonction pour choisir la case
}while(case_choisie <=47 && case_choisie >=58); // Tant que la case choisie n'est pas un chiffre compris entre 1 et 9, on redemande et change de joueur
ptPlateau = coupJoueur(Plateau,case_choisie,coup); // Place le O ou le X dans la case voulue par l'utilisateur
etat_partie = analyserJeu(Plateau,coup); // Analyse de l'état du jeu
AfficherDamier(Plateau); // Affiche le plateau
}
if (etat_partie == 'F')
{
printf("********************************************\n");
printf("* CHER %s ",Joueur[coup%2]);
}
void AfficherDamier(char Plateau[3][3])
{
int i,j;
printf("-------------\n");
for (i=0;i<3;i++) // Boucle pour les lignes
{
if (i!=0)
{
printf("| \n");
printf("-------------\n");
}
for (j=0;j<3;j++) // Boucle pour les colonnes
{
printf("| %c ",Plateau[i][j]); // Affichage de la case
}
}
printf("|\n");
printf("-------------\n");
}
char choixJoueur(char Joueur[2][100],int coup)
{
int place_voulue;
char place;
fflush(stdin); // Vide la cache mémoire
if (coup%2==0) // Test pour savoir c'est a quel joueur de jouer ( en fonction du reste de la division du nombre de coup par le nombre de joueur)
{
printf("C'est a vous %s de jouer\n",Joueur[0]);
printf("Entrer le numero de la case ou vous voulez jouer (O): ");
scanf("%d",&place_voulue);
}
else
{
printf("C'est a vous %s de jouer\n",Joueur[1]);
printf("Entrer le numero de la case ou vous voulez jouer (X): ");
scanf("%d",&place_voulue);
}
place = 48+place_voulue; // Transforme l'entier (place_voulue) en son équivalent caractère (place) grace au code ascii
char coupJoueur(char Plateau[3][3],char case_choisie, int coup)
{
char *ptPlateau,place;
int i,j,invalide=0;
ptPlateau = &Plateau[0];
for (i=0;i<3;i++) // Boucle des lignes
{
for (j=0;j<3;j++) // Boucle des colonnes
{
if (Plateau[i][j] == case_choisie) // Regarde si la case du tableau correspond a celle choisie par le joueur
{
ptPlateau = &Plateau[i][j]; // Si oui on place le pointeur sur cette case
if (coup%2 == 0) // On regarde si c'est le joueur (X) ou (O) toujours grace au modulo entre le nombre de coup joués et le nombre de joueurs
{
*ptPlateau = 'O'; // Place le O dans la dite case
}
else
{
*ptPlateau = 'X'; // Place le X dans la dite case
}
}
}
}
return ptPlateau;
}
for (i=0;i<3;i++) // Boucle des lignes
{
for (j=0;j<3;j++) // Boucles des colonnes
{
if (Plateau[i][j] == 'O' || Plateau[i][j] =='X' ) //Regarde les case une par une si elles sont prises par un X ou un O
{
case_utilisee++; // Si oui on augmente le nombre de cases utilisées
if (case_utilisee == 9) // Si le nombre de case utilisée vaut 9
{
etat = 'N'; // c'est peut etre un match nul donc on met 'N' dans etat en attendant de voir si c'est autre chose qu'un match nul
}
}
}
}
if (coup%2 == 0) // Regarde quel joueur a jouer pour savoir si on test les O ou les X
{
if ((Plateau[0][0] == 'O'&& Plateau [1][1] == 'O' && Plateau[2][2] == 'O') || (Plateau[2][0] == 'O'&& Plateau [1][1] == 'O' && Plateau[0][2] == 'O')) // D'abord le test des deux diagonales
{
diago = 3; // Si une des deux diagonales est complete on met 3 dans diagonale car il y a 3 cases
etat = 'F'; // On met 'F' dans etat (F pour fini)
}
for (i=0;i<3;i++) // Boucle des lignes
{
ligne = 0; // Remet ligne a 0
colonne = 0; // remet colonne a 0
for (j=0;j<3;j++) // Boucles des colonnes
{
if(Plateau[i][j] == 'O') // Regarde si la case est un 'O' et on met Plateau [i][j] pour parcourir ligne par ligne donc de gauche a droite
{
ligne++; // Si la condition est remplie on augmente le nombre de ligne de 1
if(ligne == 3) // Si ligne vaut 3 c'est que une ligne est remplie
{
etat = 'F'; // Donc on met F dans etat
}
}
if (Plateau[j][i] == 'O') // Regarde si la case est un 'O' et on met Plateau [j][i] pour parcourir colonne par colonne donc de haut en bas
{
colonne++; // Si la condition est remplie on augmente le nombre de colonne de 1
if(colonne == 3) // Si colonne vaut 3 c'est que une colonne est remplie
{
etat = 'F'; // Donc on met F dans etat
}
}
}
}
}
else // Meme vérification met pour le cas des X cette fois
{
if ((Plateau[0][0] == 'X'&& Plateau [1][1] == 'X' && Plateau[2][2] == 'X') || (Plateau[2][0] == 'X'&& Plateau [1][1] == 'X' && Plateau[0][2] == 'X')) // D'abord le test des deux diagonales
{
diago = 3; // Si une des deux diagonales est complete on met 3 dans diagonale car il y a 3 cases
etat = 'F'; // On met 'F' dans etat (F pour fini)
}
for (i=0;i<3;i++) // Boucle des lignes
{
ligne = 0; // Remet ligne a 0
colonne = 0; // remet colonne a 0
for (j=0;j<3;j++) // Boucles des colonnes
{
if(Plateau[i][j] == 'X') // Regarde si la case est un 'X' et on met Plateau [i][j] pour parcourir ligne par ligne donc de gauche a droite
{
ligne++; // Si la condition est remplie on augmente le nombre de ligne de 1
if(ligne == 3) // Si ligne vaut 3 c'est que une ligne est remplie
{
etat = 'F'; // Donc on met F dans etat
}
}
if (Plateau[j][i] == 'X') // Regarde si la case est un 'X' et on met Plateau [j][i] pour parcourir colonne par colonne donc de haut en bas
{
colonne++; // Si la condition est remplie on augmente le nombre de colonne de 1
if(colonne == 3) // Si colonne vaut 3 c'est que une colonne est remplie
{
etat = 'F'; // Donc on met F dans etat
}
}
}
}
}
return etat; // REnvoi l'etat après la vérification
}