Skip to content

Commit 51eedef

Browse files
committed
fix(player): simplify IGameHandler
1 parent 8bcdce0 commit 51eedef

File tree

3 files changed

+18
-47
lines changed

3 files changed

+18
-47
lines changed

player/src/main/sc/player2021/logic/Logic.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,43 +5,42 @@
55
import sc.api.plugins.TwoPlayerGameState;
66
import sc.framework.plugins.Player;
77
import sc.player.IGameHandler;
8-
import sc.plugin2021.*;
8+
import sc.plugin2021.GameState;
9+
import sc.plugin2021.Move;
910
import sc.plugin2021.util.GameRuleLogic;
1011
import sc.shared.GameResult;
1112

12-
import java.util.List;
1313
import java.util.ArrayList;
14+
import java.util.List;
1415

1516
/**
1617
* Das Herz des Clients:
1718
* Eine sehr simple Logik, die ihre Zuege zufaellig waehlt,
1819
* aber gueltige Zuege macht.
19-
*
20+
* <p>
2021
* Ausserdem werden zum Spielverlauf Konsolenausgaben gemacht.
2122
*/
2223
public class Logic implements IGameHandler {
2324
private static final Logger log = LoggerFactory.getLogger(Logic.class);
2425

2526
/** Aktueller Spielstatus. */
2627
private GameState gameState;
27-
/** Aktueller eigener Spieler. */
28-
private Player currentPlayer;
2928

30-
public void gameEnded(GameResult data, String errorMessage) {
29+
public void onGameOver(GameResult data, String errorMessage) {
3130
log.info("Das Spiel ist beendet, Ergebnis: {}", data);
3231
}
3332

3433
@Override
3534
public Move calculateMove() {
3635
long startTime = System.currentTimeMillis();
37-
log.info("Es wurde ein Zug angefordert.");
36+
Player player = gameState.getCurrentPlayer();
37+
log.info("Es wurde ein Zug von {} angefordert.", player);
38+
3839
List<Move> possibleMoves = new ArrayList<>(GameRuleLogic.getPossibleMoves(gameState));
39-
return possibleMoves.get((int) (Math.random() * possibleMoves.size()));
40-
}
40+
Move move = possibleMoves.get((int) (Math.random() * possibleMoves.size()));
4141

42-
@Override
43-
public void onUpdate(Player player, Player otherPlayer) {
44-
currentPlayer = player;
42+
log.info("Sende {} nach {}ms.", move, System.currentTimeMillis() - startTime);
43+
return move;
4544
}
4645

4746
@Override

sdk/src/player/sc/player/IGameHandler.kt

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,18 @@ import sc.shared.GameResult
1212
*/
1313
interface IGameHandler {
1414

15-
/**
16-
* Wird aufgerufen, wenn Spieler aktualisiert werden.
17-
*
18-
* @param player eigener Spieler
19-
* @param otherPlayer anderer Spieler
20-
*/
21-
fun onUpdate(player: Player, otherPlayer: Player)
22-
2315
/** Wird aufgerufen, wenn sich das Spielbrett ändert. */
2416
fun onUpdate(gamestate: TwoPlayerGameState<*>)
2517

26-
/**
27-
* Wird aufgerufen, um die Zuganfrage des Servers zu beantworten
28-
*/
18+
/** Wird aufgerufen, um die Zuganfrage des Servers zu beantworten. */
2919
fun calculateMove(): IMove
3020

3121
/**
3222
* Wird aufgerufen, wenn das Spiel beendet ist.
3323
*
3424
* @param data Das Spielergebnis
35-
* @param errorMessage Optionale Fehlernachricht
25+
* @param errorMessage Eventuelle Fehlernachricht
3626
*/
37-
fun gameEnded(data: GameResult, errorMessage: String?)
27+
fun onGameOver(data: GameResult, errorMessage: String?)
3828

3929
}

sdk/src/player/sc/player/PlayerClient.kt

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,16 @@ import org.slf4j.LoggerFactory
44
import sc.api.plugins.*
55
import sc.framework.plugins.protocol.MoveRequest
66
import sc.networking.clients.AbstractLobbyClientListener
7-
import sc.networking.clients.IControllableGame
8-
import sc.networking.clients.ILobbyClientListener
97
import sc.networking.clients.LobbyClient
10-
import sc.protocol.responses.GamePreparedResponse
118
import sc.protocol.responses.ProtocolErrorMessage
129
import sc.protocol.responses.ProtocolMessage
1310
import sc.shared.GameResult
14-
import sc.shared.WelcomeMessage
1511
import java.net.ConnectException
16-
import java.util.ServiceLoader
1712
import kotlin.system.exitProcess
1813

1914
/**
20-
* Eine abstrakte Implementation des [ILobbyClientListener].
21-
* Hier sind alle Methoden implementiert, die unabhängig von der Logik der Clients der Spieler sind.
15+
* Eine Implementation des [AbstractLobbyClientListener],
16+
* um die Server-Kommunikation mit der Logik der Spieler zu verbinden.
2217
*/
2318
class PlayerClient(
2419
host: String,
@@ -46,16 +41,11 @@ class PlayerClient(
4641
/** Current room of the player. */
4742
private lateinit var roomId: String
4843

49-
/** The team the client belongs to. Needed to connect client and player. */
50-
var teamName: String? = null
51-
private set
52-
5344
/** Called for any new message sent to the game room, e.g., move requests. */
5445
override fun onRoomMessage(roomId: String, data: ProtocolMessage) {
5546
this.roomId = roomId
5647
when (data) {
5748
is MoveRequest -> sendMove(handler.calculateMove())
58-
is WelcomeMessage -> teamName = data.color
5949
}
6050
}
6151

@@ -76,15 +66,7 @@ class PlayerClient(
7666
override fun onNewState(roomId: String, state: IGameState) {
7767
val gameState = state as TwoPlayerGameState<*>
7868
logger.debug("$this got a new state $gameState")
79-
80-
teamName?.let { teamName ->
81-
if (gameState.currentTeam.name == teamName) {
82-
handler.onUpdate(gameState.currentPlayer, gameState.otherPlayer)
83-
} else {
84-
handler.onUpdate(gameState.otherPlayer, gameState.currentPlayer)
85-
}
86-
handler.onUpdate(gameState)
87-
}
69+
handler.onUpdate(gameState)
8870
}
8971

9072
/** Start the LobbyClient [client] and listen to it. */
@@ -107,7 +89,7 @@ class PlayerClient(
10789
override fun onGameOver(roomId: String, data: GameResult) {
10890
logger.info("$this: Game over with result $data")
10991
isGameOver = true
110-
handler.gameEnded(data, error)
92+
handler.onGameOver(data, error)
11193
}
11294

11395
fun joinPreparedGame(reservation: String) {

0 commit comments

Comments
 (0)