Example #1
0
 public void DiscardEncounterFromCardSlot_EncounterInList_EncounterIsMovedToEncounterPool()
 {
     var encounterPool = new List<EncounterTile>();
     dracula.Trail[0] = new DraculaCardSlot();
     var batsTile = new EncounterTile(Encounter.Bats);
     dracula.Trail[0].EncounterTiles.Add(batsTile);
     dracula.DiscardEncounterTileFromCardSlot(batsTile, dracula.Trail[0], encounterPool);
     Assert.AreEqual(false, dracula.Trail[0].EncounterTiles.Contains(batsTile));
     Assert.AreEqual(true, encounterPool.Contains(batsTile));
 }
Example #2
0
        /// <summary>
        /// Resolves an Encounter on a group of Hunters
        /// </summary>
        /// <param name="game">The GameState</param>
        /// <param name="encounterTileBeingResolved">The Encounter being resolved</param>
        /// <param name="trailIndex">The Index of the Trail slot (0-5), or Catacombs slot (6-8) where the Encounter is being resolved, or -1 if being resolved from Dracula's hand</param>
        /// <returns>True if the Hunters can continue resolving Encounters</returns>
        private static bool ResolveEncounterTile(GameState game, EncounterTile encounterTileBeingResolved,
            List<Hunter> huntersInvolved, DecisionMaker logic, int trailIndex)
        {
            Console.WriteLine("Resolving {0} with {1}{2}", encounterTileBeingResolved.Encounter.Name(),
                huntersInvolved.First().Name(), huntersInvolved.Count() > 1 ? " and his group" : "");
            var continueEncounters = true;
            var discardEncounterTile = true;
            foreach (var h in huntersInvolved)
            {
                Console.WriteLine("Will {0} play Secret Weapon?", h.Name());
                var line = "";
                do
                {
                    line = Console.ReadLine();
                } while (!"yes".StartsWith(line.ToLower()) && !"no".StartsWith(line.ToLower()));
                if ("yes".StartsWith(line.ToLower()))
                {
                    game.Hunters[(int)h].DiscardEvent(game, Event.SecretWeapon);
                    if (DraculaIsPlayingDevilishPowerToCancelEvent(game, Event.SecretWeapon, Event.SecretWeapon, logic, game.Hunters[(int)h]))
                    {
                        Console.WriteLine("Secret Weapon cancelled");
                    }
                    else
                    {
                        DiscardUnknownItemFromHunter(game, game.Hunters[(int)h]);
                        Console.WriteLine("What is the name of the Item being retrieved from the discard pile?");
                        var itemRetrieved = Item.None;
                        while (itemRetrieved == Item.None)
                        {
                            itemRetrieved = Enumerations.GetItemFromString(Console.ReadLine());
                        }
                        var itemCardRetrieved = game.ItemDiscard.Find(card => card.Item == itemRetrieved);
                        game.ItemDiscard.Remove(itemCardRetrieved);
                        game.Hunters[(int)h].ItemsKnownToDracula.Add(itemCardRetrieved);
                        game.Hunters[(int)h].DrawItemCard();
                    }
                }
            }

            foreach (var h in huntersInvolved)
            {
                Console.WriteLine("Will {0} play Forewarned?", h.Name());
                var line = "";
                do
                {
                    line = Console.ReadLine();
                } while (!"yes".StartsWith(line.ToLower()) && !"no".StartsWith(line.ToLower()));
                if ("yes".StartsWith(line.ToLower()))
                {
                    game.Hunters[(int)h].DiscardEvent(game, Event.Forewarned);
                    if (DraculaIsPlayingDevilishPowerToCancelEvent(game, Event.SecretWeapon, Event.SecretWeapon, logic, game.Hunters[(int)h]))
                    {
                        Console.WriteLine("Forewarned cancelled");
                    }
                    else
                    {
                        Console.WriteLine("Encounter cancelled");
                        game.EncounterPool.Add(encounterTileBeingResolved);
                        if (trailIndex > -1)
                        {
                            game.Dracula.Trail[trailIndex].EncounterTiles.Remove(encounterTileBeingResolved);
                        }
                        return true;
                    }
                }
            }

            switch (encounterTileBeingResolved.Encounter)
            {
                case Encounter.Ambush:
                    continueEncounters = ResolveAmbush(game, huntersInvolved, logic); break;
                case Encounter.Assassin:
                    continueEncounters = ResolveAssassin(game, huntersInvolved, logic); break;
                case Encounter.Bats:
                    discardEncounterTile = false;
                    game.Hunters[(int)huntersInvolved.First()].EncountersInFrontOfPlayer.Add(encounterTileBeingResolved);
                    if (trailIndex > -1)
                    {
                        game.Dracula.Trail[trailIndex].EncounterTiles.Remove(encounterTileBeingResolved);
                    }
                    else
                    {
                        game.Dracula.EncounterHand.Remove(encounterTileBeingResolved);
                    }
                    return false;
                case Encounter.DesecratedSoil:
                    continueEncounters = ResolveDesecratedSoil(game, huntersInvolved, logic); break;
                case Encounter.Fog:
                    discardEncounterTile = false;
                    game.Hunters[(int)huntersInvolved.First()].EncountersInFrontOfPlayer.Add(encounterTileBeingResolved);
                    if (trailIndex > -1)
                    {
                        game.Dracula.Trail[trailIndex].EncounterTiles.Remove(encounterTileBeingResolved);
                    }
                    else
                    {
                        game.Dracula.EncounterHand.Remove(encounterTileBeingResolved);
                    }
                    return false;
                case Encounter.MinionWithKnife:
                    continueEncounters = ResolveMinionWithKnife(game, huntersInvolved, logic); break;
                case Encounter.MinionWithKnifeAndPistol:
                    continueEncounters = ResolveMinionWithKnifeAndPistol(game, huntersInvolved, logic); break;
                case Encounter.MinionWithKnifeAndRifle:
                    continueEncounters = ResolveMinionWithKnifeAndRifle(game, huntersInvolved, logic); break;
                case Encounter.Hoax:
                    continueEncounters = ResolveHoax(game, huntersInvolved); break;
                case Encounter.Lightning:
                    continueEncounters = ResolveLightning(game, huntersInvolved); break;
                case Encounter.Peasants:
                    continueEncounters = ResolvePeasants(game, huntersInvolved); break;
                case Encounter.Plague:
                    continueEncounters = ResolvePlague(game, huntersInvolved); break;
                case Encounter.Rats:
                    continueEncounters = ResolveRats(game, huntersInvolved); break;
                case Encounter.Saboteur:
                    continueEncounters = ResolveSaboteur(game, huntersInvolved); break;
                case Encounter.Spy:
                    continueEncounters = ResolveSpy(game, huntersInvolved); break;
                case Encounter.Thief:
                    continueEncounters = ResolveThief(game, huntersInvolved, logic); break;
                case Encounter.NewVampire:
                    var seductionPlayed = false;
                    continueEncounters = ResolveNewVampire(game, huntersInvolved, logic, out discardEncounterTile,
                        out seductionPlayed);
                    if (seductionPlayed)
                    {
                        game.Dracula.EncounterHand.Add(encounterTileBeingResolved);
                        while (game.Dracula.EncounterHand.Count() > game.Dracula.EncounterHandSize)
                        {
                            game.Dracula.DiscardEncounterTile(game,
                                logic.ChooseEncounterTileToDiscardFromEncounterHand(game));
                        }
                        if (trailIndex > -1)
                        {
                            game.Dracula.Trail[trailIndex].EncounterTiles.Remove(encounterTileBeingResolved);
                        }
                        else
                        {
                            game.Dracula.EncounterHand.Remove(encounterTileBeingResolved);
                        }
                    }
                    break;
                case Encounter.Wolves:
                    continueEncounters = ResolveWolves(game, huntersInvolved); break;
                default:
                    return false;
            }
            if (discardEncounterTile)
            {
                game.EncounterPool.Add(encounterTileBeingResolved);
                if (trailIndex > -1)
                {
                    game.Dracula.Trail[trailIndex].EncounterTiles.Remove(encounterTileBeingResolved);
                }
                else
                {
                    game.Dracula.EncounterHand.Remove(encounterTileBeingResolved);
                }
            }
            return continueEncounters;
        }
Example #3
0
 /// <summary>
 /// Matures an Encounter
 /// </summary>
 /// <param name="game">The GameState</param>
 /// <param name="encounterTileBeingMatured">The EncounterTile being matured</param>
 /// <param name="logic">The artificial intelligence component</param>
 private static void MatureEncounter(GameState game, EncounterTile encounterTileBeingMatured, DecisionMaker logic)
 {
     switch (encounterTileBeingMatured.Encounter)
     {
         case Encounter.Ambush:
             Console.WriteLine("Dracula matured Ambush");
             var hunterToAmbush = logic.ChooseHunterToAmbush(game);
             if (hunterToAmbush != Hunter.Nobody)
             {
                 var encounterToAmbushWith = logic.ChooseEncounterTileToAmbushHunterWith(game, hunterToAmbush);
                 ResolveEncounterTile(game, encounterToAmbushWith, new List<Hunter> { hunterToAmbush }, logic, -1);
                 game.Dracula.DiscardEncounterTile(game, encounterToAmbushWith);
                 game.EncounterPool.Add(encounterToAmbushWith);
             }
             break;
         case Encounter.DesecratedSoil:
             Console.WriteLine("Dracula matured Desecrated Soil");
             game.Dracula.ClearTrailDownTo(game, 3);
             logic.TrimAllPossibleTrails(3);
             for (var i = 0; i < 2; i++)
             {
                 Console.WriteLine(
                     "Draw an Event card. If it is a Hunter card, name it, otherwise type \"take\"");
                 var line = "";
                 var eventDrawn = Event.None;
                 do
                 {
                     line = Console.ReadLine();
                     eventDrawn = Enumerations.GetEventFromString(line);
                 } while (eventDrawn == Event.None &&
                          !"take".StartsWith(line.ToLower()));
                 if (eventDrawn == Event.None)
                 {
                     var eventPlayedByDracula = game.Dracula.TakeEvent(game.EventDeck, game.EventDiscard);
                     PlayImmediatelyDraculaCard(game, eventPlayedByDracula, logic);
                     if (game.Dracula.EventHand.Count() > game.Dracula.EventHandSize)
                     {
                         Console.WriteLine("Dracula discarded {0}", game.Dracula.DiscardEvent(logic.ChooseEventToDiscard(game), game.EventDiscard).Name());
                     }
                 }
                 else
                 {
                     var eventCardDiscarded = game.EventDeck.Find(card => card.Event == eventDrawn);
                     game.EventDeck.Remove(eventCardDiscarded);
                     game.EventDiscard.Add(eventCardDiscarded);
                 }
             }
             break;
         case Encounter.NewVampire:
             Console.WriteLine("Dracula matured a New Vampire");
             game.AdjustVampires(2);
             game.Dracula.ClearTrailDownTo(game, 1);
             logic.TrimAllPossibleTrails(1); break;
     }
     game.EncounterPool.Add(encounterTileBeingMatured);
 }
Example #4
0
 public void PlaceEncounterTileOnCard(EncounterTile encounterToPlace, DraculaCardSlot card)
 {
     if (encounterToPlace != null)
     {
         card.EncounterTiles.Add(encounterToPlace);
         EncounterHand.Remove(encounterToPlace);
     }
 }
Example #5
0
 public void DiscardEncounterTileFromCardSlot(EncounterTile encounterTileToDiscard,
     DraculaCardSlot draculaCardSlot, List<EncounterTile> encounterPool)
 {
     draculaCardSlot.EncounterTiles.Remove(encounterTileToDiscard);
     encounterPool.Add(encounterTileToDiscard);
 }
Example #6
0
 public void DiscardEncounterTile(GameState game, EncounterTile encounterToDiscard)
 {
     game.EncounterPool.Add(encounterToDiscard);
     EncounterHand.Remove(encounterToDiscard);
 }