1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
| import java.util.*;
class Mastermind {
public static final ArrayList<String> couleurs = new ArrayList() {{
add("Rouge");
add("Jaune");
add("Vert");
add("Bleu");
add("Orange");
add("Blanc");
add("Violet");
add("Fuchsia");
}};
/**
* Lancement du programme Mastermind
*
* @param args Non utilisé
*/
public static void main(String[] args) {
mastermind(12);
}
/**
* Le programme génère une combinaison de nbElementsCombinaisonCouleur.
* Le joueur cherche à la deviner et fait des propositions de combinaisons.
* Le programme indique à chaque coup au joueur combien d'éléments
* sont bien devinés.
* Le jour a droit à maxTentativesJoueur tentatives.
*
* @param maxTentativesJeu Nombre de tentatives maximum au joueur pour trouver la bonne combinaison
*/
public static void mastermind(int maxTentativesJeu) {
int nombreTentativesJoueur = 0;
messageDebutDuJeu();
final ArrayList<String> listeCombinaisonCouleur = generationListeCombinaisonCouleur(4);
final ArrayList<String> combinaisonJoueur = saisieJoueurClavier(4);
boolean comparaisonJoueur = comparaisonJeuJoueur(listeCombinaisonCouleur, combinaisonJoueur, 4);
do{
nombreTentativesJoueur++;
saisieJoueurClavier(4);
comparaisonJoueur = comparaisonJeuJoueur(listeCombinaisonCouleur, combinaisonJoueur, 4);
}while(comparaisonJoueur == false && (nombreTentativesJoueur < maxTentativesJeu));
if(comparaisonJoueur) System.out.println("Bravo");
else System.out.println("Dommage");
}
/**
* Affiche le message de bienvenue et les explications pour jouer
*/
public static void messageDebutDuJeu() {
System.out.println("Vous devez trouver, en 12 coups maximum, une combinaison de\n4 couleurs choisie par ce programme");
System.out.println();
System.out.println("Vous devez deviner cette combinaison, cest-à-dire les couleurs et leurs positions,\nen 12 coups maximum.");
System.out.println();
}
/**
* Génère une combinaison aléatoire de
* nbElementsCombinaison couleur unique
*
* @param nbElementsCombinaisonCouleur Nombre d'éléments de la combinaison de couleurs
*/
public static ArrayList<String> generationListeCombinaisonCouleur(int nbElementsCombinaisonCouleur) {
// Création d'une copie de l'ArrayList couleur
ArrayList<String> cloneListeCouleurs = (ArrayList<String>) couleurs.clone();
// Mélange de l'ArrayList cloneListeCouleurs
Collections.shuffle(cloneListeCouleurs);
// Création d'une ArrayList avec les 4 couleurs aléatoire
ArrayList<String> listeCombinaisonCouleur = new ArrayList<>();
for (int i = 0; i < nbElementsCombinaisonCouleur; i++) listeCombinaisonCouleur.add(cloneListeCouleurs.get(i));
System.out.println(listeCombinaisonCouleur);
return listeCombinaisonCouleur;
}
/**
* Permet de lire la combinaison proposée par le joueur.
*
* @param nbElementsCombinaisonCouleur Nombre d'éléments de la combinaison de couleurs
*/
public static ArrayList<String> saisieJoueurClavier(int nbElementsCombinaisonCouleur) {
ArrayList<String> combinaisonJoueur = new ArrayList<>();
Scanner sc = new Scanner(System.in);
// Récupération des données du Joueur
System.out.print("Entrez les ");
System.out.print(nbElementsCombinaisonCouleur);
System.out.println(" couleurs de votre proposition ");
System.out.println("(terminez par un retour chariot) :");
for (int i = 0; i < nbElementsCombinaisonCouleur; i++) {
String saisieClavier = sc.nextLine();
switch (saisieClavier) {
case "Rouge", "Jaune", "Vert", "Bleu", "Orange", "Blanc", "Violet", "Fuchsia" -> {
System.out.println("Couleur enregistrée");
combinaisonJoueur.add(saisieClavier);
}
default -> {
System.out.println("Veuillez indiquer une couleur dans celles prosposées");
i--;
}
}
}
sc.close();
System.out.println("Combinaison enregistrée");
System.out.println("");
return combinaisonJoueur;
}
/**
* Compare la combinaison du jeu de celle inscrite par le joueur
*
* @param listeCombinaisonCouleur Tableau de couleurs généré par le programme
* @param combinaisonJoueur Tableau des couleurs saisies par le joueur
* @param nbElementsCombinaisonCouleur Nombre d'éléments de la combinaison de couleurs
* @return true si la combinaison du joueur est correcte, sinon false
*/
public static boolean comparaisonJeuJoueur(ArrayList<String> listeCombinaisonCouleur,
ArrayList<String> combinaisonJoueur,
int nbElementsCombinaisonCouleur) {
System.out.println("Système de vérification pour le codeur :");
System.out.println(listeCombinaisonCouleur);
System.out.println(combinaisonJoueur);
System.out.println("");
// Déclaration de variables
boolean boolCombinaison = true;
int couleurOK = 0;
int couleurMalPlace = 0;
/* Cette boucle sert à vérifier les éléments trouvés et bien placés
Si une seule couleur est fausse, la combinason proposée par le joueur est erronée*/
for (int i = 0; i < nbElementsCombinaisonCouleur; i++) {
if (listeCombinaisonCouleur.get(i).equals(combinaisonJoueur.get(i))) {
couleurOK++;
} else {
boolCombinaison = false; // Si une seule couleur est fausse, la combinason proposée par le joueur est erronée
}
}
// Affiche les nombre de couleurs trouvées et bien placées
switch (couleurOK) {
case 4 -> System.out.println("Félicitations, vous avez trouvé la combinaison !!");
case 3 -> System.out.println("Vous avez 3 couleurs bien placées");
case 2 -> System.out.println("Vous avez 2 couleurs bien placées");
case 1 -> System.out.println("Vous avez 1 couleur bien placée");
case 0 -> System.out.println("Vous n'avez aucune couleur bien placées");
}
// Cette boucle sert à vérifier les éléments trouvés mais mal placés
for (int i = 0; i < nbElementsCombinaisonCouleur; i++) {
if (!listeCombinaisonCouleur.get(i).equals(combinaisonJoueur.get(i))) {
int j = 0;
boolean trouveMalPlaces = false;
while ((j < nbElementsCombinaisonCouleur) && !trouveMalPlaces) {
if (listeCombinaisonCouleur.get(i).equals(combinaisonJoueur.get(j))) {
couleurMalPlace++;
trouveMalPlaces = true;
}
j++;
}
}
}
//Affiche le nombre de couleurs mal placées
switch (couleurMalPlace) {
case 4 -> System.out.println("Vous avez 4 bonnes couleurs mais mal placées");
case 3 -> System.out.println("Vous avez 3 bonnes couleurs mais mal placées");
case 2 -> System.out.println("Vous avez 2 bonnes couleurs mais mal placées");
case 1 -> System.out.println("Vous avez 1 bonne couleur mais mal placée");
}
System.out.println(boolCombinaison);
return boolCombinaison;
}
} |
Partager