Files
Jonas 0e4fb5d828 Add bot play, replay creation, and move phrases
Create replay games when a match ends (win or draw) and include ReplayGameCode in the GameEnded payload; adjust deletion timing to keep the replay longer and clean up original games sooner. Update game deletion logic to only destroy non-running games and schedule immediate deletion for quick timeouts. Add optional local bot support (botPlayer2 flag) with automated random-delayed moves and a UI switch in the game creation menu; expose botPlayer2 in GameSettings and LocalMode defaults. Introduce RandomPlaceMessage utility to generate varied turn descriptions and integrate it into LocalGame and OnlineGame. Also include a minor whitespace fix in Game.cs.
2026-03-12 23:20:05 +01:00

61 lines
1.4 KiB
C#

using API.Models.DataClasses;
namespace API.Models.Game;
public enum GameState
{
Lobby,
Running,
Ended
}
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);
public bool AddPlayer(Player player)
{
if(Players.Count >= 2)
return false;
player.PlayerTag = Players.Count + 1;
Players.Add(player);
if (Players.Count == 2)
{
StartGame();
}
return true;
}
public void RemovePlayer(string playerConnectionId)
{
Players.RemoveAll(x => x.ConnectionId == playerConnectionId);
}
public Player? GetPlayerByConnectionId(string playerConnectionId)
{
return Players.FirstOrDefault(x => x.ConnectionId == playerConnectionId);
}
public Player? GetPlayerByTag(int playerTag)
{
return Players.FirstOrDefault(x => x.PlayerTag == playerTag);
}
public void StartGame()
{
State = GameState.Running;
}
public void EndGame()
{
State = GameState.Ended;
}
}