Voila, mon problème se situe au niveau du "check vertical" à savoir que mon programme ne comprend pas lorsque un joueur gagne en vertical.
Je n'arrive pas à voir où est le problème, s'il se situe dans ma fonction "checkvertical" ou bien dans le main??
Merci de bien vouloir éclairer ma lanterne...
Le programme:
#include <stdio.h>
#include <stdlib.h>
#define LIGNES 6
#define COLONNES 7
////////////////////////////// AFFICHER //////////////////////////////
void afficherPlateau (char plateauJeu [LIGNES][COLONNES]){
int i, j;
printf("\n=============================\n");
printf("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n");
printf("=============================\n");
for(i=0 ; i<LIGNES ; i++){
printf("-----------------------------\n");
printf("|");
for(j=0 ; j<COLONNES ; j++){
printf(" %c |", plateauJeu [i][j]);
}
printf("\n");
}
printf("-----------------------------\n\n");
}
////////////////////////////// TEST PLATEAU PLEIN //////////////////////////////
int checkplateau ( int plateau [LIGNES][COLONNES]){
int i, j;
for(i=0 ; i<LIGNES ; i++){
for(j=0 ; j<COLONNES ; j++){
if( plateau [i][j] == 0){
return 0;
}
}
}
return 1;
}
////////////////////////////// TEST PLAYER VALIDE //////////////////////////////
int checkplayer (int player){
if(player == 1 || player == 2){
return 1;
}
return 0;
}
////////////////////////////// TEST LIGNES VALIDE //////////////////////////////
int checklineok (joueur){
if(joueur >= 0 && joueur<LIGNES){
return 1;
}
return 0;
}
////////////////////////////// TEST COLONNE VALIDE //////////////////////////////
int checkcolumnok (joueur){
if(joueur >= 0 && joueur<=COLONNES){
return 1;
}
return 0;
}
////////////////////////////// TEST COLONNES PLEINE //////////////////////////////
int testColonne (int plateau [LIGNES][COLONNES], int joueur, int *colonne){
if(checkcolumnok (joueur)){
if(*colonne<COLONNES){
*colonne ++;
return 1;
}
}
return 0;
}
////////////////////////////// REMPLISSAGE JOUEUR 1 //////////////////////////////
void remplissagePlateau (char plateauJeu [LIGNES][COLONNES], int plateau [LIGNES][COLONNES], int joueur, int player){
int i=LIGNES-1;
int n=0;
while(n==0 && i>=0){
if(plateau [i][joueur-1] == 1 || plateau [i][joueur-1] == 2){
i--;
}
else if (plateau [i][joueur-1] == 0){
if(player == 1){
plateauJeu [i][joueur-1] = 'O';
plateau [i][joueur-1] = player;
n++;
}
else if(player == 2){
plateauJeu [i][joueur-1] = 'X';
plateau [i][joueur-1] = 2;
n++;
}
}
}
}
////////////////////////////// CHECK VERTICALES JOUEUR //////////////////////////////
int checkVerticale (int plateau [LIGNES][COLONNES], int player){
int i,j;
for(i=0;i<7;i++)
{
for(j=0;j<3;j++)
{
if(plateau[i][j]==1 && plateau[i][j+1]==1 && plateau[i][j+2]==1 && plateau[i][j+3]==1){
return 1;
}
else {
return 0;
}
}
}
}
////////////////////////////// CHECK HORIZONTALES JOUEUR //////////////////////////////
int checkHorizontale (int plateau [LIGNES][COLONNES], int player){
int i,j;
int compt;
for(i=0 ; i<LIGNES ; i++){
compt = 0;
for(j=0 ; j<COLONNES ; j++){
if(plateau [i][j] == player){
compt ++;
}
else if(compt >= 4){
return 1;
}
else {
compt = 0;
}
}
}
return 0;
}
////////////////////////////// RETOURNE PLAYER DANS LA CASE JOUEE //////////////////////////////
int case_egale_player (int plateau [LIGNES][COLONNES], int player, int joueur){
int i;
if(checklineok (joueur) && checkcolumnok (joueur)){
for(i= LIGNES-1 ; i>=0 ; i--){
if (checkplayer (player)){
if(plateau [i][joueur] == 0){
plateau [i][joueur] = player;
return player;
}
}
}
}
return 0;
}
////////////////////////////// CLEAR SCREEN //////////////////////////////
void ClearScreen()
{
int n;
for (n = 0; n < 10; n++)
printf( "\n\n\n\n\n\n\n\n\n\n" );
}
////////////////////////////// MAIN //////////////////////////////
int main (void) {
char plateauJeu [LIGNES][COLONNES] = {" " , " " , " " , " " , " " , " "};
int plateau [LIGNES][COLONNES] = {{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0}};
int joueur, player = 1;
//char nom1 [20], nom2 [20];
int colonne = 0;
printf("Bienvenue dans le jeu du PUISSANCE 4 !\n\n");
/*printf("(Pour afficher l'aide tapez << ? >> )\n\n");
printf("Joueur 1, choississez votre nom : ");
scanf("%s", &nom1);
printf("Joueur 2, choississez votre nom : ");
scanf("%s", &nom2);*/
afficherPlateau(plateauJeu);
while(checkplateau(plateau) != 1){
printf("Joueur %d , choississez une colonne : ", player);
scanf("%d", &joueur);
if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){
remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);
if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){
printf("Joueur %d gagne!", player);
return 0;
}
}
while(checkcolumnok(joueur) == 0){
printf("Le numero de cette colonne n'est pas valide, veuillez rejouer : ");
scanf("%d", joueur);
if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){
remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);
if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){
printf("Joueur %d gagne!", player);
return 0;
}
}
}
while(testColonne(plateau, joueur, &colonne) == 0){
printf(" Cette colonne est deja pleine, veuillez rejouer : ");
scanf("%d", joueur);
if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){
remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);
if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){
printf("Joueur %d gagne!", player);
return 0;
}
}
}
player ++;
if (checkplayer(player) == 0){
player=1;
}
}
/*while(k<1000){
printf("%s , choississez une colonne : ", nom1);
scanf("%d", &joueur1);
printf("dfasdv : %d\n", testColonne(plateau, joueur1));
if(testColonne(plateau, joueur1) == 0){
remplissagePlateau1 (plateauJeu, plateau, joueur1);
afficherPlateau(plateauJeu);
if(checkHorizontale1(plateau)==1 || checkVerticale1(plateau)==1){
printf("%s gagne!\n", nom1);
return 0;
}
}
else if(testColonne(plateau, joueur1) == 1){
if(checkHorizontale1(plateau)==1 || checkVerticale1(plateau)==1){
printf("%s gagne!\n", nom1);
return 0;
}
else{
printf("Cette colonne est deja pleine. Veuillez re-jouer : \n");
printf("%s , choississez une colonne : ", nom1);
scanf("%d", &joueur1);
remplissagePlateau1 (plateauJeu, plateau, joueur1);
afficherPlateau(plateauJeu);
}
}
printf("%s , choississez une colonne : ", nom2);
scanf("%d", &joueur2);
printf("dfasdv : %d\n", testColonne(plateau, joueur2));
if(testColonne(plateau, joueur2) == 0){
remplissagePlateau2 (plateauJeu, plateau, joueur2);
afficherPlateau(plateauJeu);
checkHorizontale2(plateau);
checkVerticale2(plateau);
if(checkHorizontale2(plateau)==1 || checkVerticale2(plateau)==1){
printf("%s gagne!\n", nom2);
return 0;
}
}
else if(testColonne(plateau, joueur2) == 1){
if(checkHorizontale2(plateau)==1 || checkVerticale1(plateau)==1){
printf("%s gagne!\n", nom2);
return 0;
}
else{
printf("Cette colonne est deja pleine. Veuillez re-jouer : \n");
printf("%s , choississez une colonne : ", nom2);
scanf("%d", &joueur2);
remplissagePlateau2 (plateauJeu, plateau, joueur2);
afficherPlateau(plateauJeu);
checkHorizontale2(plateau);
checkVerticale2(plateau);
}
}
k++;*/
return 0;
}