Exemplo n.º 1
0
        public Quest MordorTrack()
        {
            for (; ; Turns++)
            {
                // int eyes = ShadowHuntAllocated + D6.CountHits(ShadowRolled, 6);
                ShadowActionDiceRoll shadowDice = new ShadowActionDiceRoll(7 + Minions, ShadowHuntAllocated);
                bool movedOrHidThisTurn         = false;
                var  freeDice    = new FreeActionDiceRoll(FreeActionDiceCount);
                int  freeHuntBox = 0;

                Log.Log($"Turn {Turns}: {shadowDice.Eyes} eyes, {freeDice}");

                while (freeDice.CharacterOrWills > 0 || StriderCanHide(freeDice))
                {
                    if (StriderCanHide(freeDice))
                    {
                        Revealed = false;
                        Log.Log($"  Strider hide");
                        freeDice.SpendMostUselessDie();
                    }
                    else if (Revealed)
                    {
                        Revealed = false;
                        Log.Log($"  hide");
                        freeDice.SpendCharacterOrWill();
                    }
                    else
                    {
                        var tile      = HuntBag.DrawTile();
                        int huntValue = tile.Value(shadowDice.Eyes + freeHuntBox);
                        Log.Log($"  from step {MordorTrackStep} {tile} = {huntValue}");
                        FreeStrategy.Hunt(huntValue, tile.Reveal(), tile, this);
                        if (!tile.Stop())
                        {
                            MordorTrackStep++;
                        }
                        freeHuntBox++;
                        Log.Log($"    corruption {Corruption}, {shadowDice.Eyes} eyes");
                        freeDice.SpendCharacterOrWill();
                        if (IsOver())
                        {
                            return(this);
                        }
                    }
                    movedOrHidThisTurn = true;
                }
                if (!movedOrHidThisTurn)
                {
                    Corruption++;
                    Log.Log("  lazy hobbit corruption");
                }
            }
        }
Exemplo n.º 2
0
 bool PromoteGandalfIfAble(FreeActionDiceRoll freeDice)
 {
     if (GandalfDeadTheFirstTime && freeDice.WillOfTheWests > 0)
     {
         GandalfDeadTheFirstTime = false;
         --freeDice.WillOfTheWests;
         ++FreeActionDiceCount;
         Log.Log("  ____Gandalf the White____");
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 3
0
 private bool StriderCanHide(FreeActionDiceRoll freeDice)
 {
     return(Revealed && (Fellowship.Guide is Strider) && freeDice.Count > 0);
 }
Exemplo n.º 4
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);
                    }
                }
            }
        }