public static bool SingleFight(BotFight botFight) { bool fightSuccess = false; try { if (isInit) { //java -jar tools/PlayGame.jar maps/map43.txt 1000 1000 log.txt "java -jar example_bots/DualBot.jar" "bin/Debug/DefenderBot.exe" 1> stdout.txt 2> stderr.txt FileInfo logPath = new FileInfo(applicationExecPath + "/logs/log_fight" + botFight.FightId().ToString() + ".txt"); botFight.Log(logPath); FileInfo viewerInputPath = new FileInfo(applicationExecPath + "/viewer_inputs/input_fight" + botFight.FightId().ToString() + ".txt"); botFight.ViewerInput(viewerInputPath); FileInfo resultPath = new FileInfo(applicationExecPath + "/results/result_fight" + botFight.FightId().ToString() + ".txt"); botFight.Result(resultPath); //string[] execFileArgs = ExecFileArgsMaker(toolsPath, playGameFile, playGameCmd); //string execFile = execFileArgs[0]; //string execArgs = execFileArgs[1]; /*string player1Cmd = (botFight.Player1().isJar()) ? ("\"java -jar \\\"" + botFight.Player1().BotFileInfo().FullName + "\\\"\"") : ("\"" + botFight.Player1().BotFileInfo().FullName + "\""); string player2Cmd = (botFight.Player2().isJar()) ? ("\"java -jar \\\"" + botFight.Player2().BotFileInfo().FullName + "\\\"\"") : ("\"" + botFight.Player2().BotFileInfo().FullName + "\"");*/ string player1Cmd = PlayerCommand(botFight.Player1()); string player2Cmd = PlayerCommand(botFight.Player2()); /*string fightCmd = " -jar " + "\"" + playGamePath + "\" " + "\"" + botFight.FightMap().MapFileInfo().FullName + "\" " + botFight.TimeAmount().ToString() + " " + botFight.TurnAmount().ToString() + " " + "\"" + applicationPath + "/logs/log_fight" + botFight.FightId().ToString() + ".txt\" " + player1Cmd + " " + player2Cmd;/* +" " + "1> \"" + applicationPath + "/viewer_inputs/input_fight" + botFight.FightId().ToString() + ".txt\" " + "2> \"" + applicationPath + "/results/result_fight" + botFight.FightId().ToString() + ".txt\"";*/ //string fightCmd = " -jar" + " \"" + playGamePath + "\" " string fightCmd = playGameExecArgs + "\"" + botFight.FightMap().MapFileInfo().FullName + "\" " + botFight.TimeAmount().ToString() + " " + botFight.TurnAmount().ToString() + " " + "\"" + botFight.Log().FullName + "\" " + player1Cmd + " " + player2Cmd; //Process process = new Process(); //process.StartInfo.FileName = playGameExecFile; //process.StartInfo.Arguments = fightCmd; //process.StartInfo.UseShellExecute = false; //process.StartInfo.CreateNoWindow = true; //process.StartInfo.RedirectStandardOutput = true; //process.StartInfo.RedirectStandardError = true; //process.Start(); //string stdout = process.StandardOutput.ReadToEnd(); //string stderr = process.StandardError.ReadToEnd(); //process.WaitForExit(); botFight.Command(playGameExecFile + " " + fightCmd); ProcessRunner pr = new ProcessRunner(playGameExecFile, fightCmd); pr.ProcessWorker(); string stdout = pr.OutputString(); string stderr = pr.ErrorString(); StreamWriter streamWriter = new StreamWriter(botFight.ViewerInput().FullName); streamWriter.WriteLine(stdout); streamWriter.Close(); streamWriter = new StreamWriter(botFight.Result().FullName); streamWriter.WriteLine(stderr); streamWriter.Close(); fightSuccess = true; } } catch (Exception) { throw; } return fightSuccess; }
// DataGRidViewResult on fly private void DataGridViewResultOnFly(BotFight botFight) { int i = dgvResultGrid.Rows.Count; string lastTurn = string.Empty; string errors = string.Empty; int isWinner = botFight.IsWinner(out lastTurn, out errors); Color cellsColor = (i % 2 == 0) ? (Color.White) : (Color.LightGray); dgvResultGrid.Rows.Add(); dgvResultGrid.Rows[i].Cells["colID"].Value = botFight.FightId().ToString(); dgvResultGrid.Rows[i].Cells["colID"].Style.BackColor = cellsColor; dgvResultGrid.Rows[i].Cells["colMap"].Value = botFight.FightMap().MapFileInfo().Name; dgvResultGrid.Rows[i].Cells["colMap"].Style.BackColor = cellsColor; dgvResultGrid.Rows[i].Cells["colPlayer1"].Value = botFight.Player1().BotFileInfo().Name; dgvResultGrid.Rows[i].Cells["colPlayer1"].Style.BackColor = cellsColor; dgvResultGrid.Rows[i].Cells["colPlayer2"].Value = botFight.Player2().BotFileInfo().Name; dgvResultGrid.Rows[i].Cells["colPlayer2"].Style.BackColor = cellsColor; switch (isWinner) { case -1: dgvResultGrid.Rows[i].Cells["colWinner"].Value = "Lose"; dgvResultGrid.Rows[i].Cells["colWinner"].Style.BackColor = Color.LightPink; loseCount++; break; case 0: dgvResultGrid.Rows[i].Cells["colWinner"].Value = "Draw"; dgvResultGrid.Rows[i].Cells["colWinner"].Style.BackColor = Color.LightBlue; drawCount++; break; case 1: dgvResultGrid.Rows[i].Cells["colWinner"].Value = "Win"; dgvResultGrid.Rows[i].Cells["colWinner"].Style.BackColor = Color.LightGreen; winCount++; break; default: break; } dgvResultGrid.Rows[i].Cells["colErrors"].Value = errors; dgvResultGrid.Rows[i].Cells["colErrors"].Style.BackColor = cellsColor; dgvResultGrid.Rows[i].Cells["colTurns"].Value = lastTurn; dgvResultGrid.Rows[i].Cells["colTurns"].Style.BackColor = cellsColor; dgvResultGrid.Rows[i].Cells["colViewGame"].Style.BackColor = cellsColor; dgvResultGrid.Rows[i].Cells["colCommand"].Value = botFight.Command(); fightCount++; totalTurnNumbers += Convert.ToInt32(lastTurn.Substring(5)); int avgTurnNumbers = 0; if (fightCount > 0) { winPercent = ((double)winCount / (double)fightCount) * 100; avgTurnNumbers = (int)Math.Ceiling((double)totalTurnNumbers / (double)fightCount); } lblTotal.Text = String.Format("Wins: {0}, Loses: {1}, Draws: {2} | Total: Wins/Games: {3}/{4}, Win %: {5:N} | Avg. turn numbers: {6}", winCount, loseCount, drawCount, winCount, fightCount, winPercent, avgTurnNumbers); progressBar.PerformStep(); }
public static void ViewGame(BotFight botFight) { ///string viewGamePath = starterPackagePath + "/tools/ShowGame.jar"; //string viewCmd = " -jar " + "\"" + viewGamePath + "\""; //string[] execFileArgs = ExecFileArgsMaker(toolsPath, showGameFile, showGameCmd); //string execFile = execFileArgs[0]; //string execArgs = execFileArgs[1]; if (isInit) { StreamReader streamReader = new StreamReader(botFight.ViewerInput().FullName); string viewerInput = streamReader.ReadToEnd(); streamReader.Close(); Process process = new Process(); process.StartInfo.FileName = showGameExecFile; process.StartInfo.Arguments = showGameExecArgs; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardInput = true; process.Start(); StreamWriter streamWriter = process.StandardInput; streamWriter.WriteLine(viewerInput); streamWriter.Close(); process.WaitForExit(); } }
// Test fights private bool TestFightsPrepare() { bool prepareFlag = true; string logsPath = Application.StartupPath + "/logs"; string resultsPath = Application.StartupPath + "/results"; string viewerInputPath = Application.StartupPath + "/viewer_inputs"; if (!Directory.Exists(logsPath)) Directory.CreateDirectory(logsPath); if (!Directory.Exists(resultsPath)) Directory.CreateDirectory(resultsPath); if (!Directory.Exists(viewerInputPath)) Directory.CreateDirectory(viewerInputPath); //Prepare fight myBot = new Bot(0, (FileInfo)cmbChooseMyBot.SelectedItem, true); int botId = 1; List<Bot> opponentBots = new List<Bot>(); if (cmbChooseOpponentBot.SelectedIndex == 0) { for (int i = 1; i < cmbChooseOpponentBot.Items.Count; i++) { FileInfo fi = (FileInfo)cmbChooseOpponentBot.Items[i]; //if ((cbExampleBots.Checked) && (fi.DirectoryName == (starterPackagePath + "\\example_bots"))) //if ((cbExampleBots.Checked) && (fi.DirectoryName == (Path.GetFullPath(Path.Combine(starterPackagePath, "example_bots"))))) if ((cbExampleBots.Checked) && (fi.DirectoryName == Path.GetFullPath(exampleBotsPath))) { Bot opponentBot = new Bot(botId, fi); opponentBots.Add(opponentBot); botId++; } //if ((cbOtherMyBots.Checked) && (fi.DirectoryName == myBotsPath)) if ((cbOtherMyBots.Checked) && (fi.DirectoryName == Path.GetFullPath(myBotsPath))) { if ((cbMirror.Checked) || ((!cbMirror.Checked) && (fi.Name != myBot.BotFileInfo().Name))) { Bot opponentBot = new Bot(botId, fi); opponentBots.Add(opponentBot); botId++; } } } } else { Bot opponentBot = new Bot(botId, (FileInfo)cmbChooseOpponentBot.SelectedItem); opponentBots.Add(opponentBot); } List<Map> maps = new List<Map>(); int mapId = 0; if (cmbMap.SelectedIndex == 0) { for (int i = 1; i < cmbMap.Items.Count; i++) { FileInfo fi = (FileInfo)cmbMap.Items[i]; Map map = new Map(mapId, fi); maps.Add(map); mapId++; } } else { Map map = new Map(mapId, (FileInfo)cmbMap.SelectedItem); maps.Add(map); } //Fights if ((opponentBots.Count > 0) && (maps.Count > 0)) { botFights = new List<BotFight>(); int fightId = 1; for (int i = 0; i < opponentBots.Count; i++) { for (int j = 0; j < maps.Count; j++) { BotFight botFight = new BotFight(fightId, maps[j], myBot, opponentBots[i], turnAmount, timeAmount); botFights.Add(botFight); fightId++; if (cbSwapPlayers.Checked) { BotFight botFight2 = new BotFight(fightId, maps[j], opponentBots[i], myBot, turnAmount, timeAmount); botFights.Add(botFight2); fightId++; } } } } else { errorString = string.Empty; if (opponentBots.Count == 0) errorString += "There no opponent bots in your current fight settings\n"; if (maps.Count == 0) errorString += "There no maps in your current fight settings.\n"; prepareFlag = false; MessageBox.Show(errorString, "Fight Settings warning!", MessageBoxButtons.OK, MessageBoxIcon.Warning); } return prepareFlag; }