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); }
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(); }
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; }
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; }
private SimulationResult UpdateResult(SimulationResult intermediateResult, Deck winningDeck) { if (winningDeck.IsPlayer) { intermediateResult.NumberOfPlayerWins ++; } else { intermediateResult.NumberOfPlayerLosses++; } return intermediateResult; }
public override Deck BasicAttack(Deck currentPlayerDeck, Deck currentEnemyDeck) { Logger.Log("No basic attack for commander."); return null; }