Пример #1
0
        public void Turn()
        {
            if (GameEnded)
            {
                return;
            }

            var magics = Strategy.GetMagicUnits(Army1, Army2);

            foreach (var tuple in magics)
            {
                HandleCommands(tuple.allies, tuple.enemies, tuple.alliesIndex);
            }

            var melees = Strategy.GetMeleeAttacks(Army1, Army2);

            foreach (var tuple in melees)
            {
                MakeDamage(tuple.allies, tuple.alliesIndex, tuple.enemies,
                           tuple.targetIndex, tuple.allies[tuple.alliesIndex].Attack);
            }

            var unitsBefore = Army1.Count + Army2.Count;

            CommandsInvoker.Execute(Army1.CollectDead());
            CommandsInvoker.Execute(Army2.CollectDead());
            CommandsInvoker.EndTurn();

            if (Army1.Count + Army2.Count == unitsBefore)
            {
                _turnsWithoutDeath++;
            }
            else
            {
                _turnsWithoutDeath = 0;
            }

            if (++_turns == DrawLimit || _turnsWithoutDeath == DrawLimitTurnsWithoutDeaths ||
                Army1.Count == 0 || Army2.Count == 0)
            {
                GameEnded = true;
            }
        }
Пример #2
0
        public override void NextStage()
        {
            int def1 = Army1.Battalions[counterUnit(CurrentStage)];
            int def2 = Army2.Battalions[counterUnit(CurrentStage)];
            int att1 = Army1.Battalions[CurrentStage];
            int att2 = Army1.Battalions[CurrentStage];

            double dmgProb1 = att1 == 0 ? 0 : att1 / (att1 + def2);
            double dmgProb2 = att2 == 0 ? 0 : att2 / (att2 + def1);

            double critProb1 = att1 == 0 ? 0 : att1 / (att1 + def2 * 2);
            double critProb2 = att2 == 0 ? 0 : att2 / (att2 + def1 * 2);

            double ran1 = Game.Random.ContinuousDouble();
            double ran2 = Game.Random.ContinuousDouble();

            int dmg1 = 0;
            int dmg2 = 0;

            if (ran1 < critProb1)
            {
                dmg1 = 2;
            }
            else if (ran1 < dmgProb1)
            {
                dmg1 = 1;
            }

            if (ran2 < critProb2)
            {
                dmg2 = 2;
            }
            else if (ran2 < dmgProb2)
            {
                dmg2 = 1;
            }

            Army1.RemoveRandom(dmg1);
            Army2.RemoveRandom(dmg2);

            nextStage();
        }