Add turn tracking and enforce turn order

Introduce CurrentTurn to Game (default 1) and expose it via GameInformationDto. Update GameManager to include CurrentTurn in the GameInformation payload, validate that a player can only Drop when it is their turn, and toggle CurrentTurn between 1 and 2 after a successful move. Also use a safe fallback (0) when game is null.
This commit is contained in:
Jonas
2026-03-05 17:33:56 +01:00
parent 3cb2a6c159
commit bec5df7e88
3 changed files with 9 additions and 1 deletions
+1
View File
@@ -14,6 +14,7 @@ public class Game(Coordinates gFs, SixDigitInt gameCode)
public string Id { get; init; } = Guid.NewGuid().ToString();
public SixDigitInt GameCode { get; } = gameCode;
public List<Player> Players { get; set; } = new();
public int CurrentTurn { get; set; } = 1;
public GameState State { get; private set; } = GameState.Lobby;
public GameField Field { get; } = new(gFs);
+1
View File
@@ -6,5 +6,6 @@
public List<Player> Players { get; set; }
public GameState? State { get; set; }
public int[,] CurrentField { get; set; }
public int CurrentTurn { get; set; }
}
}
+7 -1
View File
@@ -43,7 +43,8 @@ public class GameManager(IGameRepository gameRepository, IHubContext<GameHubSock
{
Players = game?.Players,
CurrentField = game?.Field.CurrentField,
State = game?.State
State = game?.State,
CurrentTurn = game?.CurrentTurn ?? 0
};
await hubContext.Clients.Client(playerConnectionId).SendAsync("GameInformation", gameInfoDto);
@@ -57,6 +58,9 @@ public class GameManager(IGameRepository gameRepository, IHubContext<GameHubSock
if (player == null)
return;
if(game.CurrentTurn != player.PlayerTag)
return;
var result = game.Field.Drop(column, player.PlayerTag);
if (result != DropResult.Placed)
@@ -92,6 +96,8 @@ public class GameManager(IGameRepository gameRepository, IHubContext<GameHubSock
ScheduleGameDeletion(game.Id, TimeSpan.FromSeconds(5));
}
game.CurrentTurn = game.CurrentTurn == 1 ? 2 : 1;
}
public Task DisconnectedPlayer(string playerConnectionId)