Mastermind avec dev c++

Soyez le premier à donner votre avis sur cette source.

Vue 6 688 fois - Téléchargée 298 fois

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

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
9 octobre 2002

Merci de ton commentaire Mike... C clair que mettre des switch optimiserait le prog... J'y avais songé, mais vu que j'ai fait ca comme ca... je ne m'en suis pas servi. Mais merci de t'être attardé sur mes centaines de if else if.... ;o))
Allez, @++++
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1
tu pourrait utiliser les switch ( ça fé plus propre que t centaine de if elsif ) lol, sinon ton prog est trés bien lol, c juste histoire de critiquer un peu !! lol
Messages postés
2
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
9 octobre 2002

Bah si.... l'adresse est bonne... "http://www.cs.colorado.edu/~main/bgi/"
Il ne faut pas oublier le ~ avant le main....

Sinon, pour ceux qui pensent qu'il peut largement être optimisé, leur commentaires sont les bienvenus...
Messages postés
269
Date d'inscription
mercredi 24 avril 2002
Statut
Membre
Dernière intervention
9 juin 2003

le site que tu indique avec les explications de la bibliotèque en question ne marche pas (lien mort..)

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.