public void CheckApplyCardParams()
        {
            gm = GameControllerTestHelper.InitDemoGame();
            GameControllerTestHelper.useCard(2, gm);
            var playerParams = gm.GetPlayerParams(SelectPlayer.First);


            Assert.AreEqual(playerParams[Attributes.Wall], 5 - 4, "Не правильно применен параметр PlayerWall");
            Assert.AreEqual(playerParams[Attributes.Tower], 10 - 8, "Не правильно применен параметр PlayerTower");
            Assert.AreEqual(playerParams[Attributes.DiamondMines], 1 + 2, "Не правильно применен параметр PlayerDiamondMines");
            Assert.AreEqual(playerParams[Attributes.Menagerie], 1 + 3, "Не правильно применен параметр PlayerMenagerie");
            Assert.AreEqual(playerParams[Attributes.Colliery], 1 + 4, "Не правильно применен параметр PlayerColliery");
            Assert.AreEqual(playerParams[Attributes.Diamonds], 5 + 11 + 3, "Не правильно применен параметр PlayerDiamonds");
            Assert.AreEqual(playerParams[Attributes.Animals], 5 + 12 + 4 - 5, "Не правильно применен параметр PlayerAnimals");
            Assert.AreEqual(playerParams[Attributes.Rocks], 5 + 13 + 5, "Не правильно применен параметр PlayerRocks");

            playerParams = gm.GetPlayerParams(SelectPlayer.Second);
            Assert.AreEqual(playerParams[Attributes.Wall], 5 - 4, "Не правильно применен параметр EnemyWall");
            Assert.AreEqual(playerParams[Attributes.Tower], 10 - 8, "Не правильно применен параметр EnemyTower");
            Assert.AreEqual(playerParams[Attributes.DiamondMines], 1 + 2, "Не правильно применен параметр EnemyDiamondMines");
            Assert.AreEqual(playerParams[Attributes.Menagerie], 1 + 3, "Не правильно применен параметр EnemyMenagerie");
            Assert.AreEqual(playerParams[Attributes.Colliery], 1 + 4, "Не правильно применен параметр EnemyColliery");
            Assert.AreEqual(playerParams[Attributes.Diamonds], 5 + 11, "Не правильно применен параметр EnemyDiamonds");
            Assert.AreEqual(playerParams[Attributes.Animals], 5 + 12, "Не правильно применен параметр EnemyAnimals");
            Assert.AreEqual(playerParams[Attributes.Rocks], 5 + 13, "Не правильно применен параметр EnemyRocks");
        }
 public void CheckApplyEnemyDirectDamage()
 {
     gm = GameControllerTestHelper.InitDemoGame();
     GameControllerTestHelper.useCard(3, gm);
     Assert.AreEqual(gm.GetPlayerParams(SelectPlayer.Second)[Attributes.Wall], 0, "Не правильно применен параметр EnemyDirectDamage");
     Assert.AreEqual(gm.GetPlayerParams(SelectPlayer.Second)[Attributes.Tower], 0, "Не правильно применен параметр EnemyDirectDamage");
 }
        public void CheckAddDiamonds()
        {
            gm = GameControllerTestHelper.InitDemoGame(2);
            GameControllerTestHelper.useCard(6, gm);
            var playerParams = gm.GetPlayerParams(SelectPlayer.First);

            Assert.AreEqual(playerParams[Attributes.Diamonds], 5 + 11 + 1, "Не правильно применен параметр PlayerDiamonds");
        }
        public void AICanPassMove()
        {
            gm = GameControllerTestHelper.InitDemoGame(5);
            GameControllerTestHelper.PassStroke(gm);

            //Внимание: при усовершенствование AI данный тест может измениться, .т.к. комп уже осознано будет выбирать какую карту сбросить
            Assert.AreEqual(gm.logCard.LastOrDefault(x => x.player.type == TypePlayer.AI && x.gameEvent == GameEvent.Droped).card.id, 2, "AI должен сбросить карту 2");
        }
        public void PlayerMustWin()
        {
            gm = GameControllerTestHelper.InitDemoGame();
            GameControllerTestHelper.useCard(1, gm);

            Assert.AreEqual(gm.GetPlayerParams(SelectPlayer.Second)[Attributes.Tower], 0, "Башня врага должна быть уничтожена");
            Assert.AreEqual(gm.Status, CurrentAction.UpdateStatHuman, "Текущий статус должен быть равным обновлению статистики игрока");

            gm.SendGameNotification(new Dictionary <string, object>()
            {
                { "CurrentAction", CurrentAction.EndHumanMove }
            });
            Assert.AreEqual(gm.Winner, "Human", "Игрок не может проиграть!");
        }
        public void AICanGetAnotherCard()
        {
            //Внимание: при усовершенствование AI данный тест может измениться, .т.к. комп уже осознано будет выбирать какую карту сбросить
            gm = GameControllerTestHelper.InitDemoGame(4);
            GameControllerTestHelper.PassStroke(gm);

            Assert.AreEqual(gm.logCard.LastOrDefault(x => x.player.type == TypePlayer.AI && x.gameEvent == GameEvent.Used).card.id, 6,
                            "AI должен был использовать карту 6");

            Assert.AreEqual(gm.logCard.FirstOrDefault(x => x.player.type == TypePlayer.AI && x.gameEvent == GameEvent.Used).card.id, 55,
                            "AI должен был использовать карту 55");

            Assert.AreEqual(gm.GetAIUsedCard().Count, 2, "AI должен был использовать 2 карты");
        }
        public void ComputerMustWin()
        {
            gm = GameControllerTestHelper.InitDemoGame(3);
            GameControllerTestHelper.PassStroke(gm);

            gm.SendGameNotification(new Dictionary <string, object>()
            {
                { "CurrentAction", CurrentAction.AIMoveIsAnimated }
            });
            Assert.AreEqual(gm.Status, CurrentAction.UpdateStatAI, "Текущий статус должен быть равным обновлению статистики компьютера");

            gm.SendGameNotification(new Dictionary <string, object>()
            {
                { "CurrentAction", CurrentAction.EndAIMove }
            });
            Assert.AreEqual(gm.GetPlayerParams(SelectPlayer.First)[Attributes.Tower], 0, "Башня врага должна быть уничтожена");
            Assert.AreEqual(gm.Winner, "AI", "Компьютер не может проиграть!");
        }
        public void CheckPlayAgain()
        {
            gm = GameControllerTestHelper.InitDemoGame();
            Assert.AreEqual(gm.IsCanUseCard(55), true, "Не возможно использовать карту");

            gm.SendGameNotification(new Dictionary <string, object>()
            {
                { "CurrentAction", CurrentAction.HumanUseCard },
                { "ID", 55 }
            });

            Assert.AreEqual(gm.logCard.FirstOrDefault(x => x.player.type == TypePlayer.Human && x.gameEvent == GameEvent.Used).card.id, 55, "Human должен был использовать карту 55");

            var result2 = gm.GetPlayerParams();

            Assert.AreEqual(result2[Attributes.Rocks], 7, "Должен быть прирост камней");
            Assert.AreEqual(result2[Attributes.Diamonds], 7, "Должен быть прирост брилиантов");
            Assert.AreEqual(gm.Status, CurrentAction.WaitHumanMove, "Человек может использовать еще одну карту");
        }
 public void CheckPlayerInit()
 {
     gm = GameControllerTestHelper.InitDemoGame();
     Assert.IsNotNull(gm.GetPlayerParams(), "Стартовые параметры игрока не должны быть пустыми");
     Assert.IsTrue(gm.GetPlayersCard().Count > 1, " Должно быть хотя бы одна карта");
 }
 public void PlayerCanUserCard()
 {
     gm = GameControllerTestHelper.InitDemoGame();
     Assert.AreEqual(gm.IsCanUseCard(1), true, "Не возможно использовать карту");
 }
 public void GameIsStarted()
 {
     gm = GameControllerTestHelper.InitDemoGame();
     Assert.AreEqual(gm.Status, CurrentAction.WaitHumanMove, "Игра не стартовала");
 }
 public void WhichCardUseAI()
 {
     gm = GameControllerTestHelper.InitDemoGame();
     GameControllerTestHelper.PassStroke(gm);
     Assert.AreEqual(gm.GetAIUsedCard().LastOrDefault().id, 2, "Компьютер должен использовать карту id 2");
 }