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); }
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; } } }
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); }
public void SaveResultToFile(string nf) { SimulatorConsoleBox.SaveToFile(nf + ".txt"); }