Falco171 | Moi aussi je dois préparer un puissance 4, je me suis pas mal cassé la tête pour trouver la logique de vérification des lignes, colonnes, diagonales...
Mais en voyant la version de C4H8O3 dont je me suis largement inspiré (http://soj.mesdiscussions.net/forum2.php?config=overclex.inc&post=83&cat=14&cache=&sondage=0&owntopic=0&p=1&trash=0&subcat=0) j'ai compris que je devais pas me casser la tête et utiliser un petit tableau...
Car je voulais faire un puissance 4 avec x lignes/colonnes définis par l'utilisateur, il me restait alors à créer une fonction permettant de vérifier à chaque coup et peut importe la taille du tableau, si un joueur avait gagné ou pas...
Mais comme je le disais, c'est bien plus dur ça vu qu'il ne faut pas vérifier 3 cases avant ou 3 cases après celle que l'on vient de jouer uniquement mais aussi 2 avant, 1 après, etc. etc.
Enfin pour pouvoir faire mon puissance 4 bien complet, je voulais d'abord commencer par épurer la version de C4H8O3 et ensuite l'améliorer, là je viens de finir de l'épurer mais maintenant à la compilation par d'erreur mais à l'exécution ça plante dés le début, il m'est donc impossible de trouver facilement l'erreur...
Dans les principaux changements par rapports à C4H8O3, j'ai renommé quelques trucs pour que ce soit plus simple pour moi, supprimé 2~3 fonctions qui n'étaient jamais utilisées , pour la fonction afficher il utilisait un entier n à la place de tailletab, je l'ai retiré et mis tailletab, plus quelques autres petites modifes je pense...
Voilà tout est dit, si on pouvait m'aider à trouver l'erreur
Correction : - define en majuscule - do while en while quand cest possible vu quil y a un if qui vérifie avant, merci pour "l'astuce"
- define après include - void main() en int main (void) + return 0;
- matrice_debut en matrice_init
- tourjoueur = tourjoueur++; en tourjoueur++;
- col = col--; en col--;
- lots of corrections lol
Code :
- /** Puissance 4 **/
- /** Le but du jeu est d'aligner 4 pions que ce soit de façon vertical, horizontal ou en diagonale **/
- /** Labo xx **/
- /** xxxxxxxxxxx **/
- /* Biblios */
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- /* Constante */
- #define TAILLETABL 6 // define lignes
- #define TAILLETABC 7 // define colonnes
- /* Modules */
- void afficher(int vecteur_puissance[][TAILLETABC]);
- int matrice_fin(int vecteur_puissance[][TAILLETABC]);
- void place_pion(int vecteur_puissance[][TAILLETABC], int coupjoueur, int col);
- int coupgagne(int vecteur_puissance[][TAILLETABC], int coupjoueur);
- /* Mod main */
- int main (void)
- {
- /* Variables */
- int puissance_4[TAILLETABL][TAILLETABC];
- int coupjoueur,col,colb;
- int tourjoueur=0;
- char restart;
- /* Mise en place de la matrice */
- int n,m;
- for (n=0;n<TAILLETABL;n++) // Ligne
- {
- for (m=0;m<TAILLETABC;m++) // Colonne
- {
- puissance_4[n][m]=0; // =0
- }
- }
- /* Présenation du jeu */
- puts("\n\n#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#\n\n" );
- puts("Bienvenue dans le jeu Puissance 4 !\nCe jeu se joue a deux, le joueur 1 etant represente par les pions 1, de meme pour le joueur 2." );
- puts("\nLes joueurs jouent de facon alternee, le gagnant est celui qui reussi en premier a aligner quatres de ses pions de facon horizontal, vertical ou en diagonal." );
- puts("\n\n#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#" );
- getch();
- system("cls" );
- /* Fin de la présentation */
- /* Jeu -> do while -> jusque plein */
- do
- {
- if(tourjoueur%2==0)coupjoueur=1; // Joueur 1
- if(tourjoueur%2==1)coupjoueur=2; // Joueur 2
- tourjoueur++; // Alterne les joueurs
- printf("\n\n\nC\'est au %d joueur de placer son pion.\n", coupjoueur); // Qui joue ?
- afficher(puissance_4); // Porpose la matrice
- /* Choix colonne + confirmation */
- do
- {
- fflush(stdin);
- printf("\nChoisissez dans quelle colonne vous desirez mettre votre pion (de 1 a %d) : ", TAILLETABC); // Choix de la colonne
- scanf("%d",&col); // Enregistrement du choix
- fflush(stdin);
- printf("\n\nVotre choix est %d pour le confirmer appuyez sur Enter ou appuyez sur R pour recommencer ", col); // Confirmation
- scanf("%c",&restart); // Enregistrement de la confirmation
- col--; // Adaptation tab pc
- } while (col<0||col>TAILLETABC-1||restart=='r'||restart=='R'); // Colonne existe? + Confirmation
- /* Fib choix */
- /* Colonne pleine - vérification */
- if (puissance_4[0][col]!=0) // Colonne pleine ?
- {
- colb=col;
- while (col<0||col>TAILLETABC-1||puissance_4[0][col]!=0||restart=='r'||restart=='R') // Colonne existe? + Colonne tjs pleine? + Confirmation
- {
- if (restart=='r'||restart=='R')col=colb; // Si recommence on prend la valeur de la colonne donnée précédemment et non la dernière enregistrée
- if (col<0||col>TAILLETABC-1)
- {
- col++; // Adaptation tab pc
- fflush(stdin);
- printf("\nLa colonne choise : %d n\'existe pas, veuillez en choisir une autre : ",col); // N'existe pas
- scanf("%d",&col); // Enregistrement du choix
- col--; // Adaptation tab pc
- }
- if (puissance_4[0][col]!=0)
- {
- col++; // Adaptation tab pc
- fflush(stdin);
- printf("\nLa colonne choise : %d est pleine, veuillez en choisir une autre.",col); // Pleine
- printf("\n\nChoix de la colonne : " ); // Choix de la colonne
- scanf("%d",&col); // Enregistrement du choix
- col--; // Adaptation tab pc
- }
- col++; // Adaptation tab pc
- fflush(stdin);
- printf("\n\nVotre choix est %d pour le confirmer appuyez sur Enter ou appuyez sur R pour recommencer\n", col); // Confirmation
- scanf("%c",&restart);
- col--; // Adaptation tab pc
- }
- }
- /* Fin vérif colonne */
- /* Place le pion */
- place_pion(puissance_4,coupjoueur,col);
- } while (coupgagne(puissance_4,coupjoueur)==0); // Boucle du jeu
- //matrice_fin(puissance_4)!=TAILLETAB*TAILLETAB ||
- /* Partie finie */
- system("cls" ); // Vide écran
- printf("Partie terminee ! Le vainqueur est le %d joueur.", coupjoueur); // Phrase pour vainqueur
- puts("\nOu alors personne n\'a fait de puissance 4 ;)" ); // Phrase pour personne
- afficher(puissance_4); // Afficher la matrice
- getch();
- /* Aurevoir ;) */
- return 0;
- }
- /* Fin mod main */
- /* Mod afficher */
- void afficher(int vecteur_puissance[][TAILLETABC])
- {
- int i,j,k;
- printf("\n " );
- for (k=0;k<TAILLETABC;k++) // Légende colonnes
- {
- k++;// Adaptation tab pc
- printf("C.%d ",k);
- k--;// Adaptation tab pc
- }
- printf("\n" );
- for (i=0;i<TAILLETABL;i++) // Ligne
- {
- i++; // Adaptation tab pc
- printf("\nL.%d ",i);// Légende lignes
- i--; // Adaptation tab pc
- for (j=0;j<TAILLETABC;j++)// Colonne
- {
- printf("%d ", vecteur_puissance[i][j]); // Affiche la valeur de la cellule
- }
- printf("\n" );
- }
- }
- /* Fin mod afficher */
- /* Mod coupgagne */
- int coupgagne(int vecteur_puissance[][TAILLETABC], int coupjoueur)
- {
- int i,j;
- for (i=TAILLETABL-1;i>(-1);i--) // Test les lignes
- {
- for (j=0;j<TAILLETABC-3;j++)
- {
- if(vecteur_puissance[i][j] == vecteur_puissance[i][j+1] && vecteur_puissance[i][j+1] == vecteur_puissance[i][j+2] && vecteur_puissance[i][j+2] == vecteur_puissance[i][j+3] && vecteur_puissance[i][j+3] == coupjoueur)
- {
- vecteur_puissance[i][j]=4;
- vecteur_puissance[i][j+1]=4;
- vecteur_puissance[i][j+2]=4;
- vecteur_puissance[i][j+3]=4;
- return coupjoueur; // Retourne gagne
- }
- }
- } // Fin test lignes
- for (j=0;j<TAILLETABC;j++) // Test les colonnes
- {
- for (i=TAILLETABL-1;i>2;i--)
- {
- if(vecteur_puissance[i][j] == vecteur_puissance[i-1][j] && vecteur_puissance[i-1][j] == vecteur_puissance[i-2][j] && vecteur_puissance[i-2][j] == vecteur_puissance[i-3][j] && vecteur_puissance[i-3][j] == coupjoueur)
- {
- vecteur_puissance[i][j]=4;
- vecteur_puissance[i-1][j]=4;
- vecteur_puissance[i-2][j]=4;
- vecteur_puissance[i-3][j]=4;
- return coupjoueur; // Retourne gagne
- }
- }
- } // Fin test colonnes
- for (i=TAILLETABL-1;i>2;i--) // Test les diagonales A
- {
- for (j=0;j<TAILLETABC-3;j++)
- {
- if(vecteur_puissance[i][j] == vecteur_puissance[i-1][j+1] && vecteur_puissance[i-1][j+1] == vecteur_puissance[i-2][j+2] && vecteur_puissance[i-2][j+2] == vecteur_puissance[i-3][j+3] && vecteur_puissance[i-3][j+3] == coupjoueur)
- {
- vecteur_puissance[i][j]=4;
- vecteur_puissance[i-1][j+1]=4;
- vecteur_puissance[i-2][j+2]=4;
- vecteur_puissance[i-3][j+3]=4;
- return coupjoueur; // Retourne gagne
- }
- }
- } // Fin test diagonales A
- for (i=TAILLETABL-1;i>2;i--) // Test les diagonales B
- {
- for (j=TAILLETABC-1;j>2;j--)
- {
- if(vecteur_puissance[i][j] == vecteur_puissance[i-1][j-1] && vecteur_puissance[i-1][j-1] == vecteur_puissance[i-2][j-2] && vecteur_puissance[i-2][j-2] == vecteur_puissance[i-3][j-3] && vecteur_puissance[i-3][j-3] == coupjoueur)
- {
- vecteur_puissance[i][j]=4;
- vecteur_puissance[i-1][j-1]=4;
- vecteur_puissance[i-2][j-2]=4;
- vecteur_puissance[i-3][j-3]=4;
- return coupjoueur; // Retourne gagne
- }
- }
- } // Fin test diagonales B
- return 0; // Retourne pas gagnant
- }
- /* Fin mod coupgagne */
- /* Mod place_pion */
- void place_pion(int vecteur_puissance[][TAILLETABC],int coupjoueur, int col)
- {
- int ligne_temp,n;
- ligne_temp = TAILLETABL-1; // Aller le plus bas possible
- n=0;
- do
- {
- if (vecteur_puissance[ligne_temp][col]==0) // Si rien
- {
- vecteur_puissance[ligne_temp][col]=coupjoueur; // Alors mettre
- n=1;
- } else ligne_temp = ligne_temp-1; // Si quelque chose
- } while (n==0); // Recommencer tant que rien
- }
- /* Fin mod place_pion */
- /* Mod matrice_fin */
- int matrice_fin(int vecteur_puissance[][TAILLETABC])
- {
- int total=0; // Compte total de cellules pleines
- int i,j;
- for (i=TAILLETABL-1;i>(-1);i--) // Lignes
- {
- for (j=0;j<TAILLETABC;j++) // Colonnes
- {
- if (vecteur_puissance[i][j]!=0) total=total+1; // Compteur de cellules pleines
- }
- }
- return total; // Retourne total de cellules pleines
- }
- /* Fin mod matrice_fin */
|
Message édité par Falco171 le 16-02-2005 à 18:13:53
|