.::mastermind[dev c++]::.

Soyez le premier à donner votre avis sur cette source.

Vue 20 925 fois - Téléchargée 987 fois

Description

Un mastermind en DOS, qui utilise beaucoup les couleurs et les caractères ASCII.

Source / Exemple :


#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.c>
#include <time.h>
#include "mastermind.h"

char c;
int i;
int j;
int a;
int choix[10];
int choix_ordi[10];
int pox;
int poy = 5;
int couleur;
int blanc = 0;
int rouge = 0;
int coup = 0;

void pion();
void resultat();
void init();
void annonce();
void gagne();
void perd();
void couleur_pion();
void recommence();

int main()
{
  srand( (unsigned)time( NULL ) );
  init();
}
void init()
{
  srand( (unsigned)time( NULL ) );
  choix_ordi[1] = (rand() % 6) + 1;
  choix_ordi[2] = (rand() % 6) + 1;
  choix_ordi[3] = (rand() % 6) + 1;
  choix_ordi[4] = (rand() % 6) + 1;
  gotoxy(35, 1);
  mast_txtcolor_hasard("M");
  mast_txtcolor_hasard("A");
  mast_txtcolor_hasard("S");
  mast_txtcolor_hasard("T");
  mast_txtcolor_hasard("E");
  mast_txtcolor_hasard("R");
  mast_txtcolor_hasard("M");
  mast_txtcolor_hasard("I");
  mast_txtcolor_hasard("N");
  mast_txtcolor_hasard("D");
  gotoxy(1, 5);
  mast_txtcolor ("o : 1\n", RED);
  mast_txtcolor ("o : 2\n", BLUE);
  mast_txtcolor ("o : 3\n", GREEN);
  mast_txtcolor ("o : 4\n", YELLOW);
  mast_txtcolor ("o : 5\n", CYAN);
  mast_txtcolor ("o : 6\n", WHITE);
  gotoxy(1, 20);
  textcolor(BLUE);
  texte_repet("Í", 15);
  caractere(187);
  caractere_repetlm(186, 6, 15, 21);
  gotoxy(1, 21);
  caractere_repet(177, 15);
  cout << "\n";
  caractere_repet(177, 15);
  cout << "\n";
  caractere_repet(177, 15);
  cout << "\n";
  caractere_repet(177, 15);
  cout << "\n";
  caractere_repet(177, 15);
  textcolor(RED);
  gotoxy(1, 21);
  caractere(16);
  cout << "VOTRE CHOIX: ";

  a = 0;
  textcolor(BROWN);
  while (a <= 16)
  {
    gotoxy(30, 5 + a);
    caractere_repet(176, 20);
    a++;
  }

  textcolor(GREEN);
  pion();
  getch();
}

void pion()
{
  i = 1;
  pox = 33;
  poy = poy + 2;
  coup++;
  gotoxy(50, 21);
  textcolor(YELLOW);
  cout << "COUP N " << coup;
  while (i != 5)
  {
    textcolor(CYAN);
    gotoxy(60, 1);
    cout << "CHOIX N " << i;
    gotoxy(1, 22);
    cin >> choix[i];
    gotoxy(pox, poy);
    couleur_pion();
    i++;
    textcolor(couleur);
    cout << "o";
    pox = pox + 4;
  }
  resultat();
}

void couleur_pion()
{
    if (choix[i] == 1)
    {
      couleur = RED;
    }
    if (choix[i] == 2)
    {
      couleur = BLUE;
    }
    if (choix[i] == 3)
    {
      couleur = GREEN;
    }
    if (choix[i] == 4)
    {
      couleur = YELLOW;
    }
    if (choix[i] == 5)
    {
      couleur = CYAN;
    }
    if (choix[i] == 6)
    {
      couleur = WHITE;
    }
}

void resultat()
{

  blanc = 0;
  rouge = 0;
  for (j = 1; j <= 6; j++)
  {
   int nbcolchoix = 0;
   int nbcolordi = 0;

    for (i = 1; i <= 4; i++)
    {
      if (choix[i] == j)
      {
        nbcolchoix++;
      }
      if (choix_ordi[i] == j)
      {
        nbcolordi++;
      }
     }
      if (nbcolchoix <= nbcolordi)
      {
        blanc = blanc + nbcolchoix;
      }
      else
      {
        blanc = blanc + nbcolordi;
      }
  }
    j = 1;
    i = 1;
    while (j != 5)
    {
     /* while (i != 5)
      {
        if (choix[j] == choix_ordi[i])
        {
          if (i == j)
          {
            rouge++;
          }
        }
        i++;
      }
      i = 1;
      j++;  */
          if (choix[j] == choix_ordi[j])
         {
            rouge++;
          }
             j++;
    }
  blanc = blanc - rouge;
  annonce();

}

void annonce()
{
  gotoxy(60, poy);
  textcolor(RED);
  cout << rouge;
  textcolor(WHITE);
  cout << "  " << blanc;
  if (rouge == 4)
  {
    gagne();
  }
  else if (coup == 6)
  {
    perd();
  }
  else
  {
    rouge = 0;
    blanc = 0;
    pion();
  }
}

void gagne()
{
  poy = 5;
  coup = 0;
  gotoxy(37, 23);
  mast_txtcolor_hasard ("G");
  mast_txtcolor_hasard ("A");
  mast_txtcolor_hasard ("G");
  mast_txtcolor_hasard ("N");
  mast_txtcolor_hasard ("E");
  mast_txtcolor_hasard ("!");
  i = 1;
  pox = 33;
  while (i != 5)
  {
    choix[i] = choix_ordi[i];
    gotoxy(pox, 20);
    couleur_pion();
    textcolor(couleur);
    cout << "o";
    i++;
    pox = pox + 4;
  }
getch();
recommence();
}

void perd()
{
rouge = 0;
  blanc = 0;
  poy = 5;
  coup = 0;
  gotoxy(37, 23);
  mast_txtcolor_hasard ("P");
  mast_txtcolor_hasard ("E");
  mast_txtcolor_hasard ("R");
  mast_txtcolor_hasard ("D");
  mast_txtcolor_hasard ("U");
  mast_txtcolor_hasard ("!");
  i = 1;
  pox = 33;
  while (i != 5)
  {
    choix[i] = choix_ordi[i];
    gotoxy(pox, 20);
    couleur_pion();
    textcolor(couleur);
    cout << "o";
    i++;
    pox = pox + 4;
  }
getch();
recommence();
}

void recommence()
{
  if (MessageBox (NULL, "Voulez vous recommencer???" , "************MASTERMIND************", 0 + MB_YESNO + MB_ICONQUESTION) == 6)
  {
    cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
    init();
  }
  else
  {
MessageBox (NULL, "Venez vite rejoindre mon projet : Sim City 2002.
Le jeu sera en DOS, et fera au moins 2000-3000 lignes.
Bon, je vous laisse!" , "***************Moment de Pub...*************", 0 + MB_ICONASTERISK);    
exit(0);
  }
}

Conclusion :


RIEN

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
38
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
20 mars 2005

sauf que si il utilise un bon compilateur, pas besoin d'optimiser il vaut mieux verifier si son algo marche... un bon compilateur fait les optimisations lui meme, g++ (sous linux) va meme jusqu'a derecursifier les fonctions recursives terminales....
Messages postés
57
Date d'inscription
mardi 17 avril 2001
Statut
Membre
Dernière intervention
10 janvier 2003

Tout à fait d'accord avec Xentor...
Déjà qu'on peut faire les mêmes astuces d'optimisation avec VB alors... ;-P
Mais bon, Faut que je regarde 1 peu plus de près le code moi aussi!... ;-P

Allez vbonne prog'!!!!!!!!!!!!!

Gogogogogogogogogogooooooooooooooooo
Messages postés
64
Date d'inscription
jeudi 9 août 2001
Statut
Membre
Dernière intervention
24 juillet 2003

Je crois que tu pourrais optimiser ce programme. Par exemple, au lieu de faire de déclarations de ce genre :
int meuh;
int wouf;
int coincoin;
Tu peux abréger en :
int meuh, wouf, coincoin;
De même, dans ta fonction couleur_pion, utilise un switch() { case :}, parce que là ça fait un peu lourd.
Dans ta fonction résultat, au lieu de marquer :
blanc = blanc + nbcolordi;
il est beaucoup plus simple et plus court de noter :
blanc += nbcolordi;

Voilà quelques trucs, j'ai pas regardé le code en détail mais rien que ça ça devrait l'éclaircir un peu. :)

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.