Code :
- // Puissance 4 V3
- // 7 colonnes et 7 lignes
- /* Le but de ce jeu est d'aligner 4 pions !, verticalement, horizontalement, ou en diagonale
- */
- // Déclaration des contanstes !
- #define taille 7
- // Déclaration des bibliotheques
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <alloc.h>
- // Declaration des prototypes
- void affiche(int vecteur_puissance[][taille], int n);
- void matrice_zero(int vecteur_puissance[][taille]);
- int coup_permis (int i, int j, int vecteur_puissance[][taille]);
- int joueur_gagnant(int vecteur_puissance[][taille]) ;
- int coup_gagnant (int vp[][taille], int coup_joueur);
- void place_pion (int vp[][taille],int coup_joueur, int col) ;
- int matrice_fin(int vp[][taille]);
- void main (void)
- { // Debut de main
- // Declaration des variables locales
- int puissance_4[taille][taille];
- int coup_joueur, col;
- int tour_joueur=0;
- // **************************************************
- matrice_zero(puissance_4); // Initialisation à zéro
- /*
- Il y aura 49 coups possibles, on va faire alterner, les valeurs 1 et 2
- ceux qui permettra aux joueurs de jouer chacun leur tour
-
- On va boucler 49 fois grace a une boucle Do {..} while(condition).
- */
- do // Boucle Principale
-
- { clrscr(); // Efface l'écran
- // On joue ^^
- if(tour_joueur%2==0)coup_joueur=1; // Tour du joueur 1 ?
- if(tour_joueur%2==1)coup_joueur=2; // Tour du joueur 2 ?
- tour_joueur = tour_joueur +1; // Alterne les joueurs
- // Debut du jeu
- printf("Joueur %d\n", coup_joueur);
- affiche(puissance_4,taille);
- printf("\nChoisissez une colonne entre 0 et 6\n" );
- scanf("%d",&col);
- /* Test 1
- On verifie que le joueur a donné un bon numéro de colonne
- Si le joueur fait un mauvais choix, on lui redemande un numéro
- tant que le numéro (col) ne reste pas la condition 0<=col<=6
- */
- if (col < 0 || col > 6 )
- {
- while (col < 0 || col > 6)
- {
- printf("Erreur Choix de colonne entre 0 et 6 seulement : " );
- scanf("%d",&col);
- }
- } // Fin de Test 1
- /* Test 2
- On verifie que la colonne choisie par le joueur n'est pas pleine
- Si la colonne est pleine, on demande au joueur de choisir une
- colonne non pleine. Tant que le joueur choisi une colonne pleine
- cette question lui est posé !.
- */
- if (puissance_4[0][col] !=0)
- { while (puissance_4[0][col] !=0)
- {
- printf ("Erreur la colonne %d est pleine\n",col);
- printf ("Choisissez une autre colonne : " );
- scanf("%d",&col);
- }
- } // Fin de Test 2
- /*
- Une fois les deux tests (1 et 2) passés on place le pion.
- */
- place_pion (puissance_4,coup_joueur,col);
- /* Test 3
-
- A chaque pion posé, on verifie si ce n'est pas un coup gagant
- Si c'est le cas, on affiche le coup gagant par quatre 4 et
- le numéro du joueur qui a gagné et on quitte le P4
- */
- if (coup_gagnant (puissance_4, coup_joueur)!=0)
- { clrscr() ;
- printf ("VainqueUr : Joueur %d", coup_joueur);
- affiche(puissance_4,taille);
- break; // Casse la boucle principale Do
- }
- } while (matrice_fin(puissance_4) !=taille*taille);
- // Si il n'y a pas de puissance 4 fait au bout des 49 coups
- // On l'affiche
- if (matrice_fin(puissance_4)==taille*taille)
- { printf("Pas de Puissance 4 fait ^^" ); }
- } // Fin de main
- //******************************************************************************
- //******************************************************************************
- //******************************************************************************
-
- /* Liste des prototypes */
-
- // Prototype : Iniatilisation de la matrice du puissance 4
- void matrice_zero(int vecteur_puissance[][taille])
- {
- int i,j;
- for (i=0;i<taille;i++)
- { for (j=0;j<taille;j++)
- {
- (vecteur_puissance[i][j]=0);
- } }
-
- } // Fin du PIDLMDP4
-
- //******************************************************************************
- //******************************************************************************
-
-
- // Prototype : Affiche la matrice du puissance 4
- void affiche(int vecteur_puissance[][taille], int n)
- {
-
-
- int i,j ;
-
- printf("\n 0 1 2 3 4 5 6\n" );
- for (i=0;i<n;i++)
- { printf("\n%d",i);
- for (j=0;j<n;j++)
- {
- printf("%2d ",vecteur_puissance[i][j]);
- }
- }
- } // Fin du prototype : Affiche la matrice du puissance 4
-
- //******************************************************************************
- //******************************************************************************
-
- // Prototype : Test si le coup est permis
- int coup_permis (int i, int j, int vecteur_puissance[][taille])
-
- {
-
- if ( vecteur_puissance[i][j] == 0 ) return 0 ;
- else return 1 ;
-
-
-
- } // FIN PTSLCEP
-
- //******************************************************************************
- //******************************************************************************
-
- // Prototype : Coup gagnant.
-
- int coup_gagnant (int vp[][taille], int coup_joueur )
- {
- int i,j;
-
- /*
- On test les lignes pour savoir si il y a un "puissance 4"
- Si c'est le cas, la fonction retourne la valeur 1
- et Mets la valeur 4 aux cases concernés
- */
- for (i=taille-1;i>0;i--)
- {
- for (j=0;j<taille-3;j++)
- {
- if(vp[i][j]== vp[i][j+1] && vp[i][j+1]== vp[i][j+2] && vp[i][j+2] == vp[i][j+3] && vp[i][j+3] == coup_joueur )
- { vp[i][j] = 4 ;
- vp[i][j+1] = 4 ;
- vp[i][j+2] = 4 ;
- vp[i][j+3] = 4 ;
- return coup_joueur ;
- } // fin si
- }
- }
- /*
- On test toute les colonnes pour savoir si il y a un "puissance 4"
- Si c'est le cas, la fonction retourne la valeur 1
- et Mets la valeur 4 aux cases concernés
- */
- for (j=0;j<taille;j++)
- {
- for (i=taille-1;i>0;i--)
- {
- if(vp[i][j] == vp[i-1][j]&& vp[i-1][j] == vp[i-2][j] && vp[i-2][j]== vp[i-3][j] && vp[i-3][j] == coup_joueur )
- {
- vp[i][j] = 4;
- vp[i-1][j] = 4;
- vp[i-2][j] = 4;
- vp[i-3][j] = 4;
- return coup_joueur; } //fin si
-
- }
- }
- /*
- On va verifier maintenant la diagonale orientée "Nord - Est"
- */
- for (i=taille-1; i>=taille-4;i--)
- { for (j=0; j < taille-3;j++)
- {
- if (vp[i][j] == vp[i-1][j+1] && vp[i-1][j+1] == vp[i-2][j+2] && vp[i-2][j+2] == vp[i-3][j+3] && vp[i-3][j+3]== coup_joueur)
- { vp[i][j] = 4;
- vp[i-1][j+1] = 4;
- vp[i-2][j+2] = 4;
- vp[i-3][j+3] = 4;
- return coup_joueur;}
- }}
- /*
- On va verifier maintenant la diagonale orientée "Sud - Est"
- */
- for (i=taille-1; i>=taille-4;i--)
- { for (j=taille-1; j >= taille-4;j--)
- {
- if (vp[i][j] == vp[i-1][j-1] && vp[i-1][j-1] == vp[i-2][j-2] && vp[i-2][j-2] == vp[i-3][j-3] && vp[i-3][j-3]== coup_joueur)
- { vp[i][j] = 4;
- vp[i-1][j-1] = 4;
- vp[i-2][j-2] = 4;
- vp[i-3][j-3] = 4;
- return coup_joueur;}
- }}
- return 0;
- } // FIN PCG
- //******************************************************************************
- //******************************************************************************
-
- // Fonction : placer le pion dans la colonne
-
- void place_pion (int vp[][taille],int coup_joueur, int col)
- { int ligne_temp,n;
- ligne_temp = taille-1;
- n=0;
- do
- {
- if (vp[ligne_temp][col]==0)
- {
- vp[ligne_temp][col]=coup_joueur;
- n=1;
- }
-
- else ligne_temp = ligne_temp-1;
- } while (n==0);
- } // fin PLPDLC
-
- //******************************************************************************
- //******************************************************************************
-
- // Fonction : test si la matrice est complete
-
- int matrice_fin(int vp[][taille])
- { int test=0,i,j;
-
-
- for (i=taille-1;i>(-1);i--)
- {
- for (j=0;j<taille;j++)
- {
- if (vp[i][j] !=0) test=test+1;
- }}
-
- return test;
- } // TSLMEC
|