0e4fb5d828
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.
61 lines
1.4 KiB
C#
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;
|
|
}
|
|
} |