Zahlenraten 2006 (+ EA Klasse) 2006-11-21 15:43:19 // CLASS ZAHLENRATEN // zum cheaten NEO als name eingeben hf import java.util.*; // Random Klassse einfuegen public class Zahlenraten { public static void main(String args[]) { int max = 12; // maximale Versuche int best = max + 1; // beste Versuchsanzahl, unsinnig aber egal String best_name = "COMPUTER"; // siehe oben int gc = 0; // zeahlt die gespielten Spiele // gibt Aufgabenstellung aus System.out.println(" z a h l e n r a t e n".toUpperCase()); System.out.println("Aufgabe: Finde die gesuchte Zahl zwischen 1 und 100.\n"); do { // alles ist in einer do-Scheife, damit man neue Spiele starten kann gc++; // Spielzaehlen um 1 erhoehen Random zufall = new Random(); // Zufallsgenerator starten int zahl = zufall.nextInt(100)+1; // Zufallszahl erstellen int i = 0; // zeahlt Versuche boolean handle = true; // boolean-Variable zum abbrechen String name = Ea.eingabeString("Gib bitte deinen Namen ein: ").toUpperCase(); // hier kann man den Namen eingeben if(name.equals("")) { // ueberpruefen, ob Name eingegeben System.out.println("Fehler: Du hast keinen Namen eingegeben."); name = Ea.eingabeString("Gib bitte deinen Namen ein: ").toUpperCase(); } System.out.println("Es wurde eine neue Zufallszahl generiert. Spielstart!!\n"); // Infotext - es geht los // Ausgabe der gesuchten zahl - CHEAT-MODUS ;-) if(name.equals("NEO")) { System.out.println("Gesuchte Zahl: "+zahl); name = Ea.eingabeString("Gib bitte deinen Namen ein: ").toUpperCase(); // Name nochmal eingeben } while(handle) { // Spielschleife int eingabe = (int)Ea.eingabeDouble("Bitte gib eine Zahl ein: "); // Zahlverlangen if(eingabe >= 1 && eingabe <= 100) { // ueberpruefen, ob zahl zwischen 1-100 liegt i++; // Versuchszeahler erhoehen w // User-Eingabe groesser als gesuchte zahl if(eingabe > zahl) { System.out.println("Deine Eingabe ("+eingabe+") war zu gross."); } // User-Eingabe kleiner als gesuchte zahl if(eingabe < zahl) { System.out.println("Deine Eingabe ("+eingabe+") war zu klein."); } System.out.println(); // User-Eingabe gleich gesuchte zahl if(eingabe == zahl) { if(i == 1) { // irgend ne tolle Endlosschleife, wenn man es mit einem Versuch packt System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); System.out.println("Wow! Die Zufallszahl <"+zahl+"> wurde mit dem ersten Versuch von "+name+" gefunden!"); System.out.println("Das ist nicht zu ueberbieten. Das Spiel ist beendet."); while(true) { } } System.out.println("Richtig. Die gesuchte Zahl war "+zahl+". "+i+" Versuch(e)"); // Infoausgabe handle = false; // WHILE-Schleife abbrechen } // Hieer wird untersucht, ob dies das beste Spiel war if(!handle) { if(best > i) { System.out.println("Sehr gut, "+name+"; mit "+i+" Versuchen war dies das beste Spiel!!"); best_name = name; best = i; } else { System.out.println("Dies war leider nicht das beste Spiel. Du haettest "+(best-1)+" oder weniger Versuche gebraucht um "+best_name+" zu ueberbieten. Versuchs nochmal."); } } // wegen den ganz schlechten :P if(i > max) { System.out.println("Du hast mehr als "+max+" Versuche gebraucht.\nDas Spiel ist beendet. Die gesuchte Zahl war \""+zahl+"\"."); handle = false; } } else { System.out.println("Es sind nur Zahlen zwischen 1 und 100 erlaubt."); } } } while(Ea.jaNein("\nNochmal spielen?")); // Frage, ob neues Spiel gestartet werden soll // Abspann System.out.println("\nGAME OVER\n"); // Ausgabe: GAME OVER System.out.println("Bestes Spiel: "+best+" Versuche von "+best_name); // Ausgabe: bestes Spiel System.out.println(gc+" Spiel(e)"); // Ausgabe: Anzahl der gespielten Spiele } } // CLASS EA import java.text.*; import java.io.*; /** Erzeugt eine Klasse mit Eingabe- * und formatierten Ausgabemethoden */ public class Ea { /** Gibt den Nachrichtentext aus und erfrägt einen Antwort-Text * @param nachricht ein Text, der zur Anfrage nach dem Antworttext * ausgegeben wird * @return String antwort*/ public static String eingabeString(String nachricht) /** Eingabe mit Anforderungstext*/ { System.out.print(nachricht); BufferedReader tasten = new BufferedReader(new InputStreamReader(System.in)); String antwort=new String(); try{antwort=tasten.readLine();} catch(java.io.IOException e) { System.out.println(e); } return antwort; } /** Gibt eine Frage aus und erwartet die Antworten ja oder nein * @param frage ein Text, der zur Anfrage ausgegeben * und automatisch um   " (j/n)? " ergänzt wird * @return boolean - true für ja - false für nein*/ public static boolean jaNein(String frage) /** Eingabe mit Anforderungstext*/ { String ant; do { ant=eingabeString(frage+" (j/n)? ").toUpperCase()+" "; } while (ant.charAt(0)!='J'&&ant.charAt(0)!='N'); return ant.charAt(0)=='J'; } /** Gibt den Nachrichtentext aus und erfrägt eine double-Zahl * @param nachricht ein Text, der zur Anfrage nach der Zahl * ausgegeben wird * @return double zahl*/ public static double eingabeDouble(String nachricht) /** Eingabe mit Anforderungstext*/ { System.out.print(nachricht); double h=Double.NaN; BufferedReader tasten = new BufferedReader(new InputStreamReader(System.in)); try{h=Double.parseDouble(tasten.readLine());} catch(java.io.IOException e) { System.out.println(e); } catch(NumberFormatException e) { System.out.println(e); } return h; } /** erzeugt aus zahl einen String mit der Gesamtstellenzahl * ges und der Nachkommastellenzahl nach * @param zahl zu wandelnde Zahl * @param ges Gesamtstellenzahl der Ausgabe * @param nach Anzahl der Nachkommastellen in der Ausgabe * @return String mit der formatierten Zahl*/ public static String write(double zahl,int ges, int nach) { //Nachkommastellen variabel definieren: StringBuffer fs=new StringBuffer("0"); StringBuffer ausgabe=new StringBuffer(" "); ges=Math.abs(ges);nach=Math.abs(nach); if (ges==0) ges=1; if (nach>ges-1) ges=nach+2; if (nach>0) fs.append("."); for (int h=1;h<=nach;h++)fs.append("0"); DecimalFormat Form1 = new DecimalFormat(fs.toString()); FieldPosition ganzteil=new FieldPosition(Form1.INTEGER_FIELD); Form1.format(zahl,ausgabe,ganzteil); return ausgabe.delete(0,ganzteil.getEndIndex()+nach+1-ges).toString(); } }