Logo der Hochschule  
 aufwärts

Objektorientierte Programmierung (MI2),   31.05.2017

Aufgabe 19:  

  1. Damit wir bis zum Ende des Semesters nicht in Zeitnot geraten, hier die Implementierung der Erkennung von Vierern, die ich in der Vorlesung skizziert hatte. Kopieren Sie diese beiden Methoden in die Klasse Board.
    // liefert true, wenn mindestens vier gleichfarbige
    // Spielsteine von der Position p des Spielbretts aus
    // gesehen in Richtung dir und in entgegengesetzter
    // Richtung dir.neg() zusammengenommen liegen
    public boolean fourInDirection(Position p, Position dir)
    {
        int f=getColor(p);
        int count=-1;
        for (int i=0; i<2; i++)
        {
            Position q=p;
            while (isValidPosition(q) && getColor(q)==f)
            {
                count++;
                q=q.add(dir);
            }
            dir=dir.neg();
        }
        return count>=4;
    }
    
    // liefert true, wenn von der Position p des Spielbretts
    // aus gesehen mindestens vier gleichfarbige Spielsteine
    // in irgendeiner Richtung liegen
    public boolean fourInAnyDirection(Position p)
    {
        return
        fourInDirection(p, new Position(1, 0)) ||
        fourInDirection(p, new Position(0, 1)) ||
        fourInDirection(p, new Position(1, 1)) ||
        fourInDirection(p, new Position(1, -1));
    }
    

     

  2. Rufen Sie die Methode fourInAnyDirection in der Methode applyMove der Klasse Board auf, nachdem der Spielzug auf dem Spielbrett ausgeführt worden ist, und setzen Sie ein neu eingeführtes Attribut haswon auf 0 oder auf 1, je nach dem, welche Farbe gewonnen hat. Initialisieren Sie das Attribut haswon mit -1.
  3. Schreiben Sie in der Klasse Board eine Methode gameOver, die true zurückgibt, wenn ein Spieler gewonnen hat oder wenn die Anzahl der Spielzüge den Wert ROWS*COLS erreicht hat. Verlagern Sie das Zählen der Spielzüge in die Klasse Board.

 

Aufgabe 20:  

  1. Schreiben Sie einen Computer­spieler
    public void SimplePlayer implements Player
    

    Klicken Sie auf Add unimplemented methods und implementieren Sie alle Methoden, die das Interface Player verlangt.

    Schreiben Sie eine Methode

    public Move findMove()
    

    die einen Spielzug zufällig erzeugt. Übergeben Sie diesen Spielzug an die Methode makeMove.

    Achten Sie darauf, dass kein Spielzug erzeugt wird, der in eine Spalte des Spielbretts setzt, die schon voll ist. Schreiben Sie zur Überprüfung in der Klasse Board eine Methode

    public boolean isValidMove(Move move)
    

    um dies zu verhindern.

     

  2. Ändern Sie die main-Funktion in folgender Weise:
    public static void main(String[] args)
    {
        Configuration config=new Configuration();
        GameFrame f1=new GameFrame();
        //GameFrame f2=new GameFrame();
        Player f2=new SimplePlayer();
        f1.pnl1.setColor(0);
        f1.pnl1.setConfiguration(config);
        //f2.pnl1.setColor(1);
        //f2.pnl1.setConfiguration(config);
        f2.setColor(1);
        f2.setConfiguration(config);
        config.reset();
    }
    

     

  3. Die bisherige Factory-Methode startConfiguration in der Klasse Configuration löschen Sie bitte und fügen Sie stattdessen die Methode reset ein:
    public void reset()
    {
        this.board=Board.emptyBoard();
        this.turn=0;
        this.setChanged();
        this.notifyObservers();
    }
    

    So ist es möglich, auch den Computer­spieler als Spieler 0 spielen zu lassen oder zwei Computer­spieler gegeneinander spielen zu lassen.

 

Bearbeiten im Labor ab 31.05.2017

 

 

 

up

 

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