public void Aura_LoopBug() { var game = new Game(new GameConfig { StartPlayer = 1, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; var minion1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stormwind Champion")); var minion2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stormwind Champion")); game.Process(PlayCardTask.Any(game.CurrentPlayer, minion1)); Assert.AreEqual(6, minion1[GameTag.HEALTH]); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(PlayCardTask.Any(game.CurrentPlayer, minion2)); Assert.AreEqual(7, minion1[GameTag.HEALTH]); }
public void Resurrect_BRM_017() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, Player2HeroClass = CardClass.MAGE, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Resurrect")); Assert.AreEqual(5, game.CurrentPlayer.Hand.Count); game.Process(PlayCardTask.Spell(game.CurrentPlayer, testCard)); Assert.AreEqual(5, game.CurrentPlayer.Hand.Count); var minion = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Injured Blademaster")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var spell = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Fireball")); Assert.AreEqual(1, game.CurrentOpponent.Board.Count); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, spell, minion)); Assert.AreEqual(0, game.CurrentOpponent.Board.Count); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(PlayCardTask.Spell(game.CurrentPlayer, testCard)); Assert.AreEqual(1, game.CurrentPlayer.Board.Count); Assert.AreEqual(minion.Card.Id, game.CurrentPlayer.Board[0].Card.Id); Assert.AreEqual(7, ((Minion)game.CurrentPlayer.Board[0]).Health); }
public static void Kazakus() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.DRUID, Player1Deck = new List <Card>() { }, Player2HeroClass = CardClass.DRUID, Player2Deck = new List <Card>() { }, FillDecks = false }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Kazakus")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard)); game.Process(ChooseTask.Pick(game.CurrentPlayer, game.CurrentPlayer.Choice.Choices[0])); game.Process(ChooseTask.Pick(game.CurrentPlayer, game.CurrentPlayer.Choice.Choices[0])); game.Process(ChooseTask.Pick(game.CurrentPlayer, game.CurrentPlayer.Choice.Choices[0])); ShowLog(game, LogLevel.VERBOSE); }
public void Flamewaker_BRM_002() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.MAGE, Player2HeroClass = CardClass.MAGE, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Flamewaker")); game.Process(PlayCardTask.Any(game.CurrentPlayer, testCard)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var minion1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Bloodfen Raptor")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion1)); var minion2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stonetusk Boar")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion2)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); Assert.AreEqual(33, ((Minion)minion1).Health + ((Minion)minion2).Health + game.CurrentOpponent.Hero.Health); var spell2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Fireball")); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, spell2, game.CurrentOpponent.Hero)); Assert.AreEqual(25, (((Minion)minion1).IsDead ? 0 : ((Minion)minion1).Health) + (((Minion)minion2).IsDead ? 0 : ((Minion)minion2).Health) + game.CurrentOpponent.Hero.Health); }
public void SolemnVigil_BRM_001() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PALADIN, Player2HeroClass = CardClass.PALADIN, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Solemn Vigil")); var minion1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stonetusk Boar")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion1)); Assert.AreEqual(1, testCard.Enchants.Count); Assert.AreEqual(5, testCard.Cost); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var minion2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stonetusk Boar")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion2)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); Assert.AreEqual(5, testCard.Cost); Assert.AreEqual(6, game.CurrentPlayer.Hand.Count); game.Process(MinionAttackTask.Any(game.CurrentPlayer, minion1, minion2)); Assert.AreEqual(3, testCard.Cost); game.Process(PlayCardTask.Spell(game.CurrentPlayer, testCard)); Assert.AreEqual(7, game.CurrentPlayer.Hand.Count); }
public void DruidOfTheFlame_BRM_010() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.DRUID, Player2HeroClass = CardClass.DRUID, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Druid of the Flame")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard1, 1)); var testCard2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Druid of the Flame")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard2, 2)); Assert.AreEqual(2, game.CurrentPlayer.Board.Count); Assert.AreEqual(5, ((Minion)game.CurrentPlayer.Board[0]).AttackDamage); Assert.AreEqual(2, ((Minion)game.CurrentPlayer.Board[0]).Health); Assert.AreEqual(2, ((Minion)game.CurrentPlayer.Board[1]).AttackDamage); Assert.AreEqual(5, ((Minion)game.CurrentPlayer.Board[1]).Health); }
public void CoreRager_BRM_014() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.HUNTER, DeckPlayer1 = new List <Card>() { }, Player2HeroClass = CardClass.HUNTER, FillDecks = false }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Core Rager")); var testCard2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Core Rager")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard1)); Assert.AreEqual(4, ((Minion)testCard1).Health); Assert.AreEqual(4, ((Minion)testCard1).AttackDamage); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard2)); Assert.AreEqual(7, ((Minion)testCard2).Health); Assert.AreEqual(7, ((Minion)testCard2).AttackDamage); }
public void AfterCastTriggerTest() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, Player1Deck = new List <Card> { Cards.FromName("Violet Teacher"), Cards.FromName("Mindgames"), }, Player2HeroClass = CardClass.PALADIN, Player2Deck = new List <Card> { Cards.FromName("Wisp"), Cards.FromName("Wisp"), Cards.FromName("Wisp"), Cards.FromName("Wisp"), Cards.FromName("Wild Pyromancer") }, Shuffle = false, FillDecks = false, }); game.StartGame(); game.Player1.BaseMana = 10; game.Process(PlayCardTask.Any(game.CurrentPlayer, "Violet Teacher")); game.Process(PlayCardTask.Any(game.CurrentPlayer, "Mindgames")); }
public void MadBomberBasic3() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, Player2HeroClass = CardClass.HUNTER, FillDecks = true, Splitting = true }); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; game.StartGame(); var hoarder1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Loot Hoarder")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, hoarder1)); var hoarder2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Loot Hoarder")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, hoarder2)); //game.Process(EndTurnTask.Any(game.CurrentPlayer)); //var hoarder3 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Loot Hoarder")); //game.Process(PlayCardTask.Minion(game.CurrentPlayer, hoarder3)); //var toad1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Huge Toad")); //game.Process(PlayCardTask.Minion(game.CurrentPlayer, toad1)); var bomber1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Mad Bomber")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, bomber1)); Assert.Equal(12, game.FinalSplits.Count); Assert.Equal(44, game.FinalSplits.Sum(p => p.SameState + 1)); }
public void IceLance_CS2_031() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.MAGE, Player2HeroClass = CardClass.MAGE, FillDecks = true, FillDecksPredictably = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; IPlayable testCard1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Ice Lance")); IPlayable testCard2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Ice Lance")); Assert.False(game.CurrentOpponent.Hero.IsFrozen); Assert.Equal(30, game.CurrentOpponent.Hero.Health); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, testCard1, game.CurrentOpponent.Hero)); Assert.True(game.CurrentOpponent.Hero.IsFrozen); Assert.Equal(30, game.CurrentOpponent.Hero.Health); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, testCard2, game.CurrentOpponent.Hero)); Assert.Equal(26, game.CurrentOpponent.Hero.Health); }
public void SecretActivation() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.HUNTER, Player2HeroClass = CardClass.ROGUE, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var minion1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Knife Juggler")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion1)); var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Snake Trap")); game.Process(PlayCardTask.Spell(game.CurrentPlayer, testCard)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var minion2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stonetusk Boar")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion2)); game.Process(MinionAttackTask.Any(game.CurrentPlayer, minion2, minion1)); Assert.Equal(game.CurrentOpponent.Hero.Health > 27 ? 2 : 1, ((Minion)minion1).Health); }
public void ColdlightOracle_EX1_050() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.MAGE, Player2HeroClass = CardClass.PRIEST, FillDecks = true, FillDecksPredictably = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; int handCount = game.CurrentPlayer.HandZone.Count; int handOpCount = game.CurrentOpponent.HandZone.Count; IPlayable minion1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Coldlight Oracle")); game.Process(PlayCardTask.Any(game.CurrentPlayer, minion1)); Assert.Equal(handCount + 2, game.CurrentPlayer.HandZone.Count); Assert.Equal(handOpCount + 2, game.CurrentOpponent.HandZone.Count); }
/// <summary> /// Plays a card that matches the provided name. Returns the created entity as the given type. /// If you play a minion, the minion's position will be the rightmost position on the board. /// </summary> /// <returns>The created entity object from the card.</returns> public static T ProcessCard <T>(this Game game, string cardName, IPlayable target = null, bool asZeroCost = false, int chooseOne = 0, int zonePosition = -1) where T : IPlayable { IPlayable entity; try { entity = Generic.DrawCard(game.CurrentPlayer, Cards.FromName(cardName)); } catch (NullReferenceException) { throw new Exception($"There is no card named \"{cardName}\". Please Check Again!"); } if (!(entity is T t)) { throw new ArgumentException($"The given card is not {typeof(T)}"); } if (target != null && !(target is ICharacter)) { throw new ArgumentException($"Can't target non-charater entity {target}"); } if (asZeroCost) { entity.Cost = 0; } game.DeathProcessingAndAuraUpdate(); game.Process(PlayCardTask.Any(game.CurrentPlayer, t, (ICharacter)target, zonePosition, chooseOne)); return(t); }
/// <summary> /// Plays a card that matches the provided name. Returns the created <see cref="IPlayable"/> object from the card. /// If you play a minion, the minion's position will be the rightmost position on the board. /// </summary> /// <returns>The created entity object from the card.</returns> public static IPlayable ProcessCard(this Game game, string cardName, IPlayable target = null, bool asZeroCost = false, int chooseOne = 0, int zonePosition = -1) { var character = target as ICharacter; if (target != null && character == null) { throw new ArgumentException($"Can't target non-charater entity {target}"); } IPlayable entity; try { entity = Generic.DrawCard(game.CurrentPlayer, Cards.FromName(cardName)); } catch (NullReferenceException) { throw new Exception($"There is no card named \"{cardName}\". Please Check Again!"); } if (asZeroCost) { entity.Cost = 0; } game.DeathProcessingAndAuraUpdate(); var option = PlayCardTask.Any(game.CurrentPlayer, entity, character, zonePosition, chooseOne); if (!game.Process(option)) { throw new Exception($"{option} is not a valid task."); } return(entity); }
public void VolcanicDrake_BRM_025() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.MAGE, Player2HeroClass = CardClass.MAGE, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Volcanic Drake")); var minion = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stonetusk Boar")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion)); Assert.AreEqual(1, testCard.Enchants.Count); Assert.AreEqual(6, testCard.Cost); game.Process(HeroPowerTask.Any(game.CurrentPlayer, minion)); Assert.AreEqual(5, testCard.Cost); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); Assert.AreEqual(6, testCard.Cost); }
public void BlackwingTechnician_BRM_033() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, DeckPlayer1 = new List <Card>() { Cards.FromName("Azure Drake") }, Player2HeroClass = CardClass.PRIEST, DeckPlayer2 = new List <Card>(), FillDecks = false }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Blackwing Technician")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard1)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var testCard2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Blackwing Technician")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard2)); Assert.AreEqual(3, ((Minion)testCard1).AttackDamage); Assert.AreEqual(5, ((Minion)testCard1).Health); Assert.AreEqual(2, ((Minion)testCard2).AttackDamage); Assert.AreEqual(4, ((Minion)testCard2).Health); }
public void MajordomoExecutus_BRM_027() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.MAGE, Player2HeroClass = CardClass.PRIEST, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Majordomo Executus")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var spell = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Shadow Word: Death")); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, spell, testCard)); Assert.AreEqual(8, game.CurrentOpponent.Hero.Health); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(HeroPowerTask.Any(game.CurrentPlayer)); Assert.AreEqual(22, game.CurrentOpponent.Hero.Health); }
public void TwilightWhelp_BRM_004() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, DeckPlayer1 = new List <Card>() { Cards.FromName("Azure Drake") }, Player2HeroClass = CardClass.PRIEST, DeckPlayer2 = new List <Card>(), FillDecks = false }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Twilight Whelp")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard1)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var testCard2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Twilight Whelp")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard2)); Assert.AreEqual(3, ((Minion)testCard1).Health); Assert.AreEqual(1, ((Minion)testCard2).Health); }
public static void WhileCardTest() { bool flag = true; Game game = null; while (flag) { game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.MAGE, Player2HeroClass = CardClass.MAGE, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Dirty Rat")); var hasMinion = game.CurrentOpponent.HandZone.GetAll.Any(p => p is Minion); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard)); flag = hasMinion ? 1 == game.CurrentOpponent.BoardZone.Count : 0 == game.CurrentOpponent.BoardZone.Count; } ShowLog(game, LogLevel.VERBOSE); Console.WriteLine(game.CurrentOpponent.HandZone.FullPrint()); Console.WriteLine(game.CurrentOpponent.BoardZone.FullPrint()); }
public static void BasicBuffTest() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, Player2HeroClass = CardClass.HUNTER, FillDecks = true }); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; game.StartGame(); var minion = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stonetusk Boar")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion)); var spell1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Power Word: Shield")); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, spell1, minion)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var spell2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Hunter's Mark")); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, spell2, minion)); ShowLog(game, LogLevel.VERBOSE); }
public void GrimPatron_BRM_019() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.MAGE, Player2HeroClass = CardClass.MAGE, FillDecks = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; var testCard = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Grim Patron")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, testCard)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); var minion1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stonetusk Boar")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion1)); var minion2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Reckless Rocketeer")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion2)); game.Process(MinionAttackTask.Any(game.CurrentPlayer, minion1, testCard)); Assert.AreEqual(2, game.CurrentOpponent.Board.Count); game.Process(MinionAttackTask.Any(game.CurrentPlayer, minion2, testCard)); Assert.AreEqual(1, game.CurrentOpponent.Board.Count); }
public void SilenceRebuffTest() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, Player1Deck = new List <Card>() { Cards.FromName("Silence"), Cards.FromName("Power Word: Shield"), Cards.FromName("Murloc Tinyfin"), Cards.FromName("Power Word: Shield") }, Player2HeroClass = CardClass.PRIEST, Shuffle = false, FillDecks = true, FillDecksPredictably = true }); game.StartGame(); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; game.Process(PlayCardTask.Any(game.CurrentPlayer, "Murloc Tinyfin")); Assert.Equal(1, game.CurrentPlayer.BoardZone[0].Health); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, "Power Word: Shield", game.CurrentPlayer.BoardZone[0])); Assert.Equal(3, game.CurrentPlayer.BoardZone[0].Health); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, "Silence", game.CurrentPlayer.BoardZone[0])); Assert.Equal(1, game.CurrentPlayer.BoardZone[0].Health); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, "Power Word: Shield", game.CurrentPlayer.BoardZone[0])); Assert.Equal(3, game.CurrentPlayer.BoardZone[0].Health); }
static void CloneAdapt() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.DRUID, Player2HeroClass = CardClass.DRUID, FillDecks = true }); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; game.StartGame(); var minion = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Elder Longneck")); var clone1 = game.Clone(); var clone2 = game.Clone(); var clone3 = game.Clone(); var clone4 = game.Clone(); game.Process(PlayCardTask.Minion(game.CurrentPlayer, game.CurrentPlayer.HandZone[4])); game.Process(ChooseTask.Pick(game.CurrentPlayer, game.CurrentPlayer.Choice.Choices[0])); clone1.Process(PlayCardTask.Minion(clone1.CurrentPlayer, clone1.CurrentPlayer.HandZone[4])); clone1.Process(ChooseTask.Pick(clone1.CurrentPlayer, clone1.CurrentPlayer.Choice.Choices[0])); clone2.Process(PlayCardTask.Minion(clone2.CurrentPlayer, clone2.CurrentPlayer.HandZone[4])); clone2.Process(ChooseTask.Pick(clone2.CurrentPlayer, clone2.CurrentPlayer.Choice.Choices[0])); clone3.Process(PlayCardTask.Minion(clone3.CurrentPlayer, clone3.CurrentPlayer.HandZone[4])); clone3.Process(ChooseTask.Pick(clone3.CurrentPlayer, clone3.CurrentPlayer.Choice.Choices[0])); clone4.Process(PlayCardTask.Minion(clone4.CurrentPlayer, clone4.CurrentPlayer.HandZone[4])); clone4.Process(ChooseTask.Pick(clone4.CurrentPlayer, clone4.CurrentPlayer.Choice.Choices[0])); }
public void Aura_LoopBug() { var game = new Game(new GameConfig { StartPlayer = 1, FillDecks = true, FillDecksPredictably = true }); game.StartGame(); game.Player1.BaseMana = 10; var minion1 = (Minion)Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stormwind Champion")); var minion2 = (Minion)Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stormwind Champion")); game.Process(PlayCardTask.Any(game.CurrentPlayer, minion1)); Assert.Equal(6, minion1.BaseHealth); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(PlayCardTask.Any(game.CurrentPlayer, minion2)); Assert.Equal(7, minion1.BaseHealth); }
public void BasicHealthBuffTest1() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, Player2HeroClass = CardClass.HUNTER, FillDecks = true, FillDecksPredictably = true }); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; game.StartGame(); var minion = (ICharacter)Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Bloodfen Raptor")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion)); IPlayable spell1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Power Word: Shield")); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, spell1, minion)); Assert.Equal(4, ((Minion)minion).Health); game.Process(EndTurnTask.Any(game.CurrentPlayer)); IPlayable spell2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Hunter's Mark")); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, spell2, minion)); Assert.Equal(1, ((Minion)minion).Health); }
public void BasicAttackBuffTest1() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PRIEST, Player2HeroClass = CardClass.HUNTER, FillDecks = true, FillDecksPredictably = true }); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; game.StartGame(); var minion1 = (ICharacter)Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Bloodfen Raptor")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion1)); IPlayable spell1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Inner Rage")); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, spell1, minion1)); Assert.Equal(5, ((Minion)minion1).AttackDamage); Assert.Equal(1, ((Minion)minion1).Health); game.Process(EndTurnTask.Any(game.CurrentPlayer)); IPlayable minion2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Aldor Peacekeeper")); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, minion2, minion1)); Assert.Equal(1, ((Minion)minion1).AttackDamage); Assert.Equal(1, ((Minion)minion1).Health); }
public void TauntTest() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.ROGUE, Player2HeroClass = CardClass.WARLOCK, FillDecks = true, FillDecksPredictably = true }); game.StartGame(); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); game.Process(HeroPowerTask.Any(game.CurrentPlayer)); Assert.True(game.CurrentPlayer.Hero.IsValidAttackTarget(game.CurrentOpponent.Hero)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); IPlayable taunt = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Voidwalker")); game.Process(PlayCardTask.Any(game.CurrentPlayer, taunt)); game.Process(EndTurnTask.Any(game.CurrentPlayer)); Assert.True(((ICharacter)taunt).HasTaunt); Assert.False(game.CurrentPlayer.Hero.IsValidAttackTarget(game.CurrentOpponent.Hero)); Assert.True(game.CurrentPlayer.Hero.IsValidAttackTarget(taunt as ICharacter)); }
public void BasicHealthAuraTest1() { var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.PALADIN, Player2HeroClass = CardClass.MAGE, FillDecks = true, FillDecksPredictably = true }); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; game.StartGame(); IPlayable minion1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stormwind Champion")); IPlayable minion2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Stormwind Champion")); IPlayable minion3 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Shattered Sun Cleric")); game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion1)); // 6/6 game.CurrentPlayer.UsedMana = 0; game.Process(PlayCardTask.Minion(game.CurrentPlayer, minion2)); // 7/7 game.CurrentPlayer.UsedMana = 0; game.Process(PlayCardTask.MinionTarget(game.CurrentPlayer, minion3, minion2)); game.CurrentPlayer.UsedMana = 0; game.Process(EndTurnTask.Any(game.CurrentPlayer)); // (7/7), (8/8), (5/4) IPlayable spell1 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Flamestrike")); game.Process(PlayCardTask.Spell(game.CurrentPlayer, spell1)); // (7/3), (8/4) game.CurrentPlayer.UsedMana = 0; IPlayable spell2 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Arcane Explosion")); game.Process(PlayCardTask.Spell(game.CurrentPlayer, spell2)); IPlayable spell3 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Arcane Explosion")); game.Process(PlayCardTask.Spell(game.CurrentPlayer, spell3)); Assert.Equal(2, ((ICharacter)minion2).Health); // (7/1), (8/2) IPlayable spell4 = Generic.DrawCard(game.CurrentPlayer, Cards.FromName("Arcane Explosion")); game.Process(PlayCardTask.Spell(game.CurrentPlayer, spell4)); Assert.Equal(1, ((ICharacter)minion2).Health); // (7/1) Assert.Equal(Zone.PLAY, ((ICharacter)minion2).Zone.Type); }
public static int OneRoundAOE(List <string> AICards, List <Card> combo, string comboClass) { if (!CARDCLASS.ContainsKey(comboClass)) { return(-1); } var game = new Game(new GameConfig { StartPlayer = 1, Player1HeroClass = CardClass.MAGE, Player2HeroClass = (CardClass)CARDCLASS[comboClass], Shuffle = false, FillDecks = true, FillDecksPredictably = false }); game.Player1.BaseMana = 10; game.Player2.BaseMana = 10; game.StartGame(); foreach (string cardname in AICards) //draw all cards due to mana cost limit to 10/round { //Console.WriteLine(cardname); game.Process(PlayCardTask.Any(game.CurrentPlayer, Entity.FromCard(game.CurrentPlayer, Cards.FromName(cardname), zone: game.CurrentPlayer.HandZone))); game.Process(EndTurnTask.Any(game.CurrentPlayer)); //end round switch to our side game.Process(EndTurnTask.Any(game.CurrentPlayer)); //end round skip our side, back to opponent } game.Process(EndTurnTask.Any(game.CurrentPlayer)); //end round switch to our side if (combo[0].Type.ToString() != "MINION") //minion card use first { combo.Reverse(); } foreach (Card card in combo) //use card one by one { if (card.Type.ToString() != "MINION") { IPlayable SpellTest = Generic.DrawCard(game.CurrentPlayer, card); game.Process(PlayCardTask.SpellTarget(game.CurrentPlayer, SpellTest, game.CurrentOpponent.BoardZone[0])); } else //spell or weapon { game.Process(PlayCardTask.Any(game.CurrentPlayer, Entity.FromCard(game.CurrentPlayer, card, zone: game.CurrentPlayer.HandZone))); } } /*Program.ShowLog(game, LogLevel.VERBOSE); * Console.WriteLine(game.CurrentOpponent.BoardZone.FullPrint()); * Console.WriteLine(game.CurrentPlayer.BoardZone.FullPrint());*/ int health = game.CurrentOpponent.BoardZone.Health(); return(health); }
public static PlayerTask KettleOptionToPlayerTask(Game Game, int sendOptionId, int sendOptionMainOption, int sendOptionTarget, int sendOptionPosition, int sendOptionSubOption) { SabberStoneCore.Kettle.PowerAllOptions allOptions = Game.AllOptionsMap[sendOptionId]; Console.WriteLine(allOptions.Print()); List <PlayerTask> tasks = allOptions.PlayerTaskList; SabberStoneCore.Kettle.PowerOption powerOption = allOptions.PowerOptionList[sendOptionMainOption]; OptionType optionType = powerOption.OptionType; PlayerTask task = null; switch (optionType) { case OptionType.END_TURN: task = EndTurnTask.Any(Game.CurrentPlayer); break; case OptionType.POWER: SabberStoneCore.Kettle.PowerSubOption mainOption = powerOption.MainOption; IPlayable source = Game.IdEntityDic[mainOption.EntityId]; IPlayable target = sendOptionTarget > 0 ? Game.IdEntityDic[sendOptionTarget] : null; List <SabberStoneCore.Kettle.PowerSubOption> subObtions = powerOption.SubOptions; if (source.Zone?.Type == Zone.PLAY) { task = MinionAttackTask.Any(Game.CurrentPlayer, source, target); } else { switch (source.Card.Type) { case CardType.HERO: task = HeroAttackTask.Any(Game.CurrentPlayer, target); break; case CardType.HERO_POWER: task = HeroPowerTask.Any(Game.CurrentPlayer, target); break; default: task = PlayCardTask.Any(Game.CurrentPlayer, source, target, sendOptionPosition, sendOptionSubOption); break; } } break; case OptionType.PASS: break; default: throw new NotImplementedException(); } return(task); }