Ejemplo n.º 1
0
        public void Create_P1Armies17_AreEqual()
        {
            var act = RegionState.Create(17, PlayerType.player1);

            var expOwner  = PlayerType.player1;
            var expArmies = 17;

            Assert.AreEqual(expOwner, act.Owner, "Owner");
            Assert.AreEqual(expArmies, act.Armies, "Armies");
        }
Ejemplo n.º 2
0
        //see wiki.warlight.net/index.php/Combat_Basics
        private SimulationOutcome SimulateAttack(RegionState source, RegionState target, int armies)
        {
            //int attackers, int defenders, out int attackersDestroyed, out int defendersDestroyed

            int attackingArmies = armies;
            int defendingArmies = target.Armies;

            var attackersDestroyed = 0;
            var defendersDestroyed = 0;

            for (int t = 1; t <= attackingArmies; t++)             //calculate how much defending armies are destroyed
            {
                double rand = Rnd.NextDouble();

                //60% chance to destroy one defending army
                if (rand < AttackFactor)
                {
                    defendersDestroyed++;
                }
            }
            for (int t = 1; t <= defendingArmies; t++)             //calculate how much attacking armies are destroyed
            {
                double rand = Rnd.NextDouble();
                //70% chance to destroy one attacking army
                if (rand < DefendFactor)
                {
                    attackersDestroyed++;
                }
            }

            if (attackersDestroyed >= attackingArmies)
            {
                if (defendersDestroyed >= defendingArmies)
                {
                    defendersDestroyed = defendingArmies - 1;
                }
                attackersDestroyed = attackingArmies;
            }

            //process result of attack
            if (defendersDestroyed >= defendingArmies)             //attack success
            {
                var survivors = attackingArmies - attackersDestroyed;
                return(new SimulationOutcome(source.Leave(armies), RegionState.Create(survivors, source.Owner)));
            }
            else             //attack fail
            {
                return(new SimulationOutcome(source.Leave(attackersDestroyed), target.Leave(defendersDestroyed)));
            }
        }
Ejemplo n.º 3
0
        public void Simulate_20Vs11_10000Runs()
        {
            var source = RegionState.Create(20, PlayerType.player1);
            var target = RegionState.Create(11, PlayerType.player2);

            var rnd       = new MT19937Generator(17);
            var simulator = new Simulator(rnd);

            var sw = new Stopwatch();

            sw.Start();

            var act = simulator.Simulate(source, target, 19, 10000);

            sw.Stop();

            Console.WriteLine(sw.Elapsed.TotalMilliseconds);

            Console.WriteLine("success: {0}, failure: {1}", act.SuccessCount, act.FailureCount);
        }