private void RemoveShark(GameState game, SharkManager shark)
 {
     shark.OnSolved -= Shark_OnSolved;
     shark.OnFailed -= Shark_OnFailed;
     shark.Dispose();
     game.Sharks.Remove(shark);
 }
        private void AddShark(GameState game)
        {
            var height             = _random.Next(0, 80);
            var wordSet            = GetWordSet(game.Sharks.Count, game.GameDto.IsEasy);
            var word               = GetRandomWord(wordSet);
            var baseSecondsToSolve = GetBaseSecondsToSolve(game.Sharks.Count, game.GameDto.IsEasy);
            var secondsToSolve     = baseSecondsToSolve + _random.Next(3, 5);
            var shark              = new SharkManager(game, word, height, secondsToSolve);

            shark.OnSolved += Shark_OnSolved;
            shark.OnFailed += Shark_OnFailed;
            game.Sharks.Add(shark);
            shark.StartTimer();
            InvokeSharkAddedEvent(game, shark);
        }
        private static SharkChangedEventArgs GetSharkChangedEventArgs(GameState game, SharkManager shark)
        {
            var sharkAddedEventArgs = new SharkChangedEventArgs
            {
                SharkDto = shark.SharkDto,
                GameId   = game?.GameDto?.Id ?? 0
            };

            return(sharkAddedEventArgs);
        }
        private void InvokeSharkAddedEvent(GameState game, SharkManager shark)
        {
            var sharkAddedEventArgs = GetSharkChangedEventArgs(game, shark);

            _gameEngineEventHandler.SharkAdded(sharkAddedEventArgs);
        }