Wie erstelle ich im Java Simple Client andere Strategien?

Frequently Asked Questions
Administrator
Administrator
Beiträge: 18
Registriert: Fr 11. Mär 2011, 17:01

Wie erstelle ich im Java Simple Client andere Strategien?

Beitragvon Administrator » Mi 16. Mär 2011, 16:58

In der Version des Java SimpleClients von der Software Challenge Homepage sind bereits zwei Strategien implementiert.
Das sind die RandomLogic (Standardmäßig benutzt) und die KaraLogic.

1. Erstellen einer neuen Strategie
Die einfachste Möglichkeit ist, die RandomLogic zu kopieren und umzubenennen (alle Vorkommen von RandomLogic durch den neuen Klassennamen ersetzen).
Der Vollständigkeit halber hier noch das Vorgehen bei einer komplett neuen Klasse:

a) Erstellt eine neue Klasse (z.B. MyLogic), die das Interface IGameHandler implementiert.

Code: Alles auswählen

public class MyLogic implements IGameHandler {
  private Starter starter;
  private GameState gameState;
  private Player player;


b) Erstellt einen Konstruktor, der eine Instanz des Starters erhält. Diese wird später noch gebraucht.

Code: Alles auswählen

public MyLogic(Starter starter) {
  this.starter = starter;
}


c) Implementiert die 5 Interface-Methoden.

Code: Alles auswählen

@Override
public void gameEnded(GameResult result, PlayerColor color, String errorMessage) {
  // Hier muss nichts getan werden
}

@Override
public void onUpdate(Player player, Player otherPlayer) {
  // Der Spieler wurde aktualisiert
  this.player = player;
}

@Override
public void onUpdate(GameState gameState) {
  // Ein neuer Spielstatus, d.h. etwas ist geschehen. Deshalb
  // alles aktualisieren.
  this.gameState = gameState;
  this.player = gameState.getCurrentPlayer();
}

@Override
public void sendAction(Move move) {
  // Einen Zug an den Server senden
  starter.sendMove(move);
}

@Override
public void onRequestAction() {
  // Ich soll einen Zug machen
  Move move;
  // ... Hier muss die Logik rein, die einen Zug findet.
  sendAction(move);
}


2. Die Strategie benutzen
Damit die Strategie benutzbar ist, muss sie in der LogicFactory eingetragen werden. In dem enum sind bereits die Logiken RANDOM und KARA_SIMPLE eingetragen. Mit dem Eintrag DEFAULT lässt sich festlegen, welche Logik standardmäßig ausgeführt wird. Tragt hier eure neue Strategie ebenfalls ein.

Code: Alles auswählen

public enum LogicFactory {
  MY_LOGIC(MyLogic.class),
  ...
}


Nun kann euer Client mit der neuen Strategie spielen, indem ihr ihn mit dem Startparameter "-s MY_LOGIC" startet.