/***************************  SpielBaum.java  *********************************/

/** Klasse SpielBaum mit der geschachtelten Klasse Stellung
 *  und den Datenfeldern typ, stellung, first, next
 *  und der Methode minmax.
 */

public class SpielBaum {

  class Stellung {}          // Platzhalter fuer Definition der Klasse Stellung 
  Stellung stellung;         // Datenfeld Spielstellung
  boolean  maxtyp;           // true, falls Max-Knoten; false, falls Min-Knoten
  SpielBaum first;           // Verweis auf aeltesten Sohn 
  SpielBaum next;            // Verweis auf naechstjuengeren Bruder

  public int statisch(){     // Platzhalter fuer Algorithmus zur Bewertung
    return 0;                // des Knotens aufgrund des Datenfelds stellung 
  }

  public int minmax () {                          // wertet Spielbaum aus
    SpielBaum bruder;                             // Hilfsverweis
    int bruderwert, best;                         // Hilfsvariable

    if (first == null)                            // falls Blatt,
        return statisch();                        // werte statisch aus
    else {                                        // falls kein Blatt,
        if (maxtyp) best = Integer.MIN_VALUE;     // je nach Knotentyp 
               else best = Integer.MAX_VALUE;     // setze initialen Wert fest

        bruder = first;                           // beginne bei aeltestem Sohn,
        while (bruder != null) {                  // solange es Soehne gibt,
          bruderwert = bruder.minmax();           // bestimme Wert des Knotens
          if ((( maxtyp) && (bruderwert>best))||  // falls Verbesserung
              ((!maxtyp) && (bruderwert<best)))   // beobachtet wurde,
              best = bruderwert;                  // merke Verbesserung
          bruder = bruder.next;                   // gehe zum naechsten Bruder
        }
    }
    return best;                                  // liefere Wert zurueck
  }
}
