示例#1
0
        public void ProcessResult()
        {
            int    AW = 0, EW = 0;
            double AverageBalance = 0;
            int    BestShot       = 0;
            int    Counter        = 0;

            SimulatorConsoleBox.WriteLineToConsole("Search for body...", ConsoleBox.LineType.Star);
            foreach (Battle B in MyBattleList.Where(B => B.Done))
            {
                if (B.Winner)
                {
                    AW++;
                }
                else
                {
                    EW++;
                }
                AverageBalance += B.Balance;
                if (B.BestShot > BestShot)
                {
                    BestShot = B.BestShot;
                }
                Counter++;
                if (ShowDetail)
                {
                    SimulatorConsoleBox.WriteLineToConsole(B.ID + "-> " + B.AllyBattlePower + " VS " + B.EnemyBattlePower + " (" + B.Balance + ")" + " >" + B.AllyLuck + " VS " + B.EnemyLuck + "<", ConsoleBox.LineType.Bold);
                }
            }
            AverageBalance /= Counter;

            WriteResult(AW, EW, AverageBalance, BestShot);
        }
示例#2
0
 public void WriteResult(int AW, int EW, double AvgBalance, int BestShot)
 {
     SimulatorConsoleBox.WriteLineToConsole(("Ally wins " + AW + " , enemy wins: " + EW + " -> total balance: " + AvgBalance), ConsoleBox.LineType.Bold);
     SimulatorConsoleBox.WriteLineToConsole(("\t\tBest Shot: " + BestShot), ConsoleBox.LineType.Bold);
     if (AW > EW)
     {
         Winner = true;
         SimulatorConsoleBox.WriteLineToConsole("\t\tWINNER: ALLY", ConsoleBox.LineType.Bold);
         SimulatorConsoleBox.WriteLineToConsole("\t\t\tLOSSES:", ConsoleBox.LineType.Bold);
         foreach (IUnit U in UnitManager.getUnitsList(TypesEnums.UnitSide.Ally))
         {
             int tmp = U.UnitAmount;
             U.UnitAmount -= (int)((double)U.UnitAmount * AvgBalance);
             SimulatorConsoleBox.WriteLineToConsole("-" + (tmp - U.UnitAmount) + " -> " + U.ToLongString() + "/" + tmp, ConsoleBox.LineType.Star);
             U.UnitAmount = tmp;
         }
     }
     else
     {
         Winner = false;
         SimulatorConsoleBox.WriteLineToConsole("\t\tWINNER: ENEMY", ConsoleBox.LineType.Bold);
         SimulatorConsoleBox.WriteLineToConsole("\t\t\tLOSSES:", ConsoleBox.LineType.Bold);
         foreach (IUnit U in UnitManager.getUnitsList(TypesEnums.UnitSide.Enemy))
         {
             int tmp = U.UnitAmount;
             U.UnitAmount -= (int)((double)U.UnitAmount * AvgBalance);
             SimulatorConsoleBox.WriteLineToConsole("-" + (tmp - U.UnitAmount) + " -> " + U.ToLongString() + "/" + tmp, ConsoleBox.LineType.Star);
             U.UnitAmount = tmp;
         }
     }
 }
示例#3
0
        public bool StartSimulation(int N, int luck)
        {
            CancelSimulation  = false;
            ProgressBar.Value = BattleCounter = 0;
            processbarModulo  = 1;
            processbarIndex   = 1;

            if (N > 100)
            {
                processbarModulo = N / 100;
            }
            if (N < 100)
            {
                processbarIndex = 100 / N;
            }

            MyBattleList.Clear();

            SimulatorConsoleBox.WriteLineToConsole("Prepare units...and...FIGHT!", ConsoleBox.LineType.Star);
            for (int i = 0; i < N; i++)
            {
                Battle battle = new Battle(this, luck, i);
                MyBattleList.Add(battle);
                Thread t = new Thread(new ThreadStart(battle.SimulateBattle));
                t.Start();

                if (CancelSimulation)
                {
                    SimulatorConsoleBox.WriteLineToConsole("SIMULATOR DETECT ERROR OR STOP!", ConsoleBox.LineType.Star);
                    return(false);
                }
                if (i % 4 == 0)
                {
                    t.Join();
                }
                if (i % processbarModulo == 0 && ProgressBar.Value < 100)
                {
                    ProgressBar.Value += processbarIndex;
                }
                Thread.Sleep(1);
            }
            SimulatorConsoleBox.WriteLineToConsole("End...", ConsoleBox.LineType.Star);
            while (!CheckBattlesResult())
            {
                Thread.Sleep(1);
            }

            OnSimulationDone();
            return(true);
        }
示例#4
0
 public void SaveResultToFile(string nf)
 {
     SimulatorConsoleBox.SaveToFile(nf + ".txt");
 }