public void TestBolsterAllies()
        {
            Start game = new Start();
            game.beginGame();
            Legacy legacy = new Legacy();

            List<int> firstList = new List<int>();
            foreach (Hero hero in GameEngine.getHeroes())
            {
                firstList.Add(hero.hand.Count());
            }

            Card bolster = new Card("Images\\Hero\\Legacy\\BolsterAllies.png");
            legacy.BolsterAllies(bolster);

            List<int> secondList = new List<int>();
            foreach (Hero hero in GameEngine.getHeroes())
            {
                secondList.Add(hero.hand.Count());
            }

            for(int i = 0; i < secondList.Count(); i++)
            {
                Assert.AreEqual(secondList[i], firstList[i] + 1);
            }
        }
 ////Minions
 public void PterodactylThief(Card card)
 {
     card.cardType = Card.CardType.Environment;
     PterodactylThief ptero = new PterodactylThief();
     GameEngine.getEnvironment().addMinion(ptero);
     Console.WriteLine("Pterodactyl Thief: " + ptero.lifeTotal);
 }
        public Deck(string characterName, IPlayer.PlayerType playerType)
        {
            var files = Directory.GetFiles(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\\Images\\"+playerType+"\\" + characterName);
            cards = new List<Card>();

            foreach (var fileName in files)
            {
                var cardTitle = Path.GetFileNameWithoutExtension(fileName);

                if (fileName.Contains(Utility.splitDelimeter))
                {
                    var number = Utility.getNumOfCards(cardTitle);
                    var title = Utility.removeNumOfCards(cardTitle);

                    Console.WriteLine("\n" + title);
                    for (int k = 0; k < number; k++)
                    {
                        Card card = new Card(fileName);
                        cards.Add(card);
                    }

                }
                else
                {
                    Card card = new Card(fileName);
                    cards.Add(card);
                }
            }
        }
 public void PrimordialPlantLife_Continuation(int discardedCards, Hero target, Card card)
 {
     if (discardedCards == 0)
     {
         DamageEffects.DealDamage(this,new List<Targetable>(){target}, 4, DamageEffects.DamageType.Toxic);
     }
     card.SendToGraveyard(this, cardsOnField);
 }
 public void BreakDown()
 {
     drawThisCard = null;
     discardedCardsThisTurn = null;
     cardClickedArray = null;
     gridLayout = null;
     handViewer = null;
 }
        public void ObsidianField(Card card)
        {
            card.cardType = Card.CardType.Ongoing;
            GameEngine.obsidianInPlay = true;
            foreach (Hero hero in GameEngine.getHeroes()) {

            }
            DamageEffects.damageDealtHandlers.Add(ObsidianFieldHandler);
        }
        public object[] PrimordialPlantLife(Card card)
        {
            card.cardType = Card.CardType.OneShot;

            List<Hero> targets = getTargets(GameEngine.getHeroes());
            DiscardedAction act = PrimordialPlantLife_Continuation;

            return new object[] { act, GameEngine.ForcedEffect.PrimordialPlant, GameEngine.getHeroes(), card };
        }
        public void TestDangerSense()
        {
            Start testGame = new Start();
            testGame.beginGame();
            Legacy testLegacy = new Legacy();

            Card testDanger = new Card("Images\\Hero\\Legacy\\DangerSense.png");
            testLegacy.DangerSense(testDanger);
            Assert.True(testLegacy.immuneToEnvironment);
        }
        public void TestBackFistStrike()
        {
            Start testGame = new Start();
            testGame.beginGame();
            Legacy testLegacy = new Legacy();

            Card testStrike = new Card("Images\\Hero\\Legacy\\BackFistStrike.png");
            testLegacy.BackFistStrike(testStrike);
            Assert.AreEqual(GameEngine.getVillain().lifeTotal, 35); //change to 36 when done individually, 35 with all are executed, change when static problem fixed...
        }
        public void TestBattalion()
        {
            Start game = new Start();
            game.beginGame();
            BaronBlade test = new BaronBlade();
            Card battleCard = new Card("Images\\Villain\\BaronBlade\\BladeBattalion.png");
            test.BladeBattalion(battleCard);

            Assert.AreEqual(GameEngine.getVillain().getMinions()[0].ToString(), (new BladeBattalion()).ToString());
        }
        public void TestFleshRepairNanites()
        {
            Start game = new Start();
            game.beginGame();

            BaronBlade test = new BaronBlade();
            Card nanoCard = new Card("Images\\Villain\\BaronBlade\\FleshRepairNanites.png");
            test.FleshRepairNanites(nanoCard);

            Assert.AreEqual(GameEngine.getVillain().lifeTotal, 50);
        }
        public void testPtero()
        {
            Start testGame = new Start();
            testGame.beginGame();
            InsulaPrimus testEnvo = new InsulaPrimus();
            Card testPtero = new Card("Images\\Environment\\InsulaPrimus\\2-PterodactylThief.png");
            Assert.NotNull(testPtero);
            testEnvo.PterodactylThief(testPtero);
            testEnvo.addMinion(new PterodactylThief());

            Assert.AreEqual(GameEngine.getEnvironment().getMinions().ToString(), testEnvo.getMinions().ToString());
        }
        public void testTRex()
        {
            Start testGame = new Start();
            testGame.beginGame();
            InsulaPrimus testEnvo = new InsulaPrimus();
            Card testRex = new Card("Images\\Environment\\InsulaPrimus\\2-EnragedTRex.png");
            Assert.NotNull(testRex);
            testEnvo.EnragedTRex(testRex);
            testEnvo.addMinion(new EnragedTRex());

            Assert.AreEqual(GameEngine.getEnvironment().getMinions().ToString(), testEnvo.getMinions().ToString());
        }
        public void TestHastenDoom()
        {
            Start game = new Start();
            game.beginGame();
            BaronBlade test = new BaronBlade();
            Card hastenCard = new Card("Images\\Villain\\BaronBlade\\HastenDoom.png");
            test.HastenDoom(hastenCard);

            for(int i=0; i < GameEngine.getHeroes().Count; i++){
            Assert.AreEqual(GameEngine.getHeroes()[i].lifeTotal, 32);
            }
        }
        public void testObsidian()
        {
            Start testGame = new Start();
            testGame.beginGame();
            InsulaPrimus testEnvo = new InsulaPrimus();
            Card testObsidian = new Card("Images\\Environment\\InsulaPrimus\\3-ObsidianField.png");

            testEnvo.ObsidianField(testObsidian);

            Assert.True(GameEngine.obsidianInPlay);
            //fix this test
            Assert.True(false);
             //Assert.AreEqual(DamageEffects.GlobalDamageAmplification, 1);
        }
        public void TestElbowSmash()
        {
            Start game = new Start();
            game.beginGame();
            Haka haka = (Haka)ObjectMother.TestHero();
            BaronBlade baron = (BaronBlade)ObjectMother.TestVillain();
            GameEnvironment env = (GameEnvironment)ObjectMother.TestEnvironment();

            Minion min1 = ObjectMother.TestMinion();
            GameEngine.getVillain().addMinion(min1);

            Minion min2 = ObjectMother.TestMinion();
            GameEngine.getEnvironment().addMinion(min2);

            Card elbowSmash = new Card("Images\\Hero\\Haka\\ElbowSmash.png");
        }
        public void TestDominion()
        {
            GameEngine.TearDownGameEngine();
            Start game = new Start();

            game.beginGame();

            Haka haka= (Haka)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Haka));
            Card envCard = new Card("Images\\Environment\\InsulaPrimus\\2-PterodactylThief.png");
            envCard.cardType = Card.CardType.Environment;
            GameEngine.getEnvironment().cardsOnField.Add(envCard);

            Card dominion = new Card("Images\\Hero\\Haka\\3-Dominion.png");
            haka.Dominion(dominion);

            GameEngine.getEnvironment().cardsOnField.Find(x=> x.cardType== Card.CardType.Environment).SendToGraveyard(GameEngine.getEnvironment(), GameEngine.getEnvironment().cardsOnField);
        }
        public void TestEnduringIntercession()
        {
            GameEngine.TearDownGameEngine();
            Start game = new Start();
            game.beginGame();

            Haka haka = (Haka)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Haka));
            Legacy legacy= (Legacy)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Legacy));
            InsulaPrimus env = (InsulaPrimus)GameEngine.getEnvironment();
            Card enduringIntercessionCard = new Card("Images\\Hero\\Haka\\3-EnduringIntercession.png");

            haka.EnduringIntercession(enduringIntercessionCard);

            DamageEffects.DealDamage(env, new List<Targetable>(){legacy, haka},4, DamageEffects.DamageType.Melee);
            Assert.AreEqual(legacy.maxHealth, legacy.lifeTotal);
            Assert.AreEqual(haka.maxHealth - 8, haka.lifeTotal); //haka takes his own and legacy's damage

            //test that damage wasn't absorbed for damage not from environment
            var hakaTotal = haka.lifeTotal;
            DamageEffects.DealDamage(legacy, new List<Targetable>() { legacy, haka }, 4, DamageEffects.DamageType.Melee);
            Assert.AreEqual(legacy.maxHealth -4, legacy.lifeTotal); //legacy did take 4 damage
            Assert.AreEqual(hakaTotal - 4, haka.lifeTotal); //haka takes ONLY his own damage
        }
        public void TestHakaOfBattle()
        {
            Start game = new Start();
            game.beginGame();
            Haka haka = (Haka)ObjectMother.TestHero();
            Card hakaOfBattleCard = new Card("Images\\Hero\\Haka\\HakaOfBattle.png");
            int startLifeTotal = GameEngine.getVillain().lifeTotal;
            int startHandCount = haka.hand.Count;

            haka.DiscardCard(haka.hand[0]);

            haka.HakaOfBattle(hakaOfBattleCard);

            Assert.True(false);
            //int damageAmount= 2 + haka.damageAmplificationFromPlayer;
            //DamageEffects.DealDamageToVillain(GameEngine.getVillain(), damageAmount, DamageEffects.DamageType.Melee);
            //Assert.AreEqual(GameEngine.getVillain().lifeTotal, startLifeTotal - 3);

            ////needs to reset haka's damage amp after first damage has been used
            //int damageAmount2 = 2 + haka.damageAmplificationFromPlayer;
            //DamageEffects.DealDamageToVillain(GameEngine.getVillain(), damageAmount, DamageEffects.DamageType.Melee);
            //Assert.AreEqual(GameEngine.getVillain().lifeTotal, startLifeTotal - 5);

            //also need to test that it doesn't use the bonus damage until he is dealing it for the first time
        }
        private void drawNPCBoard(Villain villain, GameEnvironment env)
        {
            string villainName = villain.getCharacterName();
            Card villainCard = new Card(VILLAIN_IMAGE_PATH + villainName + "/NonPlayable/" + villainName + "_initial.png");
            villainCard.MouseDown += new MouseButtonEventHandler(Mouse_Click_Listener);
            Card villainDeck = new Card(VILLAIN_IMAGE_PATH + villainName + "/NonPlayable/" + villainName + "_back.png");
            villainDeck.MouseDown += new MouseButtonEventHandler(Mouse_Click_Listener);
            Card villainInst = new Card(VILLAIN_IMAGE_PATH + villainName + "/NonPlayable/" + villainName + "_instr_front.png");
            villainInst.MouseDown += new MouseButtonEventHandler(Mouse_Click_Listener);
            Card envDeck = new Card("Images/Environment/" + env.characterName + "/NonPlayable/" + "insula_primus_back.png");
            envDeck.MouseDown += new MouseButtonEventHandler(Mouse_Click_Listener);

            Utility.addElementToGrid(villainCard, VILLAIN_ROW, CHARACTER_COLUMN, gridLayout);
            Utility.addElementToGrid(villainInst, VILLAIN_ROW, INSTRUCTION_COLUMN, gridLayout);
            Utility.addElementToGrid(villainDeck, VILLAIN_ROW, DECK_COLUMN, gridLayout);
            Utility.addElementToGrid(envDeck, ENVIRONMENT_ROW, DECK_COLUMN, gridLayout);

            addHealthLabel(villain, VILLAIN_ROW);

            Card envGraveyard = new Card(GRAVEYARD_IMAGE_PATH);
            envGraveyard.MouseDown += new MouseButtonEventHandler(Mouse_Click_Listener);
            Utility.addElementToGrid(envGraveyard, ENVIRONMENT_ROW, GRAVEYARD_COLUMN, gridLayout);

            Card villainGraveYard = new Card(GRAVEYARD_IMAGE_PATH);
            villainGraveYard.MouseDown += new MouseButtonEventHandler(Mouse_Click_Listener);
            Utility.addElementToGrid(villainGraveYard, VILLAIN_ROW, GRAVEYARD_COLUMN, gridLayout);
        }
        public void TestGroundPoundWithExistingDamageHandler()
        {
            GameEngine.TearDownGameEngine();
            Start game = new Start();

            game.beginGame();

            Haka haka = (Haka)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Haka));
            Card groundPoundCard = new Card("Images\\Hero\\Haka\\2-GroundPound.png");
            var  insulaPrimus =(InsulaPrimus)GameEngine.getEnvironment();

            DamageEffects.damageDealtHandlers.Add(insulaPrimus.ObsidianFieldHandler);

            haka.GroundPound_Continuation(0, groundPoundCard);

            int damageAmount = 20;
            DamageEffects.DealDamage(insulaPrimus, new List<Targetable>() { haka }, damageAmount, DamageEffects.DamageType.Melee);
            Assert.AreEqual(haka.maxHealth, haka.lifeTotal);
        }
 public void EnragedTRex(Card card)
 {
     EnragedTRex rex = new EnragedTRex();
     GameEngine.getEnvironment().addMinion(rex);
     Console.WriteLine("Enraged T-Rex: " + rex.lifeTotal);
 }
 public void VolcanicEruption(Card card)
 {
     List<Hero> targets = getTargets(GameEngine.getHeroes());
     GameEngine.volcanoInPlay = true;
 }
        public void TestGroundPound()
        {
            GameEngine.TearDownGameEngine();
            Start game = new Start();

            game.beginGame();

            Haka haka = (Haka)GameEngine.getHeroes().Find(x => x.GetType() == typeof(Haka));
            Card groundPoundCard = new Card("Images\\Hero\\Haka\\2-GroundPound.png");

            haka.GroundPound_Continuation(0, groundPoundCard);

            int damageAmount = 20;
            //tests damage from nonhero
            DamageEffects.DealDamage(GameEngine.getEnvironment(), new List<Targetable>() { haka }, damageAmount, DamageEffects.DamageType.Melee);
            Assert.AreEqual(haka.maxHealth, haka.lifeTotal);

            //tests damage from hero
            DamageEffects.DealDamage(haka, new List<Targetable>() { haka }, damageAmount, DamageEffects.DamageType.Melee);
            Assert.AreEqual(haka.maxHealth-damageAmount, haka.lifeTotal);
        }
        public void TestTaMoko()
        {
            Start game = new Start();
            game.beginGame();
            Haka haka = (Haka)ObjectMother.TestHero();
            int startingLifeTotal = haka.lifeTotal;

            Card tamokoCard = new Card("Images\\Hero\\Haka\\TaMoko.png");
            haka.TaMoko(tamokoCard);

            Assert.True(false);
            //DamageEffects.DealDamgae(haka, 2, DamageEffects.DamageType.Melee);
            //Assert.AreEqual(startingLifeTotal - 1, haka.lifeTotal);

            tamokoCard.SendToGraveyard(haka, haka.cardsOnField);

            //DamageEffects.DealDamageToHero(haka, 2, DamageEffects.DamageType.Melee);
            //Assert.AreEqual(startingLifeTotal - 3, haka.lifeTotal);
        }
 public void VelociraptorPack(Card card)
 {
     VelociraptorPack velo = new VelociraptorPack();
     GameEngine.getEnvironment().addMinion(velo);
     Console.WriteLine("Velociraptor Pack: " + velo.lifeTotal);
 }
 public void RiverOfLava(Card card)
 {
     List<Hero> targets = getTargets(GameEngine.getHeroes());
     GameEngine.lavaInPlay = true;
 }
        public void TestMere()
        {
            GameEngine.TearDownGameEngine();
            Haka testHaka= new Haka();
            BaronBlade testVil = new BaronBlade();
            InsulaPrimus env = new InsulaPrimus();
            List<Hero> myHeroes = new List<Hero>() { testHaka };
            typeof(GameEngine).GetField("heroes", BindingFlags.Static| BindingFlags.NonPublic).SetValue(null, myHeroes);
            typeof(GameEngine).GetField("villain", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, testVil);
            typeof(GameEngine).GetField("environment", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, env);
            Card mere= new Card("Images\\Hero\\Haka\\3-Mere.png");

            //deals damage to villain because cardClickedArray is empty
            GameBoard.cardClickedArray = new List<Card>();
            testHaka.MerePower(mere, null);

            Assert.AreEqual(5, testHaka.hand.Count);
            Assert.AreNotEqual(GameEngine.getVillain().maxHealth, GameEngine.getVillain().lifeTotal);
        }
        private void addButtons()
        {
            sideBar.Children.RemoveRange(0, sideBar.Children.Count);

            if (((Targetable)GameEngine.getCurrentPlayer()).lifeTotal <= 0)
            {

                Card death = new Card("Images\\Hero\\" + GameEngine.getCurrentPlayer().characterName + "\\" + GameEngine.getCurrentPlayer().characterName.ToLower() + "_death.jpg");
                Grid.SetColumn(death, 1);
                List<Card> deadHand = new List<Card>();
                deadHand.Add(death);
                initGrid(deadHand);

                Button power1Button = new Button();
                power1Button.Content = "Power 1";
                power1Button.Click += new RoutedEventHandler(Power1_Action);

                Button power2Button = new Button();
                power2Button.Content = "Power 2";
                power2Button.Click += new RoutedEventHandler(Power2_Action);

                Button power3Button = new Button();
                power3Button.Content = "Power 3";
                power3Button.Click += new RoutedEventHandler(Power3_Action);
            }
            else
            {

                Button discardButton = new Button();
                discardButton.Content = "Discard";
                discardButton.Click += new RoutedEventHandler(Discard_Action);

                Button cancelButton = new Button();
                cancelButton.Content = "Cancel Action";
                cancelButton.Click += new RoutedEventHandler(Cancel_Action);

                Button closeButton = new Button();
                closeButton.Content = "Close";
                closeButton.Click += new RoutedEventHandler(Close_Action);

                Button endTurnButton = new Button();
                endTurnButton.Content = "End Turn!";
                endTurnButton.Click += new RoutedEventHandler(End_Turn);

                if (!GameEngine.playerPlayedCard)
                {
                    Button playButton = new Button();
                    playButton.Content = "Play Card";
                    playButton.Click += new RoutedEventHandler(Play_Card);
                    sideBar.Children.Add(playButton);
                }

                if (!GameEngine.playerUsedPower)
                {
                    Button powerButton = new Button();
                    powerButton.Content = "Player Power";
                    powerButton.Click += new RoutedEventHandler(Power_Action);
                    sideBar.Children.Add(powerButton);
                }

                sideBar.Children.Add(cancelButton);
                sideBar.Children.Add(closeButton);
                sideBar.Children.Add(endTurnButton);
                sideBar.Children.Add(discardButton);
            }
        }
        public void TestRampage()
        {
            //add mocks for GameEngine.getHeroes() and GameEngine.getVillain()
            Start game = new Start();
            game.beginGame();
            Haka haka = (Haka)ObjectMother.TestHero();
            Minion min1 = ObjectMother.TestMinion();
            GameEngine.getVillain().addMinion(min1);

            Card rampageCard = new Card("Images\\Hero\\Haka\\Rampage.png");
            haka.Rampage(rampageCard);
            Assert.AreEqual(GameEngine.getVillain().lifeTotal, 35);
        }