Ich bin noch anfänger in java und hab versucht das spiel "mastermind" zu schreiben, saß echt lange dran doch nun komm ich an 2 stellen nicht mehr weiter.
ich will das programm so erweitern das ich am ende eines erfolgreichen versuchs gefragt werde, ob ich einen weiteren durchlauf spielen möchte.
ausserdem soll nach jedem durchlauf folgende information erscheinen:
- letztes spiel: x Versuche
- anzahl der spiele: y Spiele
- Durchschnittliche Versuche: z
Dabei soll ein Spiel, bei dem nicht die richtige kombination gefunden wurde, mit 12 versuchen gewertet werden.
ich hoffe jemand kann mir weiterhelfen
Alles anzeigen
ich will das programm so erweitern das ich am ende eines erfolgreichen versuchs gefragt werde, ob ich einen weiteren durchlauf spielen möchte.
ausserdem soll nach jedem durchlauf folgende information erscheinen:
- letztes spiel: x Versuche
- anzahl der spiele: y Spiele
- Durchschnittliche Versuche: z
Dabei soll ein Spiel, bei dem nicht die richtige kombination gefunden wurde, mit 12 versuchen gewertet werden.
ich hoffe jemand kann mir weiterhelfen

Quellcode
- /** Wandle die Ziffern einer Zahl in einen String um */
- public static String zahl(int[] z) {
- String res=""; // Hier steht das Ergebnis
- for (int i=0;i<4;i++) // Reihe die Zahlen aneinander
- res=z[i]+res;
- return res;
- }
- /** Zerteilt eine ganze positive Zahl 0<=z<=9999 in
- ihre vier Ziffern */
- public static int[] ziffern(int z) {
- int[] res=new int[4];
- for (int i=0;i<4;i++) {
- res[i]=z%10; // Berechne die rechte Ziffer
- z=z/10; // Schiebe nach rechts
- }
- return res;
- }
- /** Zerteilt eine ganze positive Zahl 0<=z<=9999 in
- vier Ziffern. Wenn die Zahl die Voraussetzungen fuer
- die Mastermind-Spielregeln nicht erfuellt (keine
- zwei Ziffern sind gleich), wird null zurueckgegeben */
- public static int[] bereiteAuf(int z) {
- // Teste zuerst, ob die Zahl im richtigen
- // Groessenbereich liegt
- if (z<0 || z>9999)
- return null;
- // Nun teile die Zahl auf
- int[] res=ziffern(z);
- // Nun teste, ob sich zwei Ziffern gleichen
- for (int i=0;i<4;i++)
- for (int j=i+1;j<4;j++)
- if (res[i]==res[j])
- return null;
- // Andernfalls gib das Ergebnis zurueck
- return res;
- }
- /** Finde eine Zahl zwischen 0 und 9999, die die
- Voraussetzungen fuer das Spiel erfuellt. */
- public static int[] findeZahl() {
- int[] res=null; // hier steht das Ergebnis
- while(res==null) {
- int zahl=(int)(9999*Math.random());
- res=bereiteAuf(zahl);
- }
- // Wenn die Schleife verlassen wurde, ist eine passende
- // Zahlenkombination gefunden
- return res;
- }
- /** Finde heraus, ob alle Ziffern uebereinstimmen */
- public static boolean treffer(int[] original,int[] versuch) {
- for (int i=0;i<4;i++)
- if (original[i]!=versuch[i])
- return false;
- return true;
- }
- /** Finde heraus, wie viele direkte und indirekte Treffer
- es gibt */
- public static String auswerten(int[] original,int[] versuch) {
- int direkt=0; // Zahl der direkten Treffer
- int indirekt=0; // Zahl der indirekten Treffer
- for (int i=0;i<4;i++)
- for (int j=0;j<4;j++)
- if (original[i]==versuch[j]) {
- if (i==j)
- direkt++;
- else
- indirekt++;
- }
- return
- "Direkte Treffer: "+direkt+" "+
- "Indirekte Treffer: "+indirekt;
- }
- /** Lies eine gueltige Zahl von der Tastatur ein */
- public static int[] liesZahl(int versuch) {
- int n=IOTools.readInteger("Versuch Nr. "+versuch+": ");
- int[] res=bereiteAuf(n);
- while (res==null) {
- System.out.println("KEINE GUELTIGE ZAHL!");
- n=IOTools.readInteger("Versuch Nr. "+versuch+": ");
- res=bereiteAuf(n);
- }
- return res;
- }
- /** Hauptprogramm */
- public static void main(String[] args) {
- int[] original=findeZahl();
- boolean erraten=false;
- System.out.println("MASTERMIND\n");
- for (int i=1;i<=10;i++) { // Schleifenbeginn
- if (i <10)
- System.out.println("\nSie haben noch "+(10-i+1)+
- " Versuch(e).");
- else {
- System.out.println("\nSie haben noch einen Versuch");
- }
- int[] versuch=liesZahl(i);
- if (treffer(original,versuch)) { // Erraten
- System.out.println("Hervorragend! Sie haben die Zahl im "
- +i+". Versuch erraten.");
- erraten=true;
- break;
- }
- System.out.println("Leider falsch geraten.\n"+
- auswerten(original,versuch));
- } // Schleifenende
- if (!erraten) {
- System.out.println("\nViel Glueck beim naechsten Mal!");
- System.out.println("Die richtige Zahl waere "+
- zahl(original)+" gewesen.");
- }
- }
- }