lundi 27 avril 2015

TicTacToe vorgegebene interface->klassen aufbauen

Hallo Java-user ich habe von meinem dozenten eine aufgabenstellung erhalten die folgendermaßen lautet:

"Bauen Sie Ihr Programm so um, daß es eine eigene Klasse für die Spieler gibt, die das vorgegebene Interface
game.Player implementiert. Die beiden für das Spiel nötigen Spieler sollen zur Laufzeit erzeugt werden.
Ihr Spiel muss das vorgegebene Interface game.Game implementieren. Nutzen Sie für die Darstellung der Spielzüge
das Interface game.Move aus der Vorgabe.
Nutzen Sie das Strategy-Pattern, um den Spielerinstanzen zur Laufzeit eine konkrete Spielstrategie mit dem
Interface strategy.GameStrategy mitzugeben, nach denen die Spieler ihre Züge berechnen.
Implementieren Sie mindestens drei unterschiedliche konkrete Strategien.
Nutzen Sie als weitere Strategie die Vorgabe zum Minimax-Algorithmus (strategy.MinMaxStrategy). Damit
steht eine stets perfekt spielende Spielstrategie zur Verfügung.
Stellen Sie die jetzt vorhandenen Klassen und ihre Beziehungen in einem manuell erstellten UMLKlassendiagramm
dar.
Hinweis: Ein Spieler soll seinen nächsten Zug nur berechnen und darf nicht direkt den Spielstand (Spielbrett)
modifizieren! Dies geschieht über die Methode game.doMove() aus dem Spiel (Interface game.Game). Die
Berechnung im Spieler wird direkt an die zur Laufzeit übergebene Strategie delegiert."

folgende interfaces wurden mitgeliefert:
Java Code:

  1. package game;
  2.  
  3. import java.util.List;
  4.  
  5. public interface IGame {
  6. // Spieler X setzen
  7. void setPlayerX(IPlayer p);
  8.  
  9. // Spieler O setzen
  10. void setPlayerO(IPlayer p);
  11.  
  12. // Wer ist gerade dran?
  13. IPlayer currentPlayer();
  14.  
  15. // Welche Zuege sind noch moeglich (aka freie Felder)
  16. List<IMove> remainingMoves();
  17.  
  18. // Zug ausfuehren (Feld setzen), naechster Spieler ist "dran"
  19. void doMove(IMove m);
  20.  
  21. // Zug zuruecknehmen (Feld setzen), voriger Spieler ist "dran"
  22. void undoMove(IMove m);
  23.  
  24. // Spiel zuende?
  25. boolean ended();
  26.  
  27. // Bewertung des Zustandes aus Sicht des Players p
  28. // +1: p hat gewonnen
  29. // -1: p hat verloren
  30. // 0: Unentschieden
  31. int evalState(IPlayer p);
  32.  
  33. // Zeichne das aktuelle Feld auf der Konsole
  34. void printField();
  35. }

Java Code:

  1. package game;
  2.  
  3. public interface IMove {
  4. // Zeile auf dem Spielfeld
  5. public int getRow();
  6.  
  7. // Spalte auf dem Spielfeld
  8. public int getColumn();
  9. }

Java Code:

  1. package game;
  2.  
  3. import strategy.IGameStrategy;
  4.  
  5. public interface IPlayer {
  6. // Spielstrategie setzen
  7. void setStrategy(IGameStrategy s);
  8.  
  9. // Naechsten Zug berechnen (Delegation an Strategie!)
  10. IMove nextMove(IGame g);
  11.  
  12. // Zeichen fuer den Spieler liefern
  13. char getSymbol();
  14. }

Java Code:

  1. package strategy;
  2.  
  3. import game.IGame;
  4. import game.IMove;
  5.  
  6. public interface IGameStrategy {
  7. // Naechsten Zug berechnen
  8. IMove nextMove(IGame g);
  9. }


langer text kurze frage.
wie genau handhabe ich die List<IMove> remainingMoves(), auf meine frage heute hatte er nur gesagt dass es nicht nötig ist die interfaces anzupassen und es sei auch nicht gewollt da dann cniht weiter mit testsuiten gearbeitet werden kann. außerdem habe ich auch noch irgendwie probleme die verbindung zwischen player.nextmove und game.domove bzw undomove. im grunde soll es ja so sein dass player.nextmove um den bestmöglichen zug herrauszufinden game.domove bzw undomove braucht also etwas in der richtung:
Java Code:

  1. public IMove nextMove(IGame g) {
  2. //blabla
  3. g.doMove(irgendeinmove);
  4. //falls nicht bester move, rückgängig machen
  5. g.undoMove(letztermove);
  6.  
  7. return bestermove;
  8. }

aber wie genau gehe ich das ganze dann im mainloop an.
Java Code:

  1. while (game.ended() == false) {
  2. game.doMove(game.currentPlayer().nextMove(game));
  3. }
???
normaleweise habe ich nicht wirklich probleme mit meinen programmieraufgaben aber meistens ist es auch der fall dass man selber was zusammenbasteln darf und man nicht an methoden gebunden ist


TicTacToe vorgegebene interface->klassen aufbauen

0 commentaires:

Enregistrer un commentaire