Пример #1
0
        public FreeActionDiceRoll(int n)
        {
            for (; n > 0; n--)
            {
                switch (D6.roll())
                {
                case 1:
                case 2:
                    ++Characters;
                    break;

                case 3:
                    ++Musters;
                    break;

                case 4:
                    ++ArmyMusters;
                    break;

                case 5:
                    ++Events;
                    break;

                case 6:
                    ++WillOfTheWests;
                    break;
                }
            }
        }
Пример #2
0
        public ShadowActionDiceRoll(int rolled, int eyesPlaced)
        {
            Eyes = eyesPlaced;
            for (; rolled > 0; rolled--)
            {
                switch (D6.roll())
                {
                case 1:
                    ++Armies;
                    break;

                case 2:
                    ++Characters;
                    break;

                case 3:
                    ++Musters;
                    break;

                case 4:
                    ++ArmyMusters;
                    break;

                case 5:
                    ++Events;
                    break;

                case 6:
                    ++Eyes;
                    break;
                }
            }
        }
Пример #3
0
        public Quest FromRivendell()
        {
            for (Turns = 1; ; Turns++)
            {
                if (AtTheGatesOfMordor())
                {
                    EnterMordor();
                    return(MordorTrack());
                }
                ShadowActionDiceRoll shadowDice = new ShadowActionDiceRoll(7 + Minions, ShadowHuntAllocated);
                int freeHuntBoxDiceCount        = 0;
                var freeDice = new FreeActionDiceRoll(FreeActionDiceCount);
                Log.Log($"Turn {Turns}: {shadowDice.Eyes} eyes, {freeDice}");

                while (freeDice.CharacterOrWills > 0 || StriderCanHide(freeDice))
                {
                    if (PromoteGandalfIfAble(freeDice))
                    {
                        // do nothing
                    }
                    else if (StriderCanHide(freeDice))
                    {
                        Revealed = false;
                        Log.Log($"  Strider hide");
                        freeDice.SpendMostUselessDie();
                    }
                    else if (Revealed)
                    {
                        Revealed = false;
                        Log.Log($"  hide");
                        freeDice.SpendCharacterOrWill();
                    }
                    else if (AtTheGatesOfMordor())
                    {
                        EnterMordor();
                        return(MordorTrack());
                    }
                    else
                    {
                        int hits = D6.CountHits(shadowDice.Eyes, 6 - freeHuntBoxDiceCount);
                        if (hits > 0)
                        {
                            var  tile        = HuntBag.DrawTile();
                            int  huntValue   = tile.Value(hits);
                            bool wasRevealed = Revealed;
                            Log.Log($"  walk {EffectiveDistanceFromRivendell + 1} {Pluralize("step", EffectiveDistanceFromRivendell + 1)} from Rivendell  - {hits} {Pluralize("hit", hits)} - {tile}");
                            FreeStrategy.Hunt(huntValue, tile.Reveal(), tile, this);
                            ++Progress;
                            bool freshlyRevealed = (!wasRevealed) && Revealed;
                            if (freshlyRevealed)
                            {
                                RevealFellowshipOutsideMordorAndResolveStrongholdTiles();
                            }
                            ++freeHuntBoxDiceCount;
                            Log.Log($"    corruption {Corruption}, {shadowDice.Eyes} eyes");
                        }
                        else
                        {
                            Progress++;
                            Log.Log($"  walk {EffectiveDistanceFromRivendell} {Pluralize("step", EffectiveDistanceFromRivendell)} from Rivendell");
                        }
                        freeDice.SpendCharacterOrWill();
                    }
                    if (IsOver())
                    {
                        return(this);
                    }
                }
            }
        }