// 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; }
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(); }
//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); } }
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(); }
// 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; }
// 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; }
internal void ChooseStartLocation(Map map, Hunter[] hunters) { CurrentLocation = logic.DecideDraculaStartLocation(map, hunters); }
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; }
// 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; }
// 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"; }
// 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 }
internal EventDetail WillPlayCustomsSearch(GameState g, Hunter hunter) { return logic.DecideToPlayCustomsSearch(g, this, hunter); }
internal void OrderEncounters(Hunter hunter, LocationDetail location) { logic.DecideOrderOfEncountersAtLocation(hunter, location); }
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); }
// remove private int IndexOfHunter(Hunter h) { for (int i = 0; i < 4; i++) { if (Hunters[i].Name == h.Name) { return i; } } return -1; }
// 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; }
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; }
// 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; }
// remove internal void AddToHunterItemsKnownToDracula(Hunter hunter, string p) { hunter.ItemsKnownToDracula.Add(GetItemByNameFromItemDeck(p)); ItemDeck.Remove(GetItemByNameFromItemDeck(p)); }
internal Hunter ChooseHunterToAmbush(Hunter[] hunters) { return logic.DecideWhichHunterToAmbush(hunters); }