Mastermind avec dev c++

Description

Un tit mastermind très très basique ( chuis un newbie en la matière ). Je me sert d'une bibliothèque américaine. Et il faut faire quelques changements en se servant de Dev C++. Premièrement, coller la biblio "winbgim.h" dans le rep "include" de dev C++ et coller "libbgi.a" dans le rep "lib".
Il faut aussi ouvrir un projet en C++, et non un fichier normal. Dans "projet option"il faut aussi rajouter -lbgi -lgdi32 dans le cadre "further...".
C un peu compliqué, je sais... mais l'important, c'est que ca marche.

Source / Exemple :


#include "winbgim.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

void InitWindow();
void combinaison_ordi(int *tab_ordi);
void choix_joueur(int *tab_joueur);
void verification_pions(int *tab_ordi, int *tab_joueur, int *PionsOK, int *PionsDedans);
void EffaceEtRemetLesRonds(int *tab_joueur, int *ligne);
void Affiche_Resultat(int PionsOK, int PionsDedans, int ligne);
void Affiche_Combinaison(int *tab_ordi);
void win();
void lose();

int main()
{
 int tab_ordi[4];
 int tab_joueur[4];
 int tmp[4];
 int PionsOK;
 int PionsDedans;
 int ligne;
 ligne=0;
 int i;
 InitWindow();
 combinaison_ordi(tab_ordi);
 do
  {
   choix_joueur(tab_joueur);
   for(i=0;i<4;i++)
     {
      tmp[i]= tab_ordi[i];
      }
   EffaceEtRemetLesRonds(tab_joueur, &ligne);
   verification_pions(tmp, tab_joueur, &PionsOK, &PionsDedans);
   Affiche_Resultat(PionsOK, PionsDedans, ligne);
   }  //fin boucle do
   while((PionsOK != 4)&&(ligne<10));
 Affiche_Combinaison(tab_ordi);
 delay(2500);
 closegraph();
 if(PionsOK == 4)
  {
   win();
   }
 else
  {
   lose();
   }
}  //fin main

void InitWindow()
{
 int a, b, test=0;
 initwindow(700,715);
 rectangle(120,10,370,70);
 rectangle(120,80,370,635);
 rectangle(120,645,370,705);
 settextstyle(5,HORIZ_DIR,4);
 outtextxy(450,50,"legende");
 setcolor(15);
 settextstyle(9,HORIZ_DIR,1);
 outtextxy(390,100,"Cliquer sur un des ronds");
 setcolor(15);
 outtextxy(410,130,"pour le faire afficher");
 setcolor(15);
 outtextxy(410,160,"dans le cadre du bas.");

 setcolor(4);          //Rond rouge
 setfillstyle(1,4);
 fillellipse(450,250,25,25);
 setcolor(1);          //Rond Bleu
 setfillstyle(1,1);
 fillellipse(515,250,25,25);
 setcolor(2);          //Rond Vert
 setfillstyle(1,2);
 fillellipse(580,250,25,25);
 setcolor(14);         //Rond Jaune
 setfillstyle(1,14);
 fillellipse(450,325,25,25);
 setcolor(15);         //Rond Blanc
 setfillstyle(1,15);
 fillellipse(515,325,25,25);
 setcolor(3);          //Rond Cyan
 setfillstyle(1,3);
 fillellipse(580,325,25,25);

 setcolor(6);
 rectangle(520,595,630,630);
 settextstyle(8,HORIZ_DIR,3);
 setcolor(5);
 outtextxy(525,600,"QUITTER");
}
      /********************************************************/
      /*   Determination de la combinaison par l'ordinateur    */
      /********************************************************/

void combinaison_ordi(int tab_ordi[])
{
 int i;
 srand(time( NULL ) ); //Pour mettre D valeurs aléatoires. Initialise le rand
 for (i=0;i<4;i++)     //boucle qui va éxécuter la commande 4 fois.
   {
    tab_ordi[i] = (int)(6*rand())/RAND_MAX; //Choisis un chiffre entre 1 et 6
    }                       //et le range dans un tableau.
} //fin void combinaison_ordi

       /*****************************************/
       /*   Choix du joueur dans les couleurs   */
       /*****************************************/

void choix_joueur(int tab_joueur[]) //fonction qui répond aux cliques du joueur
{
 int a;
 int b;
 int test;
 int j;
 j=1;
 do
  {
   while (!ismouseclick(WM_LBUTTONDOWN)) //reaction au clic gauche de la souris
    {
     delay(200);
     }        //fin while
 getmouseclick(WM_LBUTTONDOWN, a, b);
 if((b>=595)&&(b<=630)&&(a>=520)&&(a<=630))
  {
   test=1;
   closegraph();
   exit(0);
  }    //fin boucle si
 if((b>=225)&&(b<=275)&&(a>=425)&&(a<=475))
  {
   setcolor(4);
   setfillstyle(1,4);
   fillellipse((j*60)+95,675,25,25);
   tab_joueur[j-1]=0;
   j++;
  }    //fin boucle si rond rouge
 if((b>=225)&&(b<=275)&&(a>=490)&&(a<=540))
  {
   setcolor(1);
   setfillstyle(1,1);
   fillellipse((j*60)+95,675,25,25);
   tab_joueur[j-1]=1;
   j++;
   }    //fin boucle si rond bleu
 if((b>=225)&&(b<=275)&&(a>=555)&&(a<=605))
  {
   setcolor(2);
   setfillstyle(1,2);
   fillellipse((j*60)+95,675,25,25);
   tab_joueur[j-1]=2;
   j++;
   }   //fin boucle si rond vert
 if((b>=300)&&(b<=350)&&(a>=425)&&(a<=475))
  {
   setcolor(14);
   setfillstyle(1,14);
   fillellipse((j*60)+95,675,25,25);
   tab_joueur[j-1]=3;
   j++;
  }    //fin boucle si rond jaune
 if((b>=300)&&(b<=350)&&(a>=490)&&(a<=540))
  {
   setcolor(15);
   setfillstyle(1,15);
   fillellipse((j*60)+95,675,25,25);
   tab_joueur[j-1]=4;
   j++;
  }    //fin boucle si rond blanc
 if((b>=300)&&(b<=350)&&(a>=555)&&(a<=605))
  {
   setcolor(3);
   setfillstyle(1,3);
   fillellipse((j*60)+95,675,25,25);
   tab_joueur[j-1]=5;
   j++ ;
  }    //fin boucle si rond cyan
 }  //fin boucle do
 while(j<=4);
 printf("coord : (%d, %d)\n", a, b);
}  //fin void choix_joueurs

          /************************************************/
          /*   Verification de la combinaison du joueur   */
          /************************************************/

void verification_pions(int *tab_ordi, int *tab_joueur, int *PionsOK, int *PionsDedans)
{
 int i;
 int j;

  • PionsOK = 0;
  • PionsDedans = 0;
for (i=0;i<4;i++) //boucle qui scanne les pions bien placés { if(tab_joueur[i] == tab_ordi[i]) {
  • PionsOK = *PionsOK+1;
tab_ordi[i] = -1; tab_joueur[i] = -2; } //fin boucle if } //fin boucle for for (i=0;i<4;i++) { for (j=0;j<4;j++) { if((i != j)&&(tab_joueur[i] == tab_ordi[j])) {
  • PionsDedans = *PionsDedans+1;
tab_joueur[i] = -2; tab_ordi[j] = -1; } //fin 1ere boucle if } //fin 2eme boucle for } //fin 1ere boucle for } //fin void verification_joueur /***********************************************************/ /* Efface les ronds et les replace dans le grand cadre */ /***********************************************************/ void EffaceEtRemetLesRonds(int tab_joueur[], int *ligne) { int i; for(i=0;i<4;i++) { if(tab_joueur[i]==0) { setcolor(4); //Rond Rouge setfillstyle(1,4); fillellipse((i*60)+155,110+((*ligne)*(50+5)),25,25); setcolor(0); setfillstyle(1,0); fillellipse((i*60)+155,675,25,25); } if(tab_joueur[i]==1) { setcolor(1); //Rond Bleu setfillstyle(1,1); fillellipse((i*60)+155,110+((*ligne)*(50+5)),25,25); setcolor(0); setfillstyle(1,0); fillellipse((i*60)+155,675,25,25); } if(tab_joueur[i]==2) { setcolor(2); //Rond Vert setfillstyle(1,2); fillellipse((i*60)+155,110+((*ligne)*(50+5)),25,25); setcolor(0); setfillstyle(1,0); fillellipse((i*60)+155,675,25,25); } if(tab_joueur[i]==3) { setcolor(14); //Rond Jaune setfillstyle(1,14); fillellipse((i*60)+155,110+((*ligne)*(50+5)),25,25); setcolor(0); setfillstyle(1,0); fillellipse((i*60)+155,675,25,25); } if(tab_joueur[i]==4) { setcolor(15); //Rond Blanc setfillstyle(1,15); fillellipse((i*60)+155,110+((*ligne)*(50+5)),25,25); setcolor(0); setfillstyle(1,0); fillellipse((i*60)+155,675,25,25); } if(tab_joueur[i]==5) { setcolor(3); //Rond Cyan setfillstyle(1,3); fillellipse((i*60)+155,110+((*ligne)*(50+5)),25,25); setcolor(0); setfillstyle(1,0); fillellipse((i*60)+155,675,25,25); } delay(500); }//fin boucle for
  • ligne=*ligne+1;
} //fin void EffaceEtRemetLesRonds /*************************************************************************/ /* Affiche les pions qui sont bien placés, et ceux qui sont présents */ /*************************************************************************/ void Affiche_Resultat(int PionsOK, int PionsDedans, int ligne) { ligne--; if(PionsOK == 0) //Si aucun pion n'est bien placé { setcolor(15); settextstyle(9,HORIZ_DIR,1); outtextxy(30,110+ligne*(50+5),"0"); } else if(PionsOK == 1) //Si 1 pion est bien placé { setcolor(15); settextstyle(9,HORIZ_DIR,1); outtextxy(30,110+ligne*(50+5),"1"); } else if(PionsOK == 2) //Si 2 pions sont bien placés { setcolor(15); settextstyle(9,HORIZ_DIR,1); outtextxy(30,110+ligne*(50+5),"2"); } else if(PionsOK == 3) //Si 3 pions sont bien placés { setcolor(15); settextstyle(9,HORIZ_DIR,1); outtextxy(30,110+ligne*(50+5),"3"); } else if(PionsOK == 4) //Si les 4 pions sont bien placés { setcolor(15); settextstyle(9,HORIZ_DIR,1); outtextxy(20,110+ligne*(50+5),"4"); } if(PionsDedans == 0) //Si aucun pion ne se trouve dans la combinaison { setcolor(6); settextstyle(9,HORIZ_DIR,1); outtextxy(90,110+ligne*(50+5),"0"); } else if(PionsDedans == 1) //Si 1 pion est mal placé { setcolor(6); settextstyle(9,HORIZ_DIR,1); outtextxy(90,110+ligne*(50+5),"1"); } else if(PionsDedans == 2) //Si 2 pions sont mal placés { setcolor(6); settextstyle(9,HORIZ_DIR,1); outtextxy(90,110+ligne*(50+5),"2"); } else if(PionsDedans == 3) //Si 3 pions sont mal placés { setcolor(6); settextstyle(9,HORIZ_DIR,1); outtextxy(90,110+ligne*(50+5),"3"); } else if(PionsDedans == 4) //Si les 4 pions sont mal placés { setcolor(6); settextstyle(9,HORIZ_DIR,1); outtextxy(90,110+ligne*(50+5),"4"); } } //fin du void affiche_Resultat /****************************************************/ /* Affiche la Combinaison dans le cadre du haut */ /****************************************************/ void Affiche_Combinaison(int tab_ordi[]) { int i; for(i=0;i<4;i++) { if(tab_ordi[i]==0) { setcolor(4); //Rond Rouge setfillstyle(1,4); fillellipse((i*60)+155,40,25,25); } if(tab_ordi[i]==1) { setcolor(1); //Rond Bleu setfillstyle(1,1); fillellipse((i*60)+155,40,25,25); } if(tab_ordi[i]==2) { setcolor(2); //Rond Vert setfillstyle(1,2); fillellipse((i*60)+155,40,25,25); } if(tab_ordi[i]==3) { setcolor(14); //Rond Jaune setfillstyle(1,14); fillellipse((i*60)+155,40,25,25); } if(tab_ordi[i]==4) { setcolor(15); //Rond Blanc setfillstyle(1,15); fillellipse((i*60)+155,40,25,25); } if(tab_ordi[i]==5) { setcolor(3); //Rond Cyan setfillstyle(1,3); fillellipse((i*60)+155,40,25,25); } delay(500); }//fin boucle for } //fin void Affiche_Resultat void win() { initwindow(320,300); setcolor(4); settextstyle(9,HORIZ_DIR,3); outtextxy(100,50,"Bravo !!!"); outtextxy(80,100,"Tu as gagné"); outtextxy(15,200,"Tapes sur une touche"); outtextxy(55,250,"pour quitter"); while (!kbhit()); closegraph(); } void lose() { initwindow(320,300); setcolor(1); settextstyle(9,HORIZ_DIR,3); outtextxy(90,50,"Dommage"); outtextxy(80,100,"Tu as perdu"); outtextxy(15,200,"Tapes sur une touche"); outtextxy(55,250,"pour quitter"); while (!kbhit()); closegraph(); }

Conclusion :


Pour regarder ce qui est possible de faire avec la bibliothèque "winbgim" le site "http://www.cs.colorado.edu/~main/bgi" peut vous donner les renseignements adéquat.

Si vous rencontrer des problèmes, il se peut qu'il faille mettre en commentaire de la ligne 58 à la 62 dans le code de "winbgim.h"

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.