import java.util.Random; /** * La classe Partie * * @version 0.2 * @author Aurélien * Date : 08-10-25 * Licence : */ public class Partie { //Contantes private static final byte REMAININGTRY = 11 ; private static final byte CARACTERCODESHIFT = 65 ; //Décalage ASCI > 'A' //Attributs private char[] secretword ; private byte wordsize ; private boolean[] foundletters ; private boolean[] entriesletters = new boolean[26] ; //Pseudo Alphabée private byte remainingtry = REMAININGTRY ; //Constructeur public Partie() { this.secretword = generateSecretWord() ; this.wordsize = (byte) secretword.length ; this.foundletters = new boolean[wordsize] ; } //Méthodes public char[] getSecretWord() { return this.secretword ; } public boolean[] getFoundLetters() { return this.foundletters ; } public byte getRemainingTry() { return this.remainingtry ; } /** * Vérifie l'état de la partie en cours. * * @return true si le jeu est fini. */ public boolean gameIsEnding() { if(this.remainingtry <= 0){ return true ; }else if(wordIsFound()){ return true ; }else{ return false ; } } /** * Vérifie si la lettre reçu n'a pas déjà été joué puis, met à jour le tableau "entriesletters" et * "foundletters" le cas échéant. * * @return true si la lettre était déjà présente. */ public boolean isAlreadyEntries(char letter) { short caractercode = (short) letter ; //Récupération du code du caractère if(this.entriesletters[caractercode-CARACTERCODESHIFT]){ this.remainingtry-- ; //Décrément des essais return true ; }else{ boolean isfind = false ; for(byte i = 0 ; i < this.wordsize ; i++){ //Parcours du "secretword" if(this.secretword[i] == letter){ this.foundletters[i] = true ; isfind = true ; } } if(isfind == false){ this.remainingtry-- ; //Décrément des essais } this.entriesletters[caractercode-CARACTERCODESHIFT] = true ; //Ajout au tableau des lettres jouées return false ; } } /** * Génère un mot à partir d'un grand dictionnaire (enfin en principe). * * @return le mot généré. */ private char[] generateSecretWord() { Random random = new Random(); byte grain = (byte) random.nextInt(Mots.dictionarysize); char[] word = Mots.dictionary[grain].toUpperCase().toCharArray(); return word ; } private boolean wordIsFound() { for(byte i = 0 ; i < this.wordsize ; i++){ //Parcours du "secretword" if(!this.foundletters[i]){ //Si une lettre n'est pas trouvé return false ; } } return true ; } //Affichage public String toString() { return "" ; } //Tests public static void main(String[] args){ char[] test = {'E','O','M','I','E','D','A','Z','N','L','C','R','P','H','T','S'}; byte size = (byte) test.length ; boolean status ; Partie game = new Partie(); System.out.println("Trick > " + String.valueOf(game.secretword) + "\n"); for(byte i = 0 ; i < size && !game.gameIsEnding() ; i++){ System.out.println("Essais restants : " + game.getRemainingTry()); status = game.isAlreadyEntries(test[i]); for(byte l = 0 ; l < game.wordsize ; l++){ //Parcours du "secretword" if(game.foundletters[l] == true){ System.out.print(game.getSecretWord()[l] + " "); }else{ System.out.print("_ "); } } System.out.println(""); //Lisibilité //System.out.println("Lettres : " + game.entriesletters); } System.out.println("Essais restants : " + game.getRemainingTry()); } }