Fix: Improve handleAction logic in GameEngine

Refs #118
This commit is contained in:
Julian Kropff
2026-04-19 19:21:44 +02:00
parent 215e7e2cae
commit 621843167e
@@ -1,6 +1,9 @@
package ch.unibas.dmi.dbis.cs108.casono.server.domain.game.engine;
import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.action.Action;
import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.action.ActionType;
import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.player.Player;
import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.player.PlayerId;
import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.rules.RuleEngine;
import ch.unibas.dmi.dbis.cs108.casono.server.domain.game.state.GameState;
@@ -80,12 +83,38 @@ public class GameEngine {
*/
public void handleAction(GameState state, Action action) {
if (action.getType() != ActionType.BLIND) {
Player currentPlayer = state.getCurrentPlayer();
PlayerId actingPlayerId = action.getPlayerId();
if (currentPlayer == null || actingPlayerId == null) {
throw new RuntimeException("Invalid turn state");
}
if (!state.isAllowOutOfTurn() && !currentPlayer.getId().equals(actingPlayerId)) {
throw new RuntimeException("Not your turn");
}
Player actingPlayer = state.getPlayer(actingPlayerId);
if (actingPlayer.isFolded()) {
throw new RuntimeException("Player already folded");
}
if (actingPlayer.isAllIn()) {
throw new RuntimeException("Player is all-in");
}
}
// 1.Check the rules
ruleEngine.validate(state, action);
// 2. Perform action
action.execute(state);
if (action.getType() != ActionType.BLIND) {
state.markActedThisRound(action.getPlayerId());
}
// 3. Next turn
turnManager.nextPlayer(state);