Logo der Hochschule  
 aufwärts

Objektorientierte Programmierung (MI2),   07.06.2017

Aufgabe 21:  

  1. Schreiben Sie einen verbesserten Computer­spieler
    public class SuperPlayer extends SimplePlayer
    
  2. Über­schreiben Sie die Methode findMove in der Weise, dass Sie den Spielbaum bis zur Tiefe 5 auswerten und so den nächsten Zug bestimmen. Die Methode findMove und die zugehörige rekursive Auswertungsfunktion eval finden Sie auf der Webseite http://www.inf.fh-flensburg.de/lang/algorithmen/graph/spielbaum.htm.
  3. Modifizieren Sie die Funktionen findMove und eval in der Weise, dass Sie als Iterator den ModIntIterator aus Aufgabe 14 verwenden, um alle Spalten des Spielbretts zu durchlaufen. Bilden Sie dann innerhalb der While-Schleife aus der jeweiligen Spalte und der Farbe des Spielers einen Move. Führen Sie den Move aber nur dann aus, wenn isValidMove erfüllt ist (Aufgabe 20).
  4. Weil wir nun Spielzüge vorausberechnen, führen wir in der Klasse Configuration eine Methode setMove ein, die einen Spielzug auf dem Spielbrett ausführt, aber nicht die Observer benachrichtigt. Der Spielzug wird ja nur voraus­berechnet und nicht tatsächlich ausgeführt. Die Methode applyMove dagegen ruft setMove auf und benachrichtigt anschließend die Observer.
  5. Wir brauchen noch eine Funktion rate, mit der wir Spiel­stellungen bewerten. Wir bewerten die Spiel­stellungen nicht mit +1 bzw. -1, wenn der Spieler, der am Zug ist, gewonnen hat bzw. der andere, sondern wir machen die Bewertung von der Anzahl der bis dahin ausgeführten Spielzüge abhängig. So gewinnen wir, wenn wir gewinnen, auf dem schnellsten Weg.

    Die Funktion rate ist nur von der Spiel­stellung abhängig, daher kommt sie in die Klasse Configuration.

    public int rate()
    {
        int m=Board.ROWS*Board.COLS;  // maximale Anzahl von Zügen
        if (board.haswon==turn)
            return m+1-board.moves;
        if (board.haswon==1-turn)
            return -(m+1-board.moves);
        return 0;
    }
    

     

  6. Ersetzen Sie in der main-Funktion den SimplePlayer durch den SuperPlayer.

 

Aufgabe 22:  

Lassen Sie zwei SimplePlayer gegeneinander spielen:

public static void main(String[] args)
{
    Configuration config=new Configuration();
    GameFrame f1=new GameFrame();
    //GameFrame f2=new GameFrame();
    Player f2=new SimplePlayer();
    Player f3=new SimplePlayer();
    //f1.pnl1.setColor(0);
    f1.pnl1.setConfiguration(config);
    f2.setColor(0);
    f2.setConfiguration(config);
    f3.setColor(1);
    f3.setConfiguration(config);
    config.reset();
}

Es dauert ein bisschen; das Spielbrett wird erst aktualisiert, nachdem das Spiel zu Ende ist.

Ersetzen Sie in der main-Funktion einen der SimplePlayer durch den SuperPlayer.

 

Bearbeiten im Labor ab 07.06.2017

 

 

 

up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   ©  
Valid HTML 4.01 Transitional