Beispiel #1
0
    private bool TrySilence(out Direction direction, out int moves)
    {
        direction = Direction.E;
        moves     = 0;

        if (_gameState.SilenceAvailable == false ||
            MySubmarine.TrackingService.LostHealth == 0)
        {
            return(false);
        }

        var possibleSilenceMoves = SilenceAction.ComputeSilenceActions(MySubmarine.Position, MySubmarine.VisitedPositions);

        var bestScore       = -1;
        var bestSilenceMove = (Direction.E, 0, MySubmarine.Position);

        Player.Debug($"{possibleSilenceMoves.Count} possibleSilenceMoves");

        foreach (var currentSilenceMove in possibleSilenceMoves)
        {
            Player.Debug($"Evaluate {currentSilenceMove}");

            var myPossiblePositions = MySubmarine.TrackingService.PossiblePositions;
            var lastMoveAction      = MySubmarine.TrackingService.LastMoveAction;
            var trackingService     = new TrackingService(myPossiblePositions, lastMoveAction);

            trackingService.Track(new SilenceAction(currentSilenceMove.Item1, currentSilenceMove.Item2));

            var score = trackingService.PossiblePositions.Count;

            if (score > bestScore)
            {
                bestScore       = score;
                bestSilenceMove = currentSilenceMove;

                Player.Debug($"bestSilenceMove: {bestSilenceMove} ({score})");
            }
        }

        direction = bestSilenceMove.Item1;
        moves     = bestSilenceMove.Item2;

        return(true);
    }
    private void TrackSilenceAction()
    {
        var newPossiblePositions = new HashSet <Position>();
        var visitedPositions     = new HashSet <Position>();

        var excludeDirection = Player.OppositeDirection[LastMoveAction.Direction];

        foreach (var pos in _possiblePositions)
        {
            var possibleSilenceActions = SilenceAction.ComputeSilenceActions(pos, visitedPositions)
                                         .Where(silenceAction => silenceAction.Item1 != excludeDirection)
                                         .ToList();

            foreach (var possibleSilenceAction in possibleSilenceActions)
            {
                newPossiblePositions.Add(possibleSilenceAction.Item3);
            }
        }

        _possiblePositions = newPossiblePositions;
    }