/*
********************************************************
* tp_mastermind.java *
********************************************************
* Version * Date * Auteur * Modifications *
********************************************************
* V 1.0 * 08/11/11 * S.J.I. * création *
* * * * *
********************************************************
*/
import java.util.*;
import java.io.*;
/** Fichier source Java montrant la mise en oeuvre de structure de contrôle de base.
* @author Soufyane JANATI IDRISSI
* @author soufyanejanati@hotmail.fr
* @version 1.0
*/
public class tp_mastermindv4_5
{
/** Unique point d'entrée de la classe et de l'application.
* @param Pas de paramètres d'entrée.
* @return Pas de valeur de retour.
* @exception Pas d'exceptions émises.
*/
public static void main(String args[])
{
//initialisation des variables
int affichage_de_la_case_du_tableau_à_remplir=0; //variable destinée à l'affichage
int i; //variable de la boucle for
int j; //variable de boucle for imbriquee dans une autre boucle for
int nbre_de_case_du_tableau=4; //une combinaison de "4" chiffres est à trouvée
int lien_valeur_lettre; //report dans le tableau de selection des symboles
int bien_placee=0; //variable permettant l'affichage des symboles bien placés
int a_placer_ailleur=0; //variable permettant l'affichage des symboles a placer ailleur
int nbre_de_chance; //définition du nombre de chance
int dec_de_chance; //variable de décompter les essais
boolean game_over=false; //variable servant à la boucle while
boolean partie_gagne=false; //variable servant à la boucle while
boolean jouer_partie=true; //variable servant à la boucle while permettant de jouer une partie
String rejouer; //saisie du joueur à "voulez vous rejouer?"
//initialisation du tableau contenant le code a deviner
char []code_original; //déclaration du type de tableau
code_original=new char[nbre_de_case_du_tableau]; //déclaration de la taille du tableau
//initialisation du tableau contenant le code saisi
char []tentative_de_code; //déclaration du type de tableau
tentative_de_code=new char[nbre_de_case_du_tableau]; //déclaration de la taille du tableau
//initialisation du tableau des symboles bien placés
boolean []tab_b_p; //déclaration du type de tableau
tab_b_p=new boolean[nbre_de_case_du_tableau]; //déclaration de la taille du tableau
//initialisation du tableau des symboles à placer ailleur
boolean []tab_a_p_a; //déclaration du type de tableau
tab_a_p_a=new boolean[nbre_de_case_du_tableau]; //déclaration de la taille du tableau
while (jouer_partie) {
//boucle for pour générer et remplir le tableau contenant le code original
for (i=0;i<nbre_de_case_du_tableau;i++)
{
//GENERATION du code aléatoire
lien_valeur_lettre=(int)(Math.random()*5);
//CORRESPONDANCE entre la valeur et la lettre (tableau de symboles)
switch(lien_valeur_lettre)
{
case 0: code_original [i]='A'; break;
case 1: code_original [i]='B'; break;
case 2: code_original [i]='C'; break;
case 3: code_original [i]='D'; break;
case 4: code_original [i]='E'; break;
}
// System.out.print(""+code_original [i]); //pour tester le programme AFFICHER le bon code
}
//System.out.println(""); //pour aller a la ligne
//CHOIX du nombre de chances
System.out.print("Combien de chances voulez-vous? ");
nbre_de_chance=Saisie.lire_int();
//REINITIALISATION du nombre de chance pour une nouvelle partie
dec_de_chance=0;
while ((!game_over)&&(!partie_gagne)) { //"tant que la partie n'a ni été perdu ni été gagnée, le joueur peut tenter sa chance"
// SAISIE des lettres
for (i=0;i<nbre_de_case_du_tableau;i++)
{
affichage_de_la_case_du_tableau_à_remplir=i+1;
System.out.print("entrez le symbole numero "+affichage_de_la_case_du_tableau_à_remplir+" :"); //affichage de la consigne de l'utilisateur destinée au remplissage du tableau
tentative_de_code[i]=Saisie.lire_char("");
}
//TEST affichage du tableau "tentative_de_code"
for (i=0;i<nbre_de_case_du_tableau;i++)
{
System.out.print(""+tentative_de_code [i]); //pour afficher le code saisi
}
System.out.println("");
System.out.println("");
//COMPARAISON du tableau saisi et du tableau original
for (i=0;i<nbre_de_case_du_tableau;i++) //"for" qui scrute les cases du tableau original et du tableau de saisi
{
if (code_original [i]==tentative_de_code[i]) //placement des symboles bien placee dans un tableau exemple: code original =ABCD
{ // code saisi =EBED
tab_b_p [i]=true; // tab_b_p =0101
}
}
for (i=0;i<nbre_de_case_du_tableau;i++) //"for" qui scrute les cases du tableau original
{
for (j=0;j<nbre_de_case_du_tableau;j++) //"for" qui scrute les différents symboles du tableau saisi
{
if (tab_b_p [i]==true) {}
else
{
if ((tentative_de_code[j]==code_original [i]))//&&(tab_b_p [i]==false)) //La partie en commentaire m'a servi mais je me suis rendu compte par la suite qu'il s'agissait d'une redondance des deux lignes précedentes
{
tab_a_p_a [i]=true;
}
}
}
}
//COMPTABILISER les tableaux secondaires
for (i=0;i<nbre_de_case_du_tableau;i++)
{
if (tab_b_p [i]==true)
{
bien_placee++;
}
if (tab_a_p_a [i]==true)
{
a_placer_ailleur++;
}
}
//PARTIE GAGNEE
if (bien_placee==nbre_de_case_du_tableau)
{
System.out.println("FELICITATION VOUS AVEZ GAGNER");
System.out.println("");
partie_gagne=true;}
//AFFICHER les bien placee et mal placee