Un Puissance 4 en console

Un Puissance 4 en console

Voir version :

Pas de dépendances

Télécharger :

#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define LARGEUR 7
#define HAUTEUR 6

void LocateColor(int x,int y,int indexpalette)
{ // 0 = gris ; 1 = rouge ; 2 = jaune ; 3 = vert
    WORD palette[4] = {FOREGROUND_INTENSITY,FOREGROUND_RED,FOREGROUND_RED|FOREGROUND_GREEN,FOREGROUND_GREEN};
    COORD C;
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
    C.X=(SHORT)x;
    C.Y=(SHORT)y;
    SetConsoleCursorPosition(H,C);
    SetConsoleTextAttribute(H,palette[indexpalette]);
}

typedef struct Jeu
{
    int tab[LARGEUR][HAUTEUR];
    int altitude[LARGEUR];
    int joueur_courant;
    int gagnant;
    int coups;
} Jeu;


void RenderCase(Jeu* J,int i,int j)
{
    const char* type = ".ox";
    LocateColor(i,HAUTEUR-j-1,J->joueur_courant);
    printf("%c",type[J->tab[i][j]]);
}

void InitJeu(Jeu* J)
{
    int i,j;
    J->gagnant = 0;
    J->joueur_courant = 0;
    J->coups = 0;
    for(i=0;i<LARGEUR;i++)
    {
        for(j=0;j<HAUTEUR;j++)
        {
            J->tab[i][j] = 0;
            RenderCase(J,i,j);
        }
        J->altitude[i] = 0;
    }
    J->joueur_courant = 1;
    LocateColor(0,HAUTEUR,3);
    for(i=0;i<LARGEUR;i++)
        printf("%c",'a'+i);
}

int Input(Jeu* J)
{
    int ret = 0;
    LocateColor(0,HAUTEUR+4,J->joueur_courant);
    printf("Tour Joueur %d\n",J->joueur_courant);
    do 
    {
        int touche = getch();
        ret = touche-'a';
    } while (ret<0 || ret>=LARGEUR || J->altitude[ret]>=HAUTEUR);
    return ret;
}

int ControleRecurs(Jeu* J,int x,int y,int vx,int vy)
{
    if (x<0 || y<0 || x>=LARGEUR || y>=HAUTEUR)
        return 0;
    if (J->tab[x][y] == J->joueur_courant)
        return 1+ControleRecurs(J,x+vx,y+vy,vx,vy);
    return 0;
}

void JouePion(Jeu* J,int x,int y)
{
    int vdir[4][2] = {{1,0},{0,1},{1,1},{1,-1}};
    int i;
    J->tab[x][y] = J->joueur_courant;
    RenderCase(J,x,y);
    for(i=0;i<4;i++) // controle 4 directions : horizontal, vertical, slash, backslash
    {
        int nbaligne = 1; // courant
        nbaligne+= ControleRecurs(J,x+vdir[i][0],y+vdir[i][1],vdir[i][0],vdir[i][1]);
        nbaligne+= ControleRecurs(J,x-vdir[i][0],y-vdir[i][1],-vdir[i][0],-vdir[i][1]);
        if (nbaligne>=4)
            J->gagnant = J->joueur_courant;
    }
}

int main()
{
    Jeu J;
    InitJeu(&J);
    while(J.gagnant == 0 && J.coups<LARGEUR*HAUTEUR)
    {
        int choixcolonne = Input(&J);
        JouePion(&J,choixcolonne,J.altitude[choixcolonne]++);
        J.coups++;
        J.joueur_courant = (J.joueur_courant == 1)?(2):(1);
    }
    LocateColor(0,HAUTEUR+4,3);
    if (J.gagnant == -1)
        printf("Egalite...\n");
    else
        printf("Joueur %d gagne ! \n",J.gagnant);
    return 0;
}




Commentaires

	Voici un petit puissance 4 en console.

	Utilisez les lettres (en minuscule) pour jouer.

	Je ferai les explications plus tard, contactez moi si vous en avez besoin.