Puissance quatre

Description

Le nouveau puissance Quatre ou l'on ne peut pas gagner en diagonale. Cependant, une manière différente de programmer par rapport à celles que j'ai pu voir.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#define RANGEE_COMPLETE 4
#define TRUE 1
#define FALSE 0
#define LARGEUR 7
#define HAUTEUR 6

void afficherGrille(int grille[HAUTEUR][LARGEUR]);
void modifierGrille(int choixColonne, int hauteurColonne[], int grille[HAUTEUR][LARGEUR], int tour, int *pointeurTour);
int menu();
int definirJoueur(int tour);
int tableauRempli(int hauteurColonne[], int *pointeurTour);
int verifierGagnant( int grille[HAUTEUR][LARGEUR], int choixColonne, int hauteurColonne[]);
void menuPrincipal();
void finJeu(int victoire, int tour);

int main()
{
    int grille[HAUTEUR][LARGEUR] = {0};     //grille[i][j]
    int i;
    int choixColonne = 0;
    int tour = 1;
    int victoire = 0;
    int hauteurColonne[LARGEUR];
    for(i = 0; i!=LARGEUR; i++){
    hauteurColonne[i] = 5;}

        menuPrincipal();
do{
    afficherGrille(grille);
    tour = definirJoueur(tour);
    choixColonne = menu();
    modifierGrille(choixColonne, hauteurColonne, grille, tour, &tour);
    if(hauteurColonne[choixColonne]>=0){
    hauteurColonne[choixColonne]--;
    victoire = verifierGagnant(grille, choixColonne, hauteurColonne);
    }
    else{
    tour++;
    }}
    while(!tableauRempli(hauteurColonne, &tour) && !victoire);

    afficherGrille(grille);
    finJeu(victoire, tour);

    return main();
}

void modifierGrille(int choixColonne, int hauteurColonne[], int grille[HAUTEUR][LARGEUR], int tour, int *pointeurTour)
{
    int i;
    int j;

    for(i = 0; i!=6; i++)
    {
        for(j = 0; j!=10; j++)
        {
            if(choixColonne == j)
            {
                if(hauteurColonne[j] >= 0)           //éviter le débordement de pions sur le haut [0][j]
                {
                if(tour) //boléen 1/0
                {
                grille[hauteurColonne[j]][j] = 2; //Pion ?
                }
                else
                {
                    grille[hauteurColonne[j]][j] = 1; //Pions ?
                }
                }
                else if(!i)            //Pour implémenter une fois à l'intérieur de la boucle.
                    {

  • pointeurTour+=0;//on incrémente la variable associé au pointeur //FACULTATIF *ponteurTour+=1; en fonction des modif code;
} //pour éviter le décalage du nombre de pion en cas de mauvaise saisie }}}} int menu() { int choix; printf("\nDans quelle colonne souhaitez vous placer un pion ? "); scanf("%ld", &choix); if(choix > LARGEUR || choix < 1) { printf("La valeur doit etre comprise entre 1 et 7.\n"); return menu(); } return choix-1; // 1 = 0 & Jmin = 0 } void afficherGrille(int grille[HAUTEUR][LARGEUR]) { int i; int j; for(i = 0; i!=6; i++) { printf(" "); for(j = 0; j!=LARGEUR; j++) { switch(grille[i][j]) { case 2 : printf("%c", 2); break; case 1 : printf("%c", 1); break ; case 3 : printf("%c", 3); break ; case 4 : printf("%c", 4); break ; default : printf("."); break ; } } printf("\n"); } } int definirJoueur(int tour) { return (tour+1)%2; //renvoie 0 ou 1 } int tableauRempli(int hauteurColonne[], int *pointeurTour) { int resultat = 0; int i; const int limite = -1; for(i = 0; i<LARGEUR; i++) { if(hauteurColonne[i] == limite && hauteurColonne[i+1] == limite && hauteurColonne[i+2] == limite && hauteurColonne[i+3] == limite && hauteurColonne[i+4] == limite && hauteurColonne[i+5] == limite && hauteurColonne[i+6] == limite) { resultat = 1; } } printf("\n"); return resultat; } int verifierGagnant( int grille[HAUTEUR][LARGEUR], int choixColonne, int hauteurColonne[]) { typedef struct Valeur Valeur; typedef struct NbrPionsIdentiques NbrPionsIdentiques; struct Valeur { int actuelle; int droite; int gauche; int droite2; int gauche2; int hautGauche; int hautDroite; int basGauche; int basDroite; }; struct NbrPionsIdentiques { int horizontale; int horizontale2; int verticale; }; Valeur position; position.actuelle = grille[hauteurColonne[choixColonne]+1][choixColonne]; position.droite = grille[hauteurColonne[choixColonne]+1][choixColonne+1]; position.gauche = grille[hauteurColonne[choixColonne]+1][choixColonne-1]; position.droite2 = grille[hauteurColonne[choixColonne]+1][choixColonne+2]; position.gauche2 = grille[hauteurColonne[choixColonne]+1][choixColonne-2];/* position.hautGauche = grille[hauteurColonne[choixColonne]+2][choixColonne-1]; position.hautDroite = grille[hauteurColonne[choixColonne]+2][choixColonne+1]; position.basGauche = grille[hauteurColonne[choixColonne]][choixColonne-1]; position.basDroite = grille[hauteurColonne[choixColonne]+2][choixColonne+1];*/ NbrPionsIdentiques pionsIdentiques; pionsIdentiques.horizontale = 1; pionsIdentiques.horizontale2 = 1; pionsIdentiques.verticale = 1; int i, j; int victoire = FALSE; int limite = 0; int limite2 = 0; if(choixColonne+4 > LARGEUR){ limite = 1; } if(choixColonne - 3 < 0){ limite2 = 1; } for(i = 2; i<5; i++){ if(position.actuelle == grille[hauteurColonne[choixColonne]+i][choixColonne]){ pionsIdentiques.verticale+=1; } } for(i = 1; i<4; i++){ if(position.actuelle == grille[hauteurColonne[choixColonne]+1][choixColonne+i]){ if(!limite){ pionsIdentiques.horizontale +=1; } } if(position.actuelle == grille[hauteurColonne[choixColonne]+1][choixColonne-i]){ if(!limite2){ pionsIdentiques.horizontale2 +=1; } } if( position.actuelle == position.droite && position.actuelle == position.droite2 && position.actuelle == position.gauche){ pionsIdentiques.horizontale = RANGEE_COMPLETE ; } if( position.actuelle == position.droite && position.actuelle == position.gauche2 && position.actuelle == position.gauche){ pionsIdentiques.horizontale = RANGEE_COMPLETE ; } } if(pionsIdentiques.horizontale == RANGEE_COMPLETE || pionsIdentiques.verticale == RANGEE_COMPLETE || pionsIdentiques.horizontale2 == RANGEE_COMPLETE ){ victoire = TRUE; } return victoire; } void menuPrincipal() { printf(" PUISSANCE 4\n\n"); printf(" %c Joueur 1\n %c Joueur 2\n", 1, 2); } void finJeu(int victoire, int tour) { if(!victoire){ printf("\n VOUS AVEZ REMPLI LA GRILLE\n\n"); } else{ printf(" Le joueur %ld remporte la partie.\n\n", tour+1); } }

Conclusion :


Compliqué.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_Passio)