import Prog1Tools.IOTools;

/** Dieses Programm spielt den Kandidaten fuer
ein Mastermind-Quiz bzgl. einer vierstelligen Zahl */
public class Masterguess {

  /** In dieser Klasse wird ein Rateversuch
   abgespeichert */
  public static class Versuch {
    public int[] ziffern;
    public int direkt;
    public int indirekt;
  }

  /** Teste, ob eine gegebene Zahl mit einem alten Rateversuch
   vereinbar ist */
  public static boolean passt(int[] ziffern,Versuch v) {
    int direkt=0;
    int indirekt=0;
    for (int i=0; i<4; i++)
      for (int j=0; j<4; j++)
        if (ziffern[i]==v.ziffern[j]) {
          if (i==j)
            direkt++;
          else
            indirekt++;
        }
    return (direkt==v.direkt && indirekt==v.indirekt);
  }

  /** Hauptprogramm */
  public static void main(String[] args) {
    // Initialisierung
    Versuch[] versuche=new Versuch[10];
    for (int i=0; i<10; i++)
      versuche[i]=new Versuch();
    int nr=0; // Versuch Nr.
    // Rateversuche
    for (int z=0; z<=9999 && nr<10; z++) {
      // Finde eine gueltige Zahl
      int[] ziffern=Mastermind.bereiteAuf(z);
      if (ziffern==null) // keine gueltige Zahl
        continue;
      // Teste sie bzgl. der alten Versuche
      boolean moeglich=true;
      for (int i=0; i<nr; i++)
        moeglich=moeglich & passt(ziffern,versuche[i]);
      if (!moeglich)
        continue;
      // Starte einen Rateversuch
      System.out.println("Versuch Nr. "+(nr+1)
                         +": "+Mastermind.zahl(ziffern));
      versuche[nr].ziffern=ziffern;
      versuche[nr].direkt=
        IOTools.readInteger("  direkte Treffer: ");
      versuche[nr].indirekt=
        IOTools.readInteger("indirekte Treffer: ");
      // Teste, ob die Zahl erraten wurde
      if (versuche[nr].direkt==4) {
        System.out.println("Das war's");
        break;
      }
      // Andernfalls starte einen neuen Versuch
      nr++;
    }
  }
}
