import java.util.Random;
public class GuessNumber {
private static Random rnd = new Random(System.currentTimeMillis());
private String[] emotionStr = { "Denkst Du ich bin doof?", "Wofür hälts Du mich?", "Wohnst Du hinter dem Mond?" };
private int wandtedNum = 0; // gesuchte Zahl
private int cntTry = 0; // zählt die Versuche
private int lowestTriedNum = Integer.MIN_VALUE; // kleinster Versuch
private int highestTriedNum = Integer.MAX_VALUE; // höchtster Versuch
private String reply = ""; // Antworttext
/**
* Erzeugt eine zufällige Nummer.
*
* @param maxNum
* Obergrenze der zu suchenden Nummber.
*/
public void createWantedNumber(int maxNum) {
wandtedNum = rnd.nextInt(maxNum) + 1;
cntTry = 0;
reply = "";
lowestTriedNum = Integer.MIN_VALUE;
highestTriedNum = Integer.MAX_VALUE;
}
/**
* @return Anzahl der Versuche.
*/
public int getCntTry() {
return cntTry;
}
/**
* Erzeugt einen zufällige Emotion und die Belehrung. Die angebotenen Emotionen
* sind im Array {@link #emotionStr} enthalten.
*
* @param instruction
* @return Emotionaler Antworttext.
*/
private String getEmotion(String instruction) {
return emotionStr[rnd.nextInt(emotionStr.length)] + "\n Ich hatte dir bereits gesagt, dass " + instruction;
}
/**
* @return Antwort auf den letzten Versuch.
*/
public String getReply() {
return reply;
}
/**
* Zählt die Versuche hoch und generiert den Antworttext.
*
* @param tryNum
* Die zu probierende Nummer.
* @return wahr bei Erfolg sonst falsch
*/
public boolean tryNumber(int tryNum) {
cntTry++;// count tries
reply = "";
if (tryNum == wandtedNum) { // Nummer gefunden
reply = "Du hast die Zahl erraten!";
return true;
}
if (tryNum < wandtedNum) { // Nummer zu klein
if (lowestTriedNum > tryNum) // dummer zu kleiner Versuch
reply = getEmotion(lowestTriedNum + " zu klein ist!");
else {
lowestTriedNum = tryNum;
reply = "Die Zahl ist zu klein!";
}
} else { // Nummer zu groß
if (highestTriedNum < tryNum) // dummer zu großer Versuch
reply = getEmotion(highestTriedNum + " zu groß ist!");
else {
highestTriedNum = tryNum;
reply = "Die Zahl ist zu groß!";
}
}
return false;
}
}