Esempio n. 1
0
 // done
 internal Location DecideDraculaStartLocation(Map map, Hunter[] hunters)
 {
     Logger.WriteToDebugLog("Starting to decide where Dracula will start");
     Location startLocation;
     Array locationValues = Enum.GetValues(typeof(Location));
     do
     {
         startLocation = (Location)locationValues.GetValue(new Random().Next(1, 72));
     } while (map.TypeOfLocation(startLocation) == LocationType.Hospital || map.TypeOfLocation(startLocation) == LocationType.Sea || map.TypeOfLocation(startLocation) == LocationType.Castle || hunters[0].CurrentLocation == startLocation || hunters[1].CurrentLocation == startLocation || hunters[2].CurrentLocation == startLocation || hunters[3].CurrentLocation == startLocation);
     Logger.WriteToDebugLog("Returning" + startLocation);
     return startLocation;
 }
Esempio n. 2
0
        public GameState()
        {
            Hunters = new Hunter[4];
            Hunters[(int)HunterName.LordGodalming] = new Hunter((int)HunterName.LordGodalming, "Lord Godalming", 12, 0, 2);
            Hunters[(int)HunterName.DrSeward] = new Hunter((int)HunterName.DrSeward, "Dr. Seward", 10, 0, 2);
            Hunters[(int)HunterName.VanHelsing] = new Hunter((int)HunterName.VanHelsing, "Van Helsing", 8, 0, 3);
            Hunters[(int)HunterName.MinaHarker] = new Hunter((int)HunterName.MinaHarker, "Mina Harker", 8, 1, 2);

            Resolve = -1;
            VampirePointTracker = -1;

            TimeIndex = -1;

            RevealedLocations = new List<Location>();
            EncounterLimbo = new List<Encounter>();
            RevealedEncounters = new List<Encounter>();
            EventDiscard = new List<Event>();
            ItemDiscard = new List<Item>();
            Dracula = new Dracula();
        }
Esempio n. 3
0
 //private void SetUpItems()
 //{
 //    ItemDeck.Add(new ItemDetail("Crucifix"));
 //    ItemDeck.Add(new ItemDetail("Crucifix"));
 //    ItemDeck.Add(new ItemDetail("Crucifix"));
 //    ItemDeck.Add(new ItemDetail("Dogs"));
 //    ItemDeck.Add(new ItemDetail("Dogs"));
 //    ItemDeck.Add(new ItemDetail("Fast Horse"));
 //    ItemDeck.Add(new ItemDetail("Fast Horse"));
 //    ItemDeck.Add(new ItemDetail("Fast Horse"));
 //    ItemDeck.Add(new ItemDetail("Garlic"));
 //    ItemDeck.Add(new ItemDetail("Garlic"));
 //    ItemDeck.Add(new ItemDetail("Garlic"));
 //    ItemDeck.Add(new ItemDetail("Garlic"));
 //    ItemDeck.Add(new ItemDetail("Heavenly Host"));
 //    ItemDeck.Add(new ItemDetail("Heavenly Host"));
 //    ItemDeck.Add(new ItemDetail("Holy Water"));
 //    ItemDeck.Add(new ItemDetail("Holy Water"));
 //    ItemDeck.Add(new ItemDetail("Holy Water"));
 //    ItemDeck.Add(new ItemDetail("Knife"));
 //    ItemDeck.Add(new ItemDetail("Knife"));
 //    ItemDeck.Add(new ItemDetail("Knife"));
 //    ItemDeck.Add(new ItemDetail("Knife"));
 //    ItemDeck.Add(new ItemDetail("Knife"));
 //    ItemDeck.Add(new ItemDetail("Local Rumours"));
 //    ItemDeck.Add(new ItemDetail("Local Rumours"));
 //    ItemDeck.Add(new ItemDetail("Pistol"));
 //    ItemDeck.Add(new ItemDetail("Pistol"));
 //    ItemDeck.Add(new ItemDetail("Pistol"));
 //    ItemDeck.Add(new ItemDetail("Pistol"));
 //    ItemDeck.Add(new ItemDetail("Pistol"));
 //    ItemDeck.Add(new ItemDetail("Sacred Bullets"));
 //    ItemDeck.Add(new ItemDetail("Sacred Bullets"));
 //    ItemDeck.Add(new ItemDetail("Sacred Bullets"));
 //    ItemDeck.Add(new ItemDetail("Stake"));
 //    ItemDeck.Add(new ItemDetail("Stake"));
 //    ItemDeck.Add(new ItemDetail("Stake"));
 //    ItemDeck.Add(new ItemDetail("Stake"));
 //    ItemDeck.Add(new ItemDetail("Rifle"));
 //    ItemDeck.Add(new ItemDetail("Rifle"));
 //    ItemDeck.Add(new ItemDetail("Rifle"));
 //    ItemDeck.Add(new ItemDetail("Rifle"));
 //}
 //private void SetUpEvents()
 //{
 //    EventDeck.Add(new EventDetail("Rufus Smith", false, EventType.Ally));
 //    EventDeck.Add(new EventDetail("Jonathan Harker", false, EventType.Ally));
 //    EventDeck.Add(new EventDetail("Sister Agatha", false, EventType.Ally));
 //    EventDeck.Add(new EventDetail("Heroic Leap", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Great Strength", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Money Trail", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Sense of Emergency", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Sense of Emergency", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Vampire Lair", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Long Day", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Long Day", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Mystic Research", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Mystic Research", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Advance Planning", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Advance Planning", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Advance Planning", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Newspaper Reports", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Newspaper Reports", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Newspaper Reports", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Newspaper Reports", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Newspaper Reports", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Re-Equip", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Re-Equip", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Re-Equip", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Consecrated Ground", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Telegraph Ahead", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Telegraph Ahead", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Hypnosis", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Hypnosis", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Stormy Seas", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Surprising Return", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Surprising Return", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Good Luck", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Good Luck", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Blood Transfusion", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Secret Weapon", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Secret Weapon", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Forewarned", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Forewarned", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Forewarned", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Chartered Carriage", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Chartered Carriage", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Chartered Carriage", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Excellent Weather", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Excellent Weather", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Escape Route", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Escape Route", false, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Hired Scouts", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Hired Scouts", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Hired Scouts", false, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Dracula's Brides", true, EventType.Ally));
 //    EventDeck.Add(new EventDetail("Immanuel Hildesheim", true, EventType.Ally));
 //    EventDeck.Add(new EventDetail("Quincey P. Morris", true, EventType.Ally));
 //    EventDeck.Add(new EventDetail("Roadblock", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Unearthly Swiftness", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Time Runs Short", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Customs Search", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Devilish Power", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Devilish Power", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Vampiric Influence", true, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Vampiric Influence", true, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Night Visit", true, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Evasion", true, EventType.PlayImmediately));
 //    EventDeck.Add(new EventDetail("Wild Horses", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("False Tip-off", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("False Tip-off", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Sensationalist Press", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Rage", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Seduction", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Control Storms", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Relentless Minion", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Relentless Minion", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Trap", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Trap", true, EventType.Keep));
 //    EventDeck.Add(new EventDetail("Trap", true, EventType.Keep));
 //}
 // remove
 //internal void MoveEventFromEventDeckToKnownEvents(Hunter hunterToInfluence, Event e)
 //{
 //    EventDeck.Remove(e);
 //    hunterToInfluence.EventsKnownToDracula.Add(e);
 //}
 // remove
 //internal void MoveItemFromItemDeckToKnownItems(Hunter hunterToInfluence, Item item)
 //{
 //    ItemDeck.Remove(item);
 //    hunterToInfluence.ItemsKnownToDracula.Add(item);
 //}
 // remove
 //internal void MoveEventFromKnownEventsToEventDeck(Hunter hunterToInfluence, Event e)
 //{
 //    EventDeck.Add(e);
 //    hunterToInfluence.EventsKnownToDracula.Remove(e);
 //}
 // remove
 //internal void MoveItemFromKnownItemsToItemDeck(Hunter hunterToInfluence, Item item)
 //{
 //    ItemDeck.Add(item);
 //    hunterToInfluence.ItemsKnownToDracula.Remove(item);
 //}
 // remove
 //internal void GetHunterGroupMemberNamesAtHunterIndex(int hunterIndex, string[] names)
 //{
 //    for (int i = 0; i < Hunters[hunterIndex].HuntersInGroup.Count(); i++)
 //    {
 //        names[i] = Hunters[hunterIndex].HuntersInGroup[i].Name;
 //    }
 //}
 internal void SearchWithHunter(Hunter hunter, Map map, Location location, UserInterface ui)
 {
     if ((Dracula.LocationIsInTrail(location) || Dracula.LocationIsInCatacombs(location)) && map.TypeOfLocation(location) != LocationType.Sea)
     {
         Logger.WriteToDebugLog("Hunter moved to a location that Dracula has visited");
         if (location == Dracula.CurrentLocation)
         {
             ui.TellUser("Dracula is here!");
         }
         else
         {
             ui.TellUser("Search reveals evidence of Dracula's visit");
         }
         RevealedLocations.Add(location);
         bool canFightDracula = ResolveEncountersAtLocation(hunter, map, location, ui);
         if (location == Dracula.CurrentLocation && canFightDracula)
         {
             ResolveCombat(hunter, 1, true, ui);
         }
     }
     else if (location.Type != LocationType.Hospital && location.Type != LocationType.Sea && location.Type != LocationType.Castle)
     {
         ui.TellUser("Search reveals nothing in " + location.Name);
     }
 }
Esempio n. 4
0
        internal string ResolveCombat(Hunter hunter, int enemyInCombat, bool hunterMoved, UserInterface ui)
        {
            List<ItemDetail> enemyCombatCards = new List<ItemDetail>();
            List<ItemDetail> hunterBasicCards = new List<ItemDetail>();
            List<Hunter> huntersInCombat = new List<Hunter>();
            if (hunterMoved)
            {
                foreach (HunterName h in hunter.HuntersInGroup)
                {
                    huntersInCombat.Add(Hunters[(int)h]);
                }
            }
            else
            {
                foreach (Hunter h in Hunters)
                {
                    if (h.CurrentLocation == Hunters[hunterIndex].CurrentLocation)
                    {
                        huntersInCombat.Add(h);
                    }
                }
            }
            hunterBasicCards.Add(new ItemDetail("Punch"));
            hunterBasicCards.Add(new ItemDetail("Escape"));
            bool trapPlayed = false;
            int rageRounds = 0;
            string enemyName = "nobody";
            switch (enemyInCombat)
            {
                case 1:
                    {
                        enemyName = "Dracula";
                        enemyCombatCards.Add(new ItemDetail("Claws"));
                        enemyCombatCards.Add(new ItemDetail("Escape (Man)"));
                        if (TimeIndex > 2)
                        {
                            enemyCombatCards.Add(new ItemDetail("Strength"));
                            enemyCombatCards.Add(new ItemDetail("Escape (Bat)"));
                            enemyCombatCards.Add(new ItemDetail("Escape (Mist)"));
                            enemyCombatCards.Add(new ItemDetail("Fangs"));
                            enemyCombatCards.Add(new ItemDetail("Mesmerize"));
                        }
                        break;
                    }
                case 2:
                    {
                        enemyName = "Minion with Knife";
                        enemyCombatCards.Add(new ItemDetail("Punch"));
                        enemyCombatCards.Add(new ItemDetail("Knife"));
                        break;
                    }
                case 3:
                    {
                        enemyName = "Minion with Knife and Pistol";
                        enemyCombatCards.Add(new ItemDetail("Punch"));
                        enemyCombatCards.Add(new ItemDetail("Knife"));
                        enemyCombatCards.Add(new ItemDetail("Pistol"));
                        break;
                    }
                case 4:
                    {
                        enemyName = "Minion with Knife and Rifle";
                        enemyCombatCards.Add(new ItemDetail("Punch"));
                        enemyCombatCards.Add(new ItemDetail("Knife"));
                        enemyCombatCards.Add(new ItemDetail("Rifle"));
                        break;
                    }
                case 5:
                    {
                        enemyName = "Assassin";
                        enemyCombatCards.Add(new ItemDetail("Punch"));
                        enemyCombatCards.Add(new ItemDetail("Knife"));
                        enemyCombatCards.Add(new ItemDetail("Pistol"));
                        enemyCombatCards.Add(new ItemDetail("Rifle"));
                        break;
                    }
                case 6:
                    {
                        enemyName = "New Vampire";
                        enemyCombatCards.Add(new ItemDetail("Claws"));
                        enemyCombatCards.Add(new ItemDetail("Escape (Man)"));
                        if (TimeIndex > 2)
                        {
                            enemyCombatCards.Add(new ItemDetail("Strength"));
                            enemyCombatCards.Add(new ItemDetail("Escape (Bat)"));
                            enemyCombatCards.Add(new ItemDetail("Escape (Mist)"));
                            enemyCombatCards.Add(new ItemDetail("Fangs"));
                            enemyCombatCards.Add(new ItemDetail("Mesmerize"));
                        }
                        break;
                    }

            }
            ui.TellUser(Hunters[hunterIndex].Name + " is entering combat against " + enemyName + (huntersInCombat.Count() > 1 ? " with " + huntersInCombat[1].Name : "") + (huntersInCombat.Count() > 2 ? " and " + huntersInCombat[2].Name : "") + (huntersInCombat.Count() > 3 ? " and " + huntersInCombat[3].Name : ""));
            EventDetail draculaEventCard = null;
            do
            {
                draculaEventCard = Dracula.PlayEventCardAtStartOfCombat(this, trapPlayed, hunterMoved, enemyInCombat);
                if (draculaEventCard != null)
                {
                    DiscardEventFromDracula(draculaEventCard.name);
                    switch (draculaEventCard.name)
                    {
                        case "Trap":
                            PlayTrap(ui);
                            int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                            if (hunterPlayingGoodluck > -1)
                            {
                                DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                            }
                            else
                            {
                                trapPlayed = true;
                                break;
                            }
                            break;
                        case "Rage":
                            PlayRage(huntersInCombat, ui);
                            int hunterPlayingGoodluckB = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                            if (hunterPlayingGoodluckB > -1)
                            {
                                DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluckB, ui);
                            }
                            else
                            {
                                rageRounds = 3;
                                try
                                {
                                    enemyCombatCards.Remove(enemyCombatCards.Find(card => card.Name == "Escape (Man)"));
                                }
                                catch (Exception e) { }
                                try
                                {
                                    enemyCombatCards.Remove(enemyCombatCards.Find(card => card.Name == "Escape (Bat)"));
                                }
                                catch (Exception e) { }
                                try
                                {
                                    enemyCombatCards.Remove(enemyCombatCards.Find(card => card.Name == "Escape (Mist)"));
                                }
                                catch (Exception e) { }
                            }
                            break;

                        case "Wild Horses": PlayWildHorses(huntersInCombat, ui); return "Wild Horses";
                    }
                }
            } while (draculaEventCard != null);
            bool[] hunterPlayedCard = new bool[4] { true, true, true, true };
            int hunterPlayingCard = 0;
            while (hunterPlayedCard[0] || hunterPlayedCard[1] || hunterPlayedCard[2] || hunterPlayedCard[3])
            {
                if (ui.GetHunterPlayingCard(Hunters[hunterPlayingCard].Name))
                {
                    string cardName = "";
                    do
                    {
                        cardName = ui.GetNameOfHunterCardPlayedAtStartOfCombat(Hunters[hunterPlayingCard].Name);
                    } while (GetEventByNameFromEventDeck(cardName).name == "Unknown event" && GetItemByNameFromItemDeck(cardName).Name == "Unknown item" && cardName.ToLower() != "cancel");
                    if (cardName != "cancel")
                    {
                        hunterPlayedCard[hunterPlayingCard] = true;
                        switch (cardName)
                        {
                            case "Advance Planning":
                                DiscardEventFromHunterAtIndex(cardName, hunterPlayingCard, ui);
                                draculaEventCard = Dracula.WillPlayDevilishPower(this, ui);
                                bool eventIsCancelled = false;
                                if (draculaEventCard != null)
                                {
                                    switch (draculaEventCard.name)
                                    {
                                        case "DevilishPower":
                                            ui.TellUser("Dracula played Devilish power to cancel this event");
                                            DiscardEventFromDracula("Devilish Power");
                                            int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                                            if (hunterPlayingGoodluck > -1)
                                            {
                                                DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                                            }
                                            else
                                            {
                                                eventIsCancelled = true;
                                            }

                                            break;
                                    }
                                }
                                if (!eventIsCancelled)
                                {
                                    PlayAdvancePlanningInCombat(ui);
                                }
                                break;
                            case "Escape Route":
                                DiscardEventFromHunterAtIndex(cardName, hunterPlayingCard, ui);
                                draculaEventCard = Dracula.WillPlayDevilishPower(this, ui);
                                bool eventIsCancelledB = false;
                                if (draculaEventCard != null)
                                {
                                    switch (draculaEventCard.name)
                                    {
                                        case "DevilishPower":
                                            ui.TellUser("Dracula played Devilish power to cancel this event");
                                            DiscardEventFromDracula("Devilish Power");
                                            int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                                            if (hunterPlayingGoodluck > -1)
                                            {
                                                DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                                            }
                                            else
                                            {
                                                eventIsCancelledB = true;
                                            }

                                            break;
                                    }
                                }
                                if (!eventIsCancelledB)
                                {
                                    PlayEscapeRouteInCombat(hunterPlayingCard, ui);
                                    return "Escape Route";
                                }
                                break;
                            case "Heroic Leap":
                                DiscardEventFromHunterAtIndex(cardName, hunterPlayingCard, ui);
                                draculaEventCard = Dracula.WillPlayDevilishPower(this, ui);
                                bool eventIsCancelledC = false;
                                if (draculaEventCard != null)
                                {
                                    switch (draculaEventCard.name)
                                    {
                                        case "DevilishPower":
                                            ui.TellUser("Dracula played Devilish power to cancel this event");
                                            DiscardEventFromDracula("Devilish Power");
                                            int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                                            if (hunterPlayingGoodluck > -1)
                                            {
                                                DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                                            }
                                            else
                                            {
                                                eventIsCancelledC = true;
                                            }

                                            break;
                                    }
                                }
                                if (!eventIsCancelledC)
                                {
                                    PlayHeroicLeapInCombat(hunterPlayingCard, ui);
                                }
                                break;
                            case "Garlic":
                                rageRounds = 3;
                                if (enemyCombatCards.FindIndex(card => card.Name == "Escape (Man)") > -1)
                                {
                                    enemyCombatCards.Remove(enemyCombatCards.Find(card => card.Name == "Escape (Man)"));
                                }
                                if (enemyCombatCards.FindIndex(card => card.Name == "Escape (Bat)") > -1)
                                {
                                    enemyCombatCards.Remove(enemyCombatCards.Find(card => card.Name == "Escape (Bat)"));
                                }
                                if (enemyCombatCards.FindIndex(card => card.Name == "Escape (Mist)") > -1)
                                {
                                    enemyCombatCards.Remove(enemyCombatCards.Find(card => card.Name == "Escape (Mist)"));
                                }
                                DiscardItemFromHunterAtIndex(cardName, hunterPlayingCard, ui);
                                break;
                        }

                    }
                }
                else
                {
                    hunterPlayedCard[hunterPlayingCard] = false;
                }
                hunterPlayingCard = (hunterPlayingCard + 1) % 4;
            }
            CombatRoundResult roundResult = new CombatRoundResult();
            roundResult = ResolveRoundOfCombat(huntersInCombat, enemyCombatCards, hunterBasicCards, roundResult, hunterMoved, enemyInCombat, ui);
            rageRounds--;
            if (rageRounds == 0)
            {
                enemyCombatCards.Add(new ItemDetail("Escape (Man)"));
                if (TimeIndex > 2)
                {
                    enemyCombatCards.Add(new ItemDetail("Escape (Bat)"));
                    enemyCombatCards.Add(new ItemDetail("Escape (Mist)"));
                }
            }
            enemyCombatCards.Add(new ItemDetail("Dodge"));
            hunterBasicCards.Add(new ItemDetail("Dodge"));

            while (roundResult.outcome != "Bite" && roundResult.outcome != "Enemy killed" && roundResult.outcome != "Hunter killed" && roundResult.outcome != "End")
            {
                if (roundResult.outcome == "Hunter wounded")
                {
                    if (ui.AskIfHunterIsUsingGreatStrengthToCancelDamage(roundResult.hunterTargeted))
                    {
                        DiscardEventFromHunterAtIndex("Great Strength", Array.FindIndex(Hunters, h => h.Name == roundResult.hunterTargeted), ui);
                        draculaEventCard = Dracula.WillPlayDevilishPower(this, ui);
                        if (draculaEventCard != null)
                        {
                            switch (draculaEventCard.name)
                            {
                                case "DevilishPower":
                                    ui.TellUser("Dracula played Devilish power to cancel this event");
                                    DiscardEventFromDracula("Devilish Power");
                                    int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                                    if (hunterPlayingGoodluck > -1)
                                    {
                                        DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                                    }
                                    break;
                            }
                        }
                    }
                }
                roundResult = ResolveRoundOfCombat(huntersInCombat, enemyCombatCards, hunterBasicCards, roundResult, hunterMoved, enemyInCombat, ui);
            }
            foreach (Hunter h in huntersInCombat)
            {
                h.Health -= ui.GetHunterHealthLost(h.Name);
            }
            if (enemyInCombat == 1)
            {
                Dracula.Blood -= ui.GetDraculaBloodLost();
            }
            ui.TellUser("Be sure to discard any items that were destroyed/consumed in this combat");
            if (roundResult.outcome == "Bite" || roundResult.outcome == "Enemy killed" || roundResult.outcome == "Hunter killed" || roundResult.outcome == "End")
            {
                switch (roundResult.outcome)
                {
                    case "Bite":
                        ApplyBiteToHunter(Array.FindIndex(Hunters, hunt => hunt.Name == roundResult.hunterTargeted), ui);
                        HandleDraculaEscape(ui);
                        break;
                    case "End":
                        if (TimeIndex > 2)
                        {
                            HandleDraculaEscape(ui);
                        }
                        break;
                }
                return roundResult.outcome;
            }
            return ui.GetCombatRoundOutcome();
        }
Esempio n. 5
0
 // done
 internal Hunter DecideWhichHunterToAttackWithQuincey(Hunter[] hunters)
 {
     Logger.WriteToDebugLog("Deciding which hunter to target with Quincey P. Morris");
     Hunter victim = hunters[new Random().Next(0, 4)];
     Logger.WriteToDebugLog("Returning " + victim.Name);
     return victim;
 }
Esempio n. 6
0
 // done
 internal Hunter DecideWhichHunterToAmbush(Hunter[] hunters)
 {
     Logger.WriteToDebugLog("Deciding which hunter to Ambush");
     Hunter victim = hunters[new Random().Next(0, 4)];
     Logger.WriteToDebugLog("Returning " + victim.Name);
     return victim;
 }
Esempio n. 7
0
 internal void ChooseStartLocation(Map map, Hunter[] hunters)
 {
     CurrentLocation = logic.DecideDraculaStartLocation(map, hunters);
 }
Esempio n. 8
0
        private bool ResolveEncountersAtLocation(Hunter hunter, Map map, Location location, UserInterface ui)
        {
            Dracula.OrderEncounters(hunter, location);
            foreach (EncounterDetail enc in map.LocationDetails(location).Encounters)
            {
                enc.isRevealed = true;
                ui.TellUser(enc.name + " is revealed");
            }
            ui.drawGameState(this);
            bool resolveNextEncounter = true;
            bool discardEncounter = true;
            List<EncounterDetail> encountersBeingDiscarded = new List<EncounterDetail>();
            EncounterDetail firstEncounter = null;
            EncounterDetail secondEncounter = null;

            if (map.LocationDetails(location).Encounters.Count() > 0)
            {
                firstEncounter = map.LocationDetails(location).Encounters.First();
            }
            if (map.LocationDetails(location).Encounters.Count() > 1)
            {
                secondEncounter = map.LocationDetails(location).Encounters[1];
            }
            if (firstEncounter != null)
            {
                bool encounterCancelled = false;
                foreach (Hunter h in Hunters)
                {
                    int hunterIndex = IndexOfHunter(h);
                    if (h.CurrentLocation == location)
                    {
                        if (ui.AskIfHunterIsPlayingSecretWeapon(h.Name))
                        {

                            DiscardEventFromHunterAtIndex("Secret Weapon", hunterIndex, ui);
                            Logger.WriteToDebugLog(h.Name + " played Secret Weapon");
                            Logger.WriteToGameLog(h.Name + " played Secret Weapon");
                            EventDetail draculaEventCardA = Dracula.WillPlayDevilishPower(this, ui);
                            bool eventIsCancelled = false;
                            if (draculaEventCardA != null)
                            {
                                switch (draculaEventCardA.name)
                                {
                                    case "DevilishPower":
                                        ui.TellUser("Dracula played Devilish power to cancel this event");
                                        Logger.WriteToDebugLog("Dracula played Devilish Power");
                                        DiscardEventFromDracula("Devilish Power");
                                        int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                                        if (hunterPlayingGoodluck > -1)
                                        {
                                            DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                                        }
                                        else
                                        {
                                            eventIsCancelled = true;
                                        }
                                        break;
                                }
                            }
                            if (!eventIsCancelled)
                            {
                                PlaySecretWeaponBeforeEncounter(hunterIndex, ui);
                            }
                        }
                        EventDetail draculaEventCard;
                        if (ui.AskIfHunterIsPlayingForeWarned(h.Name))
                        {
                            draculaEventCard = Dracula.WillPlayDevilishPower(this, ui);
                            bool eventIsCancelled = false;
                            if (draculaEventCard != null)
                            {
                                switch (draculaEventCard.name)
                                {
                                    case "DevilishPower":
                                        ui.TellUser("Dracula played Devilish power to cancel this event");
                                        DiscardEventFromDracula("Devilish Power");
                                        int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                                        if (hunterPlayingGoodluck > -1)
                                        {
                                            DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                                        }
                                        else
                                        {
                                            eventIsCancelled = true;
                                        }

                                        break;
                                }
                            }
                            if (!eventIsCancelled)
                            {
                                PlayForewarnedBeforeEncounter(hunterIndex, ui);
                                encounterCancelled = true;
                            }
                        }
                    }
                }
                if (encounterCancelled)
                {
                    resolveNextEncounter = true;
                    discardEncounter = true;
                }
                else
                {
                    resolveNextEncounter = ResolveEncounter(firstEncounter, hunter, out discardEncounter, ui);
                }
                if (discardEncounter)
                {
                    map.LocationDetails(location).Encounters.Remove(firstEncounter);
                    EncounterPool.Add(firstEncounter);
                    firstEncounter.isRevealed = false;
                }
                else if (firstEncounter.name == "Bats" || firstEncounter.name == "Fog")
                {
                    EncounterLimbo.Add(firstEncounter);
                    map.LocationDetails(location).Encounters.Remove(firstEncounter);
                }
            }
            if (secondEncounter != null)
            {
                bool encounterCancelled = false;
                foreach (Hunter h in Hunters)
                {
                    int hunterIndex = IndexOfHunter(h);
                    if (h.CurrentLocation == location)
                    {
                        if (ui.AskIfHunterIsPlayingSecretWeapon(h.Name))
                        {

                            DiscardEventFromHunterAtIndex("Secret Weapon", hunterIndex, ui);
                            Logger.WriteToDebugLog(h.Name + " played Secret Weapon");
                            Logger.WriteToGameLog(h.Name + " played Secret Weapon");
                            EventDetail draculaEventCardA = Dracula.WillPlayDevilishPower(this, ui);
                            bool eventIsCancelled = false;
                            if (draculaEventCardA != null)
                            {
                                switch (draculaEventCardA.name)
                                {
                                    case "DevilishPower":
                                        ui.TellUser("Dracula played Devilish power to cancel this event");
                                        Logger.WriteToDebugLog("Dracula played Devilish Power");
                                        DiscardEventFromDracula("Devilish Power");
                                        int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                                        if (hunterPlayingGoodluck > -1)
                                        {
                                            DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                                        }
                                        else
                                        {
                                            eventIsCancelled = true;
                                        }
                                        break;
                                }
                            }
                            if (!eventIsCancelled)
                            {
                                PlaySecretWeaponBeforeEncounter(hunterIndex, ui);
                            }
                        }
                        EventDetail draculaEventCard;
                        if (ui.AskIfHunterIsPlayingForeWarned(h.Name))
                        {
                            draculaEventCard = Dracula.WillPlayDevilishPower(this, ui);
                            bool eventIsCancelled = false;
                            if (draculaEventCard != null)
                            {
                                switch (draculaEventCard.name)
                                {
                                    case "DevilishPower":
                                        ui.TellUser("Dracula played Devilish power to cancel this event");
                                        DiscardEventFromDracula("Devilish Power");
                                        int hunterPlayingGoodluck = ui.AskWhichHunterIsUsingGoodLuckToCancelEvent();
                                        if (hunterPlayingGoodluck > -1)
                                        {
                                            DiscardEventFromHunterAtIndex("Good Luck", hunterPlayingGoodluck, ui);
                                        }
                                        else
                                        {
                                            eventIsCancelled = true;
                                        }

                                        break;
                                }
                            }
                            if (!eventIsCancelled)
                            {
                                PlayForewarnedBeforeEncounter(hunterIndex, ui);
                                encounterCancelled = true;
                            }
                        }
                    }
                }
                if (encounterCancelled)
                {
                    resolveNextEncounter = true;
                    discardEncounter = true;
                }
                else
                {
                    resolveNextEncounter = ResolveEncounter(secondEncounter, hunter, out discardEncounter, ui);
                }
                if (discardEncounter)
                {
                    map.LocationDetails(location).Encounters.Remove(secondEncounter);
                    EncounterPool.Add(secondEncounter);
                }
                else if (secondEncounter.name == "Bats" || secondEncounter.name == "Fog")
                {
                    EncounterLimbo.Add(secondEncounter);
                    map.LocationDetails(location).Encounters.Remove(secondEncounter);
                }
            }
            return resolveNextEncounter;
        }
Esempio n. 9
0
 // done
 internal EventDetail DecideToPlayCustomsSearch(GameState g, Dracula dracula, Hunter hunter)
 {
     Logger.WriteToDebugLog("Deciding whether to play Customs Search");
     if (dracula.EventCardsInHand.FindIndex(e => e.name == "Customs Search") > -1)
     {
         if (new Random().Next(0, 2) > 0)
         {
             Logger.WriteToDebugLog("Returning Customs Search");
             return dracula.EventCardsInHand.Find(e => e.name == "Customs Search");
         }
     }
     Logger.WriteToDebugLog("Returning null");
     return null;
 }
Esempio n. 10
0
 // done
 internal string DecideToDiscardEventOrItem(GameState g, Dracula dracula, Hunter hunter)
 {
     Logger.WriteToDebugLog("Deciding whether to discard hunter's event or item");
     if (hunter.NumberOfEvents + hunter.NumberOfItems > 0)
     {
         int cardToDiscard = new Random().Next(0, hunter.NumberOfEvents + hunter.NumberOfItems);
         if (cardToDiscard + 1 > hunter.NumberOfEvents)
         {
             Logger.WriteToDebugLog("Returning item");
             return "item";
         }
         else
         {
             Logger.WriteToDebugLog("Returning event");
             return "event";
         }
     }
     Logger.WriteToDebugLog("Returning no cards");
     return "no cards";
 }
Esempio n. 11
0
 // done
 internal void DecideOrderOfEncountersAtLocation(Hunter hunter, Location location)
 {
     Logger.WriteToDebugLog("Deciding order of encounters at location");
     Logger.WriteToDebugLog("Nothing to perform or return");
     // do nothing for now
 }
Esempio n. 12
0
 internal EventDetail WillPlayCustomsSearch(GameState g, Hunter hunter)
 {
     return logic.DecideToPlayCustomsSearch(g, this, hunter);
 }
Esempio n. 13
0
 internal void OrderEncounters(Hunter hunter, LocationDetail location)
 {
     logic.DecideOrderOfEncountersAtLocation(hunter, location);
 }
Esempio n. 14
0
 internal LocationDetail DecideWhereToSendHunterWithBats(GameState g, Hunter hunter, UserInterface ui)
 {
     List<LocationDetail> batsMoves = new List<LocationDetail>();
     foreach (LocationDetail loc in hunter.CurrentLocation.ByRoad)
     {
         batsMoves.Add(loc);
     }
     return logic.DecideWhereToSendHuntersWithBats(g, hunter, batsMoves);
 }
Esempio n. 15
0
 // remove
 private int IndexOfHunter(Hunter h)
 {
     for (int i = 0; i < 4; i++)
     {
         if (Hunters[i].Name == h.Name)
         {
             return i;
         }
     }
     return -1;
 }
Esempio n. 16
0
 // done
 internal bool DecideToPlayFalseTipOff(GameState g, Dracula dracula, Hunter hunter)
 {
     Logger.WriteToDebugLog("Deciding whether to play False Tip-Off");
     if (dracula.EventCardsInHand.FindIndex(card => card.name == "False Tip-Off") > -1)
     {
         if (new Random().Next(0, 2) > 0)
         {
             Logger.WriteToDebugLog("Returning true");
             return true;
         }
     }
     Logger.WriteToDebugLog("Returning false");
     return false;
 }
Esempio n. 17
0
        private bool ResolveEncounter(EncounterDetail enc, Hunter hunter, out bool discard, UserInterface ui)
        {
            bool resolveNextEncounter = true;
            discard = true;

            List<Hunter> huntersInvolved = new List<Hunter>();
            foreach (int ind in hunter.HuntersInGroup)
            {
                huntersInvolved.Add(Hunters[ind]);
            }

            switch (enc.name)
            {
                case "Ambush":
                    resolveNextEncounter = ResolveAmbush(huntersInvolved, ui);
                    break;
                case "Assasin":
                    resolveNextEncounter = ResolveAssassin(huntersInvolved, ui);
                    break;
                case "Bats":
                    resolveNextEncounter = ResolveBats(huntersInvolved, ui);
                    discard = false;
                    break;
                case "Desecrated Soil":
                    resolveNextEncounter = ResolveDesecratedSoil(huntersInvolved, ui);
                    break;
                case "Fog":
                    resolveNextEncounter = ResolveFog(huntersInvolved, ui);
                    discard = false;
                    break;
                case "Minion with Knife":
                    resolveNextEncounter = ResolveMinionWithKnife(huntersInvolved, ui);
                    break;
                case "Minion with Knife and Pistol":
                    resolveNextEncounter = ResolveMinionWithKnifeAndPistol(huntersInvolved, ui);
                    break;
                case "Minion with Knife and Rifle":
                    resolveNextEncounter = ResolveMinionWithKnifeAndRifle(huntersInvolved, ui);
                    break;
                case "Hoax":
                    resolveNextEncounter = ResolveHoax(huntersInvolved, ui);
                    break;
                case "Lightning":
                    resolveNextEncounter = ResolveLightning(huntersInvolved, ui);
                    break;
                case "Peasants":
                    resolveNextEncounter = ResolvePeasants(huntersInvolved, ui);
                    break;
                case "Plague":
                    resolveNextEncounter = ResolvePlague(huntersInvolved, ui);
                    break;
                case "Rats":
                    resolveNextEncounter = ResolveRats(huntersInvolved, ui);
                    break;
                case "Saboteur":
                    resolveNextEncounter = ResolveSaboteur(huntersInvolved, ui);
                    break;
                case "Spy":
                    resolveNextEncounter = ResolveSpy(huntersInvolved, ui);
                    break;
                case "Thief":
                    resolveNextEncounter = ResolveThief(huntersInvolved, ui);
                    break;
                case "New Vampire":
                    bool discardVampire = true;
                    resolveNextEncounter = ResolveNewVampire(huntersInvolved, out discardVampire, ui);
                    discard = discardVampire;
                    break;
                case "Wolves":
                    resolveNextEncounter = ResolveWolves(huntersInvolved, ui);
                    break;

            }
            return resolveNextEncounter;
        }
Esempio n. 18
0
 // done
 internal LocationDetail DecideWhereToSendHuntersWithBats(GameState g, Hunter hunter, List<LocationDetail> batsMoves)
 {
     Logger.WriteToDebugLog("Deciding where to send hunter with Bats");
     LocationDetail destination = batsMoves[new Random().Next(0, batsMoves.Count())];
     Logger.WriteToDebugLog("Returning " + destination.Name);
     return destination;
 }
Esempio n. 19
0
 // remove
 internal void AddToHunterItemsKnownToDracula(Hunter hunter, string p)
 {
     hunter.ItemsKnownToDracula.Add(GetItemByNameFromItemDeck(p));
     ItemDeck.Remove(GetItemByNameFromItemDeck(p));
 }
Esempio n. 20
0
 internal Hunter ChooseHunterToAmbush(Hunter[] hunters)
 {
     return logic.DecideWhichHunterToAmbush(hunters);
 }