Esempio n. 1
0
        public void AttackTest()
        {
            var playerCards = new Stack<Card>();
            var playerTowerCard = new Card(0, 14, 0) {Name = "Zodiac", CardType = CardType.Tower};
            playerCards.Push(playerTowerCard);
            Deck playerDeck = new Deck(true, playerCards);
            playerDeck.Commander = new Commander(0, 20, 0);

            var enemyCards = new Stack<Card>();
            var towerAttackCard = new Card(1, 17, 0) { Name = "Wham Tower Attacker" };
            towerAttackCard.Skills.Add(new AttackSkill()
            {
                Power = 2,
                Repeat = 0,
                SkillArea = SkillArea.Single,
                SkillType = SkillType.Siege
            });
            enemyCards.Push(towerAttackCard);

            Deck enemyDeck = new Deck(false, enemyCards);
            enemyDeck.Commander = new Commander(0, 20, 0);

            playerDeck.DrawNewCard();
            enemyDeck.DrawNewCard();

            towerAttackCard.Skills.First().Attack(enemyDeck, playerDeck, towerAttackCard);

            Assert.AreEqual(12, playerTowerCard.Health);
        }
Esempio n. 2
0
        private void button1_Click(object sender, EventArgs e)
        {
            var iterationsText = txtIterations.Text;
            var iterations = 0;
            if (!Int32.TryParse(iterationsText, out iterations))
            {
                rtbOutputDetails.Text = "Invalid Iterations";
                return;
            }

            var playerCards = new Stack<Card>();
            playerCards.Push(new Card(2, 14, 1) { Name = "Zodiac" });
            playerCards.Push(new Card(3, 18, 1) { Name = "Zodiac Double" });
            playerCards.Push(new Card(0, 15, 2) { Name = "Some tower", CardType = CardType.Tower });

            Deck playerDeck = new Deck(true, playerCards);
            playerDeck.Commander = new Commander(0, 20, 0);

            var enemyCards = new Stack<Card>();
            enemyCards.Push(new Card(4, 20, 2) { Name = "Aegis" });
            enemyCards.Push(new Card(1, 17, 1) { Name = "Wham" });
            var towerAttackCard = new Card(1, 17, 1) {Name = "Wham Tower Attacker"};
            towerAttackCard.Skills.Add(new AttackSkill()
                {
                    Power = 2,
                    Repeat = 0,
                    SkillArea = SkillArea.Single,
                    SkillType = SkillType.Siege
                });
            enemyCards.Push(towerAttackCard);

            Deck enemyDeck = new Deck(false, enemyCards);
            enemyDeck.Commander = new Commander(0, 20, 0);

            BasicOptimizer optimizer = new BasicOptimizer();
            var result = optimizer.RunOptimization(playerDeck, enemyDeck, cbxSurgeMode.Checked, iterations);

            rtbOutputDetails.Text =  Logger.DumpLog();

            StringBuilder resultBuilder = new StringBuilder();
            resultBuilder.AppendFormat("Win/Loss/Draw: {0}/{1}/{2}", result.NumberOfPlayerWins,
                result.NumberOfPlayerLosses, result.NumberOfPlayerDraws);
            resultBuilder.AppendLine();
            resultBuilder.AppendFormat("Ratio Win/Loss/Draw: {0}/{1}/{2}", result.WinRatio,
                result.LossRatio, result.DrawRatio);

            rtbSimulationResult.Text = resultBuilder.ToString();
        }
Esempio n. 3
0
        public SimulationResult RunOptimization(Deck playerDeck, Deck enemyDeck, bool surgeMode, int iterations)
        {
            Board board = new Board(playerDeck, enemyDeck, surgeMode);

            SimulationResult result = new SimulationResult();
            result.NumberOfIterations = iterations;

            for (int currentIteration = 0; currentIteration < iterations; currentIteration++)
            {
                board.ResetToDefault();

                RunSimulation(board, result);
            }

            return result;
        }
Esempio n. 4
0
        private static Deck PlayerTurn(Deck currentPlayerDeck, Deck currentEnemyDeck)
        {
            // Draw new card
            currentPlayerDeck.DrawNewCard();

            // Commander turn
            // Commander doesn't have Basic attack, however does skill attacks
            // TODO: Commander turn

            // Play Deck
            foreach (var card in currentPlayerDeck.PlayedCards)
            {
                if (card.CanAttack())
                {
                    if (card.CardType == CardType.Tower)
                    {
                        // No Basic attack, only skills
                        // TODO: Tower attack
                    }
                    else
                    {
                        // Do Skill Attack first
                        foreach (var skill in card.Skills)
                        {
                            skill.Attack(currentPlayerDeck, currentEnemyDeck, card);
                        }

                        // Play Basic Attack
                        Deck deck = card.BasicAttack(currentPlayerDeck, currentEnemyDeck);

                        // Check if there is winner
                        if (deck != null)
                            return deck;

                    }
                }
            }

            return null;
        }
Esempio n. 5
0
        private SimulationResult UpdateResult(SimulationResult intermediateResult, Deck winningDeck)
        {
            if (winningDeck.IsPlayer)
            {
                intermediateResult.NumberOfPlayerWins ++;
            }
            else
            {
                intermediateResult.NumberOfPlayerLosses++;
            }

            return intermediateResult;
        }
Esempio n. 6
0
 public override Deck BasicAttack(Deck currentPlayerDeck, Deck currentEnemyDeck)
 {
     Logger.Log("No basic attack for commander.");
     return null;
 }