Voilà, j'ai un projet à réaliser pour l'école. Je dois faire puissance 4 en utilisant des modules, procédures/fonctions.
J'ai d'abord réalisé mon programme sur une seule page et il fonctionne correctement cependant je trouve ça trop illisible. C'est pourquoi j'ai décidé de le faire par modules séparés (xxx.h). Et maintenant, lorsque je lance le jeu, après avoir gagné il reset automatiquement la grille et continue le jeu. J'aimerais juste qu'il quitte le jeu.
Voici les codes:
(Je n'ai pas poster les .h car ce sont juste les prototypes)
JEU.C
- Code: Tout sélectionner
/*Librairies standards*/
#include<stdio.h>
#include<stdlib.h>
/* Module spécifique au fonctionnement de la procédure*/
#include"jeu.h"
/* Debut du programme jeu */
void jeu()
{
/*Declaration des variables */
int lignes,colonnes,choix;
int hauteur0,hauteur1,hauteur2,hauteur3,hauteur4,hauteur5,hauteur6,choix1;
int jeu[7][6];
int gagnant1, gagnant2;
/*Initialisation de certaines variables*/
gagnant1=0;
gagnant2=0;
hauteur0=0;hauteur1=0;hauteur2=0;hauteur3=0;hauteur4=0;hauteur5=0;hauteur6=0;
/* ###################################
########## INITIALISATION ############
################################### */
initialisation(jeu); //Initialisation du plateau de jeu
/* ######################################
############ AFFICHAGE PLATEAU ##########
###################################### */
affichagePlateau(jeu); //Affichage du plateau de jeu vide
/*Tant qu'un joueur n'a pas gagne le programme demande de jouer*/
do
{
/* ######################################
################ JOUEUR 1 ###############
###################################### */
/* ######################################
############ RECUP NR COLONNE ###########
###################################### */
choix = nrColonneJ1(jeu, choix, hauteur0, hauteur1, hauteur2, hauteur3, hauteur4, hauteur5, hauteur6, choix1); //Recupere le numéro de la colonne indiqué par le joueur et insert le pion.
/* ######################################
############ VERIFIER NR COLONNE ########
###################################### */
gagnant1 = verifResultatJ1(jeu, gagnant1); //Vérifie les colonnes si le joueur 1 à gagne.
/* ######################################
############ AFFICHAGE PLATEAU ##########
###################################### */
affichagePlateau(jeu); //Affiche le plateau de jeu avec les pions.
/* On incremente la hauteur d'une colonne a chaque fois que celle si est jouee:*/
if(choix==0)
jeu[hauteur0++];
if(choix==1)
jeu[hauteur1++];
if(choix==2)
jeu[hauteur2++];
if(choix==3)
jeu[hauteur3++];
if(choix==4)
jeu[hauteur4++];
if(choix==5)
jeu[hauteur5++];
if(choix==6)
jeu[hauteur6++];
/*Test pour vérifier si le joueur 1 à gagne*/
if(gagnant1 == 1)
{
testfinJ1(gagnant1);
break;
}
/****************************************************************************************************/
/* ######################################
################ JOUEUR 2 ###############
###################################### */
/* ######################################
############ RECUP NR COLONNE ###########
###################################### */
choix1 = nrColonneJ2(jeu, choix, hauteur0, hauteur1, hauteur2, hauteur3, hauteur4, hauteur5, hauteur6, choix1); //Recupere le numéro de la colonne indiqué par le joueur et insert le pion.
/* ######################################
############ VERIFIER NR COLONNE ########
###################################### */
gagnant2 = verifResultatJ2(jeu, gagnant2); //Vérifie les colonnes si le joueur 2 à gagne.
/* ######################################
############ AFFICHAGE PLATEAU ##########
###################################### */
affichagePlateau(jeu); //Affiche le plateau de jeu avec les pions.
/* On incremente la hauteur d'une colonne a chaque fois que celle si est jouee:*/
if(choix1==0)
jeu[hauteur0++];
if(choix1==1)
jeu[hauteur1++];
if(choix1==2)
jeu[hauteur2++];
if(choix1==3)
jeu[hauteur3++];
if(choix1==4)
jeu[hauteur4++];
if(choix1==5)
jeu[hauteur5++];
if(choix1==6)
jeu[hauteur6++];
/*Test pour vérifier si le joueur 2 à gagne*/
if(gagnant2==2)
{
testfinJ2(gagnant2);
break;
}
} while(gagnant1!=1 || gagnant2!=2);
}
INITIALISATION.C
- Code: Tout sélectionner
/* ###################################################################################
################################### INITIALISATION ###################################
################################################################################### */
#include<stdio.h>
void initialisation(int (*jeu)[6])
{
/*Declaration des variables */
int lignes, colonnes;
/* Initialisation du tableau où toutes les cases prennent la valeur 0*/
for(lignes=0;lignes<7;lignes++)
{
for(colonnes=0;colonnes<=6;colonnes++)
{
jeu[lignes][colonnes]=0;
}
}
}
AFFICHAGEPLATEAU.C
- Code: Tout sélectionner
/* ###################################################################################
################################# AFFICHAGE PLATEAU ##################################
################################################################################### */
#include<stdio.h>
void affichagePlateau(int (*jeu)[6])
{
/*Declaration des variables */
int colonnes, lignes;
/*Affichage du plateau de jeu*/
printf("\n");
printf(" 0 1 2 3 4 5 6 \n");
printf("|===|===|===|===|===|===|===|\n");
for(colonnes=5;colonnes>=0;colonnes--)
{
for(lignes=0;lignes<7;lignes++)
{
printf("| %d ",jeu[lignes][colonnes]);
}
printf("|\n");
printf("|===|===|===|===|===|===|===|\n");
}
}
VERIFNUMCOL.C
- Code: Tout sélectionner
/* ###################################################################################
############################# RECUPERER NR DE COLONNE J1 #############################
################################################################################### */
#include<stdio.h>
/*Declaration des variables */
int nrColonneJ1(int (*jeu)[6], int choix, int hauteur0, int hauteur1, int hauteur2, int hauteur3, int hauteur4, int hauteur5, int hauteur6, int choix1)
{
/*Le joueur 1 joue*/
do
{
printf("\nA vous de jouer Joueur 1, donner un numero de colonne (de 0 a 6):\n");
scanf("%d",&choix);
printf("\n");
/*Test sur la hauteur des colonnes, si elle sont remplies ou non*/
if((choix==0 && hauteur0>5)|| (choix==1 && hauteur1>5) || (choix==2 && hauteur2>5) || (choix==3 && hauteur3>5) || (choix==4 && hauteur4>5) || (choix==5 && hauteur5>5) || (choix==6 && hauteur6>5))
{
printf("\a\ala colonne %d est pleine, Joueur 1 donner un numero de colonne autre que %d \n",choix1,choix);
choix = -1;
}
}while(choix<0 || choix>6);
/*Donne la valeur 1 a la case jouee par le joueur 1*/
if(choix==0)
jeu[choix][hauteur0]=1;
if(choix==1)
jeu[choix][hauteur1]=1;
if(choix==2)
jeu[choix][hauteur2]=1;
if(choix==3)
jeu[choix][hauteur3]=1;
if(choix==4)
jeu[choix][hauteur4]=1;
if(choix==5)
jeu[choix][hauteur5]=1;
if(choix==6)
jeu[choix][hauteur6]=1;
return choix;
}
/* ###################################################################################
############################# RECUPERER NR DE COLONNE J2 #############################
################################################################################### */
int nrColonneJ2(int (*jeu)[6], int choix, int hauteur0, int hauteur1, int hauteur2, int hauteur3, int hauteur4, int hauteur5, int hauteur6, int choix1)
{
/*Le joueur 2 joue*/
do
{
printf("\nA vous de jouer Joueur 2, donner un numero de colonne (de 0 a 6):\n");
scanf("%d",&choix1);
printf("\n");
/*Test sur la hauteur des colonnes, si elle sont remplies ou non*/
if((choix1==0 && hauteur0>5)|| (choix1==1 && hauteur1>5) || (choix1==2 && hauteur2>5) || (choix1==3 && hauteur3>5) || (choix1==4 && hauteur4>5) || (choix1==5 && hauteur5>5) || (choix1==6 && hauteur6>5))
{
printf("\a\ala colonne %d est pleine, Joueur 2 donner un numero de colonne autre que %d \n",choix1,choix);
choix1 = -1;
}
}while(choix1<0 || choix1>6);
/*Donne la valeur 2 a la case jouee par le joueur 2*/
if(choix1==0)
jeu[choix1][hauteur0]=2;
if(choix1==1)
jeu[choix1][hauteur1]=2;
if(choix1==2)
jeu[choix1][hauteur2]=2;
if(choix1==3)
jeu[choix1][hauteur3]=2;
if(choix1==4)
jeu[choix1][hauteur4]=2;
if(choix1==5)
jeu[choix1][hauteur5]=2;
if(choix1==6)
jeu[choix1][hauteur6]=2;
return choix1;
}
VERIFRESULTAT.C
- Code: Tout sélectionner
/* ###################################################################################
############################# VerifierResultatJ1 #######################################
################################################################################### */
#include<stdio.h>
int verifResultatJ1(int (*jeu)[6], int gagnant1)
{
/*Declaration des variables */
int lignes, colonnes;
/*Verification horizontale pour savoir si le joueur a gagne:
on balaye toutes les lignes de 0 a 6 en verifiant 4 cases a chaque fois.
Si 4 cases qui se suivent valent 1 alors gagnant1 prend pour valeur 1*/
for(lignes=0;lignes<4;lignes++)
{
for(colonnes=0;colonnes<6;colonnes++)
{
if(jeu[lignes][colonnes]==1 && jeu[lignes+1][colonnes]==1 && jeu[lignes+2][colonnes]==1 && jeu[lignes+3][colonnes]==1)
gagnant1=1;
}
}
/*Meme chose mais verticalement maintenant*/
for(lignes=0;lignes<7;lignes++)
{
for(colonnes=0;colonnes<3;colonnes++)
{
if(jeu[lignes][colonnes]==1 && jeu[lignes][colonnes+1]==1 && jeu[lignes][colonnes+2]==1 && jeu[lignes][colonnes+3]==1)
gagnant1=1;
}
}
/*En diagonale bas gauche vers haut droit*/
for(lignes=0;lignes<7;lignes++)
{
for(colonnes=0;colonnes<6;colonnes++)
{
if(jeu[lignes][colonnes]==1 && jeu[lignes+1][colonnes+1]==1 && jeu[lignes+2][colonnes+2]==1 && jeu[lignes+3][colonnes+3]==1)
gagnant1=1;
}
}
/*Meme chose pour les diagonales bas droite vers haut gauche*/
for(colonnes=0;colonnes<6;colonnes++)
{
for(lignes=6;lignes>=0;lignes--)
{
if(jeu[lignes][colonnes]==1 && jeu[lignes-1][colonnes+1]==1 && jeu[lignes-2][colonnes+2]==1 && jeu[lignes-3][colonnes+3]==1)
gagnant1=1;
}
}
return gagnant1;
}
/* ###################################################################################
############################# VerifierResultatJ2 #######################################
################################################################################### */
int verifResultatJ2(int (*jeu)[6], int gagnant2)
{
int lignes, colonnes;
/*Verification horizontale pour savoir si le joueur a gagne:
on balaye toutes les lignes de 0 a 6 en verifiant 4 cases a chaque fois.
Si 4 cases qui se suivent valent 2 alors gagnant2 prend pour valeur 2*/
for(lignes=0;lignes<4;lignes++)
{
for(colonnes=0;colonnes<6;colonnes++)
{
if(jeu[lignes][colonnes]==2 && jeu[lignes+1][colonnes]==2 && jeu[lignes+2][colonnes]==2 && jeu[lignes+3][colonnes]==2)
gagnant2=2;
}
}
/*Meme chose mais verticalement maintenant*/
for(lignes=0;lignes<7;lignes++)
{
for(colonnes=0;colonnes<3;colonnes++)
{
if(jeu[lignes][colonnes]==2 && jeu[lignes][colonnes+1]==2 && jeu[lignes][colonnes+2]==2 && jeu[lignes][colonnes+3]==2)
gagnant2=2;
}
}
/*En diagonale bas gauche vers haut droit*/
for(lignes=0;lignes<7;lignes++)
{
for(colonnes=0;colonnes<6;colonnes++)
{
if(jeu[lignes][colonnes]==2 && jeu[lignes+1][colonnes+1]==2 && jeu[lignes+2][colonnes+2]==2 && jeu[lignes+3][colonnes+3]==2)
gagnant2=2;
}
}
/*Meme chose pour les diagonales bas droite vers haut gauche*/
for(colonnes=0;colonnes<6;colonnes++)
{
for(lignes=6;lignes>=0;lignes--)
{
if(jeu[lignes][colonnes]==2 && jeu[lignes-1][colonnes+1]==2 && jeu[lignes-2][colonnes+2]==2 && jeu[lignes-3][colonnes+3]==2)
gagnant2=2;
}
}
return gagnant2;
}
TESTFIN.C
- Code: Tout sélectionner
/* ###################################################################################
#################################### TestfinJ1 #######################################
################################################################################### */
#include<stdio.h>
void testfinJ1(int gagnant1)
{
/*Test pour savoir si le joueur 1 a gagne et si c'est le cas alors arret de la boucle (do while dans jeu)*/
if(gagnant1==1)
{
printf("Joueur 1 a gagne!!!\n");
printf("\n\t\t############ BRAVO JOUEUR 1!!! ############\n");
}
}
/* ###################################################################################
#################################### TestfinJ2 #######################################
################################################################################### */
void testfinJ2(int gagnant2)
{
/*Test pour savoir si le joueur 2 a gagne et si c'est le cas alors arret de la boucle (do while dans jeu)*/
if(gagnant2==2)
{
printf("Joueur 2 a gagne!!!\n");
printf("\n\t\t############ BRAVO JOUEUR 2!!! ############\n");
}
}
Screenshot du souci
http://img809.imageshack.us/img809/277/screenbugh.jpg
Je vous remercie d'avance pour le temps que vous me consacrerez
Brandon
Ps: je ne cache pas avoir copier/coller directement de mon code (il est indenté normalement)
La partie Main.c n'est pas inclue car je doute que le souci vient de la.