forked from menault/TD3_DEV51_Qualite_Algo
136 lines
3.9 KiB
Java
136 lines
3.9 KiB
Java
import java.util.Random;
|
|
|
|
/**
|
|
* La classe <code>Partie</code>
|
|
*
|
|
* @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());
|
|
}
|
|
}
|