forked from menault/TD3_DEV51_Qualite_Algo
bamba chameau #1
172
Game.java
172
Game.java
@@ -1,172 +0,0 @@
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* Hangman console version.
|
||||
* Code, variables and comments in English.
|
||||
* Displayed text remains in French.
|
||||
*/
|
||||
public class Game {
|
||||
|
||||
// Hangman visual stages
|
||||
private static final String[] stages = new String[] {
|
||||
"=========\n",
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" O |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" O |\n" +
|
||||
" | |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" O |\n" +
|
||||
" /|\\ |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" O |\n" +
|
||||
" /|\\ |\n" +
|
||||
" / \\ |\n" +
|
||||
" |\n" +
|
||||
"=========\n"
|
||||
};
|
||||
|
||||
/** Build the masked word using found letters. */
|
||||
static String maskWord(String secretWord, Set<Character> foundLetters) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < secretWord.length(); i++) {
|
||||
char original = secretWord.charAt(i);
|
||||
char c = Character.toLowerCase(original);
|
||||
|
||||
if (!Character.isLetter(c)) {
|
||||
sb.append(original);
|
||||
} else if (foundLetters.contains(c)) {
|
||||
sb.append(original);
|
||||
} else {
|
||||
sb.append('_');
|
||||
}
|
||||
if (i < secretWord.length() - 1) sb.append(' ');
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/** Display the current hangman stage based on errors. */
|
||||
static void drawHangman(int errors) {
|
||||
int idx = Math.min(Math.max(errors, 0), stages.length - 1);
|
||||
System.out.println(stages[idx]);
|
||||
}
|
||||
|
||||
/** Check if all letters of the word have been found. */
|
||||
static boolean isWin(String secretWord, Set<Character> foundLetters) {
|
||||
for (int i = 0; i < secretWord.length(); i++) {
|
||||
char c = Character.toLowerCase(secretWord.charAt(i));
|
||||
if (Character.isLetter(c) && !foundLetters.contains(c)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String[] words = {
|
||||
"ordinateur", "voiture", "maison", "soleil", "lumiere",
|
||||
"fromage", "chocolat", "montagne", "riviere", "plage",
|
||||
"oiseau", "papillon", "musique", "chateau", "livre",
|
||||
"telephone", "aventure", "mystere", "foret", "fleur",
|
||||
"chapeau", "nuage", "horloge", "chaise", "fenetre",
|
||||
"paysage", "bouteille", "parapluie", "clavier", "souris",
|
||||
"brouillard", "village", "histoire", "cerise", "pomme",
|
||||
"banane", "poisson", "arbre", "cascade", "cheval"
|
||||
};
|
||||
|
||||
Random random = new Random();
|
||||
String secretWord = words[random.nextInt(words.length)];
|
||||
|
||||
Set<Character> foundLetters = new HashSet<>();
|
||||
Set<Character> triedLetters = new HashSet<>();
|
||||
int errors = 0;
|
||||
int maxErrors = stages.length - 1;
|
||||
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
System.out.println("=== Game du Pendu ===");
|
||||
|
||||
while (true) {
|
||||
drawHangman(errors);
|
||||
System.out.println("Mot: " + maskWord(secretWord, foundLetters));
|
||||
System.out.println("Lettres essayées : " + triedLetters);
|
||||
System.out.println("Erreurs : " + errors + "/" + maxErrors);
|
||||
System.out.print("Propose une lettre: ");
|
||||
|
||||
String input = scanner.nextLine().trim().toLowerCase(Locale.ROOT);
|
||||
if (input.length() != 1 || !Character.isLetter(input.charAt(0))) {
|
||||
System.out.println("Entrez une seule lettre.");
|
||||
continue;
|
||||
}
|
||||
char letter = input.charAt(0);
|
||||
if (triedLetters.contains(letter)) {
|
||||
System.out.println("Déjà essayé.");
|
||||
continue;
|
||||
}
|
||||
triedLetters.add(letter);
|
||||
|
||||
boolean hit = false;
|
||||
for (int i = 0; i < secretWord.length(); i++) {
|
||||
if (Character.toLowerCase(secretWord.charAt(i)) == letter) {
|
||||
foundLetters.add(letter);
|
||||
hit = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hit) {
|
||||
errors++;
|
||||
System.out.println("Mauvaise lettre.");
|
||||
} else {
|
||||
System.out.println("Bonne lettre !");
|
||||
}
|
||||
|
||||
if (isWin(secretWord, foundLetters)) {
|
||||
System.out.println("\nTu as trouvé " + secretWord);
|
||||
drawHangman(errors);
|
||||
break;
|
||||
}
|
||||
if (errors >= maxErrors) {
|
||||
drawHangman(errors);
|
||||
System.out.println("\nPerdu ! Le mot était " + secretWord);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
scanner.close();
|
||||
}
|
||||
}
|
||||
165
Jeu.java
165
Jeu.java
@@ -1,165 +0,0 @@
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Jeu {
|
||||
// liste des etats a afficher
|
||||
private static final String[] stages = new String[] {
|
||||
"=========\n",
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" O |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" O |\n" +
|
||||
" | |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" O |\n" +
|
||||
" /|\\ |\n" +
|
||||
" |\n" +
|
||||
" |\n" +
|
||||
"=========\n",
|
||||
" +---+\n" +
|
||||
" | |\n" +
|
||||
" O |\n" +
|
||||
" /|\\ |\n" +
|
||||
" / \\ |\n" +
|
||||
" |\n" +
|
||||
"=========\n"
|
||||
};
|
||||
|
||||
// fonction pour masquer le mot generer aleatoirement
|
||||
static String maskWord(String secretWord, Set<Character> foundLetters) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < secretWord.length(); i++) {
|
||||
char original = secretWord.charAt(i);
|
||||
char c = Character.toLowerCase(original);
|
||||
|
||||
if (!Character.isLetter(c)) {
|
||||
sb.append(original);
|
||||
} else if (foundLetters.contains(c)) {
|
||||
sb.append(original);
|
||||
} else {
|
||||
sb.append('_');
|
||||
}
|
||||
if (i < secretWord.length() - 1) sb.append(' ');
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
// fonction qui permet d'afficher les etats du pendu
|
||||
static void drawHangman(int errors) {
|
||||
int idx = Math.min(Math.max(errors, 0), stages.length - 1);
|
||||
System.out.println(stages[idx]);
|
||||
}
|
||||
|
||||
// fonction qui permet de savoir si la partie est gagnee
|
||||
static boolean isWin(String secretWord, Set<Character> foundLetters) {
|
||||
for (int i = 0; i < secretWord.length(); i++) {
|
||||
char c = Character.toLowerCase(secretWord.charAt(i));
|
||||
if (Character.isLetter(c) && !foundLetters.contains(c)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String[] words = {
|
||||
"ordinateur", "voiture", "maison", "soleil", "lumiere",
|
||||
"fromage", "chocolat", "montagne", "rivière", "plage",
|
||||
"oiseau", "papillon", "musique", "chateau", "livre",
|
||||
"telephone", "aventure", "mystere", "foret", "fleur",
|
||||
"chapeau", "nuage", "horloge", "chaise", "fenetre",
|
||||
"paysage", "bouteille", "parapluie", "clavier", "souris",
|
||||
"brouillard", "village", "histoire", "cerise", "pomme",
|
||||
"banane", "poisson", "arbre", "cascade", "cheval"
|
||||
};
|
||||
|
||||
Random random = new Random();
|
||||
String secretWord = words[random.nextInt(words.length)];
|
||||
|
||||
Set<Character> foundLetters = new HashSet<>();
|
||||
Set<Character> triedLetters = new HashSet<>();
|
||||
int errors = 0;
|
||||
int maxErrors = stages.length - 1;
|
||||
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
System.out.println("=== Jeu du Pendu ===");
|
||||
|
||||
while (true) {
|
||||
drawHangman(errors);
|
||||
System.out.println("Mot: " + maskWord(secretWord, foundLetters));
|
||||
System.out.println("Lettres essayées : " + triedLetters);
|
||||
System.out.println("Erreurs : " + errors + "/" + maxErrors);
|
||||
System.out.print("Propose une lettre: ");
|
||||
|
||||
String input = scanner.nextLine().trim().toLowerCase(Locale.ROOT);
|
||||
if (input.length() != 1 || !Character.isLetter(input.charAt(0))) {
|
||||
System.out.println("Entrez une seule lettre.");
|
||||
continue;
|
||||
}
|
||||
char letter = input.charAt(0);
|
||||
if (triedLetters.contains(letter)) {
|
||||
System.out.println("Déjà essayé.");
|
||||
continue;
|
||||
}
|
||||
triedLetters.add(letter);
|
||||
|
||||
boolean hit = false;
|
||||
for (int i = 0; i < secretWord.length(); i++) {
|
||||
if (Character.toLowerCase(secretWord.charAt(i)) == letter) {
|
||||
foundLetters.add(letter);
|
||||
hit = true;
|
||||
}
|
||||
}
|
||||
if (!hit) {
|
||||
errors++;
|
||||
System.out.println("Mauvaise lettre.");
|
||||
} else {
|
||||
System.out.println("Bonne lettre !");
|
||||
}
|
||||
|
||||
if (isWin(secretWord, foundLetters)) {
|
||||
System.out.println("\nTu as trouvé " + secretWord);
|
||||
drawHangman(errors);
|
||||
break;
|
||||
}
|
||||
if (errors >= maxErrors) {
|
||||
drawHangman(errors);
|
||||
System.out.println("\nPerdu ! Le mot était " + secretWord);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
scanner.close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user