Pas de dépendances
#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; }
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.