package org.pixelgaffer.turnierserver.gamelogic;
import java.io.IOException;
import org.pixelgaffer.turnierserver.gamelogic.interfaces.Ai;
import org.pixelgaffer.turnierserver.gamelogic.interfaces.AiObject;
import org.pixelgaffer.turnierserver.gamelogic.interfaces.Game;
import org.pixelgaffer.turnierserver.gamelogic.interfaces.GameState;
/**
* @param <E>
* Das AiObject
* @param <R>
* Die Antwort der Ai
*/
public abstract class GameStateLogic<E extends AiObject, R> extends GameLogic<E, R> {
/**
* Der Gamestate
*/
protected GameState<?, R> gamestate;
/**
* Schickt die Ă„nderungen des GameStates an alle AIs
*
* @throws IOException
*/
protected final void sendGameState() throws IOException {
for (Ai ai : game.getAis()) {
if (!getUserObject(ai).lost) {
// logger.debug("Sende tollen Gamestate an KI " + ai.getId());
sendGameState(ai);
// logger.debug("Habe tollen Gamestate gesendet!");
}
}
}
/**
* Schickt den Gamestate an eine Ai
*
* @param ai
* Die Ai, an die der Gamestate geschickt werden soll
*/
protected final void sendGameState(Ai ai) throws IOException {
sendToAi(gamestate.getChanges(ai), ai);
gamestate.clearChanges(ai);
}
protected abstract GameState<?, R> createGameState();
@Override
public void startGame(Game game) {
gamestate = createGameState();
super.startGame(game);
}
}