public void StartGame(string playerId) { lock (_lock) { switch (State) { case GameState.IsRunning: throw new KickermatException("The Kickermat is already playing"); case GameState.IsPaused: throw new KickermatException("The current game is paused"); case GameState.NoGame: if (_playerService.Players.TryGetValue(playerId, out var player)) { CurrentPlayer = player; CurrentPlayer.Start(); State = GameState.IsRunning; return; } throw new KickermatException( $"Cannot start game: Player {playerId} does not exist"); } } }