Puissance 4 compilé avec c++builder 5

Contenu du snippet

Petit programme en mode console simulant le jeu Puissance 4.

Source / Exemple :


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

const char NOIR = '\xb0', BLANC = '\xb2';

bool Case_Blanc[4][4];
bool Case_Noir[4][4];

char Afficher(char Couleur);
bool Empiler(int Pile, int Col, char Couleur);
bool Nulle(int Pile1, int Pile2, int Pile3, int Pile4, bool Win);
void Boite();
void initialisation();

void main(void)
{
  char Jeton_Blanc, Jeton_Noir;
  int Pile1, Pile2, Pile3, Pile4, Reponse, Col;
  bool Gagnant, Gagnant_B, Gagnant_N, Pleine;

  const string PHRASE_BLANC = "Au tour des blancs a jouer! ";
  const string PHRASE_NOIR = "Au tour des noirs a jouer! ";
  const string PLEINE = "Cette Colonne est pleine, choisissez en une autre! (Appuyez sur ENTER)";

  do
  {
    initialisation();

    clrscr();

    Pile1=0, Pile2=0, Pile3=0, Pile4=0;
    Gagnant = false, Gagnant_B = false, Gagnant_N = false;

    Boite();

    while(!Gagnant)
    {
      gotoxy(1,1);
      cout << PHRASE_BLANC;

      gotoxy(1,2);
      cout << "Dans quelle colonne voulez-vous laisser tomber le jeton? ( 1 a 4 ): ";

      do
      {
        Pleine = false;
        gotoxy(10,5);
        clreol();
        gotoxy(69,2);
        Jeton_Blanc = getche();

        switch(Jeton_Blanc)
        {
           case '1': if(Pile1 < 4)
                     {
                       Gagnant_B = Empiler(Pile1, 27, BLANC);
                       Pile1++;
                     }
                     else
                     {
                       gotoxy(10,5);
                       cout << PLEINE;
                       Pleine = true;
                       getch();
                     }
                     break;
           case '2': if(Pile2 < 4)
                     {
                       Gagnant_B = Empiler(Pile2, 34, BLANC);
                       Pile2++;
                     }
                     else
                     {
                       gotoxy(10,5);
                       cout << PLEINE;
                       Pleine = true;
                       getch();
                     }
                     break;
           case '3': if(Pile3 < 4)
                     {
                       Gagnant_B = Empiler(Pile3, 41, BLANC);
                       Pile3++;
                     }
                     else
                     {
                       gotoxy(10,5);
                       cout << PLEINE;
                       Pleine = true;
                       getch();
                     }
                     break;
           case '4': if(Pile4 < 4)
                     {
                       Gagnant_B = Empiler(Pile4, 48, BLANC);
                       Pile4++;
                     }
                     else
                     {
                       gotoxy(10,5);
                       cout << PLEINE;
                       Pleine = true;
                       getch();
                     }
                     break;
         }
      }
      while(Pleine);

      if(Gagnant_B)
      {
        Gagnant = true;
        gotoxy(30,5);
        cout <<" Les Blancs sont GAGNANT!!!";
      }

      if(!Gagnant)
        Gagnant = Nulle(Pile1, Pile2, Pile3, Pile4, Gagnant);

      if(!Gagnant)
      {
        gotoxy(1,1);
        cout << PHRASE_NOIR;

        gotoxy(1,2);
        cout << "Dans quelle colonne voulez-vous laisser tomber le jeton? ( 1 a 4 ): ";

        do
        {
          Pleine = false;
          gotoxy(10,5);
          clreol();
          gotoxy(69,2);
          Jeton_Noir = getche();

          switch(Jeton_Noir)
          {
            case '1': if(Pile1 < 4)
                      {
                        Gagnant_N = Empiler(Pile1, 27, NOIR);
                        Pile1++;
                      }
                      else
                      {
                        gotoxy(10,5);
                        cout << PLEINE;
                        Pleine = true;
                        getch();
                      }
                      break;
            case '2': if(Pile2 < 4)
                      {
                        Gagnant_N = Empiler(Pile2, 34, NOIR);
                        Pile2++;
                      }
                      else
                      {
                        gotoxy(10,5);
                        cout << PLEINE;
                        Pleine = true;
                        getch();
                      }
                      break;
            case '3': if(Pile3 < 4)
                      {
                        Gagnant_N = Empiler(Pile3, 41, NOIR);
                        Pile3++;
                      }
                      else
                      {
                        gotoxy(10,5);
                        cout << PLEINE;
                        Pleine = true;
                        getch();
                      }
                      break;
            case '4': if(Pile4 < 4)
                      {
                        Gagnant_N = Empiler(Pile4, 48, NOIR);
                        Pile4++;
                      }
                      else
                      {
                        gotoxy(10,5);
                        cout << PLEINE;
                        Pleine = true;
                        getch();
                      }
                      break;
          }
        }
        while(Pleine);

        if(Gagnant_N)
        {
          Gagnant = true;
          gotoxy(30,5);
          cout <<" Les Noirs sont GAGNANT!!!";
        }
        if(!Gagnant)
          Gagnant = Nulle(Pile1, Pile2, Pile3, Pile4, Gagnant);
      }
    }
    Reponse = MessageBox(NULL, "Voulez-vous continuer?", "Puissance 4",
                         MB_YESNO|MB_ICONQUESTION|MB_SYSTEMMODAL);
  }
  while(Reponse == IDYES);
}

char Afficher(char Couleur)
{
  cout << Couleur << Couleur << Couleur << Couleur << Couleur << Couleur;
  return 0;
}

bool Nulle(int Pile1, int Pile2, int Pile3, int Pile4, bool Win)
{
  if(Pile1 == 4 && Pile2 == 4 && Pile3 == 4 && Pile4 == 4 && !Win)
  {
    gotoxy(30, 5);
    cout << "La partie est NULLE!!!";
    return 1;
  }
  else
    return 0;
}

void Boite()
{
  int i;

  gotoxy(26,9);
  for(i=1; i<=29; i++)
    cout << "-";
  gotoxy(26,10);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,11);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,12);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,13);
  for(i=1; i<=29; i++)
    cout << "-";
  gotoxy(26,14);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,15);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,16);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,17);
  for(i=1; i<=29; i++)
    cout << "-";
  gotoxy(26,18);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,19);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,20);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,21);
  for(i=1; i<=29; i++)
    cout << "-";
  gotoxy(26,22);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,23);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,24);
  for(i=1; i<=5; i++)
    cout << "|      ";
  gotoxy(26,25);
  for(i=1; i<=29; i++)
    cout << "-";
}
void initialisation()
{
  for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)
      Case_Blanc[i][j] = false;

  for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)
      Case_Noir[i][j] = false;
}

bool Empiler(int Pile, int Col, char Couleur)
{
  switch(Pile)
  {
    case 0: gotoxy(Col,22);
            Afficher(Couleur);
            gotoxy(Col,23);
            Afficher(Couleur);
            gotoxy(Col,24);
            Afficher(Couleur);
            if(Couleur == BLANC)
            {
              switch(Col)
              {
                case 27:  Case_Blanc[3][0] = true;
                          break;
                case 34:  Case_Blanc[3][1] = true;
                          break;
                case 41:  Case_Blanc[3][2] = true;
                          break;
                case 48:  Case_Blanc[3][3] = true;
                          break;
              }
            }
            else
            {
              switch(Col)
              {
                case 27:  Case_Noir[3][0] = true;
                          break;
                case 34:  Case_Noir[3][1] = true;
                          break;
                case 41:  Case_Noir[3][2] = true;
                          break;
                case 48:  Case_Noir[3][3] = true;
                          break;
              }
            }
            break;
    case 1: gotoxy(Col,18);
            Afficher(Couleur);
            gotoxy(Col,19);
            Afficher(Couleur);
            gotoxy(Col,20);
            Afficher(Couleur);
            if(Couleur == BLANC)
            {
              switch(Col)
              {
                case 27:  Case_Blanc[2][0] = true;
                          break;
                case 34:  Case_Blanc[2][1] = true;
                          break;
                case 41:  Case_Blanc[2][2] = true;
                          break;
                case 48:  Case_Blanc[2][3] = true;
                          break;
              }
            }
            else
            {
              switch(Col)
              {
                case 27:  Case_Noir[2][0] = true;
                          break;
                case 34:  Case_Noir[2][1] = true;
                          break;
                case 41:  Case_Noir[2][2] = true;
                          break;
                case 48:  Case_Noir[2][3] = true;
                          break;
              }
            }
            break;
    case 2: gotoxy(Col,14);
            Afficher(Couleur);
            gotoxy(Col,15);
            Afficher(Couleur);
            gotoxy(Col,16);
            Afficher(Couleur);
            if(Couleur == BLANC)
            {
              switch(Col)
              {
                case 27:  Case_Blanc[1][0] = true;
                          break;
                case 34:  Case_Blanc[1][1] = true;
                          break;
                case 41:  Case_Blanc[1][2] = true;
                          break;
                case 48:  Case_Blanc[1][3] = true;
                          break;
              }
            }
            else
            {
              switch(Col)
              {
                case 27:  Case_Noir[1][0] = true;
                          break;
                case 34:  Case_Noir[1][1] = true;
                          break;
                case 41:  Case_Noir[1][2] = true;
                          break;
                case 48:  Case_Noir[1][3] = true;
                          break;
              }
            }
            break;
    case 3: gotoxy(Col,10);
            Afficher(Couleur);
            gotoxy(Col,11);
            Afficher(Couleur);
            gotoxy(Col,12);
            Afficher(Couleur);
            if(Couleur == BLANC)
            {
              switch(Col)
              {
                case 27:  Case_Blanc[0][0] = true;
                          break;
                case 34:  Case_Blanc[0][1] = true;
                          break;
                case 41:  Case_Blanc[0][2] = true;
                          break;
                case 48:  Case_Blanc[0][3] = true;
                          break;
              }
            }
            else
            {
              switch(Col)
              {
                case 27:  Case_Noir[0][0] = true;
                          break;
                case 34:  Case_Noir[0][1] = true;
                          break;
                case 41:  Case_Noir[0][2] = true;
                          break;
                case 48:  Case_Noir[0][3] = true;
                          break;
              }
            }
            break;
  }
  if(Case_Blanc[3][0] && Case_Blanc[3][1] && Case_Blanc[3][2] && Case_Blanc[3][3] ||
     Case_Blanc[2][0] && Case_Blanc[2][1] && Case_Blanc[2][2] && Case_Blanc[2][3] ||
     Case_Blanc[1][0] && Case_Blanc[1][1] && Case_Blanc[1][2] && Case_Blanc[1][3] ||
     Case_Blanc[0][0] && Case_Blanc[0][1] && Case_Blanc[0][2] && Case_Blanc[0][3]  )
     return 1;
  else if(Case_Noir[3][0] && Case_Noir[3][1] && Case_Noir[3][2] && Case_Noir[3][3] ||
          Case_Noir[2][0] && Case_Noir[2][1] && Case_Noir[2][2] && Case_Noir[2][3] ||
          Case_Noir[1][0] && Case_Noir[1][1] && Case_Noir[1][2] && Case_Noir[1][3] ||
          Case_Noir[0][0] && Case_Noir[0][1] && Case_Noir[0][2] && Case_Noir[0][3]  )
     return 1;
  else if(Case_Noir[0][0] && Case_Noir[1][0] && Case_Noir[2][0] && Case_Noir[3][0] ||
          Case_Noir[0][1] && Case_Noir[1][1] && Case_Noir[2][1] && Case_Noir[3][1] ||
          Case_Noir[0][2] && Case_Noir[1][2] && Case_Noir[2][2] && Case_Noir[3][2] ||
          Case_Noir[0][3] && Case_Noir[1][3] && Case_Noir[2][3] && Case_Noir[3][3]  )
     return 1;
  else if(Case_Blanc[0][0] && Case_Blanc[1][0] && Case_Blanc[2][0] && Case_Blanc[3][0] ||
          Case_Blanc[0][1] && Case_Blanc[1][1] && Case_Blanc[2][1] && Case_Blanc[3][1] ||
          Case_Blanc[0][2] && Case_Blanc[1][2] && Case_Blanc[2][2] && Case_Blanc[3][2] ||
          Case_Blanc[0][3] && Case_Blanc[1][3] && Case_Blanc[2][3] && Case_Blanc[3][3]  )
           return 1;
  else if(Case_Blanc[3][0] && Case_Blanc[2][1] && Case_Blanc[1][2] && Case_Blanc[0][3] ||
          Case_Blanc[3][3] && Case_Blanc[2][2] && Case_Blanc[1][1] && Case_Blanc[0][0]  )
     return 1;
  else if(Case_Noir[3][0] && Case_Noir[2][1] && Case_Noir[1][2] && Case_Noir[0][3] ||
          Case_Noir[3][3] && Case_Noir[2][2] && Case_Noir[1][1] && Case_Noir[0][0]  )
     return 1;
  else
     return 0;
}

Conclusion :


Le code pourrait être beaucoup plus court si il était mieux structuré.... Si ça vous tente de vous amusez un peu hésitez pas!
(il n'y a pas de commentaires alors si vous avez des questions sur le code écrivez-moi)

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.