private async void Button_Click_Pair(object sender, RoutedEventArgs e) { var color1 = Color1.Text.ToInt(); var part1 = Part1.Text.ToInt(); var color2 = Color2.Text.ToInt(); var part2 = Part2.Text.ToInt(); var times = Times.Text.ToInt(); weaken = Weaken.IsChecked == true; if (times <= 1) { var sim = new QuQuBattleSimulation(color1, part1, color2, part2, weaken) { showDetail = true }; Print(sim.Report()); } else { BTN.Content = "执行中..."; BTN.IsEnabled = false; aggregate = new int[][] { new int[5], new int[5] }; var taskCount = Environment.ProcessorCount; //4 var tasks = new Task[taskCount]; countdown = times; for (int i = 0; i < taskCount; i++) { tasks[i] = MakeSpecifiedBattle(color1, part1, color2, part2); } await Task.WhenAll(tasks); var messages = new string[] { $"{QuquSystem.instance.GetName(color1, part1)} {ReasonAnalysis(aggregate[0])}", $"{QuquSystem.instance.GetName(color2, part2)} {ReasonAnalysis(aggregate[1])}", "" }; var w = new Writer("logs.txt"); foreach (var message in messages) { Print(message); w.WriteLine(message); } BTN.Content = "开始执行"; BTN.IsEnabled = true; } }
/// <summary>为一种指定蛐蛐随机选择对手交战</summary> Task MakeRandomBattle(int color, int part, int[][] enemys) { return(Task.Run(() => { var i = 0; while (true) { i = Interlocked.Decrement(ref countdown); if (i < 0) { break; } var enemy = enemys[Random.Range(0, enemys.Length)]; var result = new QuQuBattleSimulation(color, part, enemy[0], enemy[1], weaken).ShowStartBattleState(); Interlocked.Increment(ref aggregate[0][result.win ? 0 : 1]); } })); }
/// <summary>让两种指定蛐蛐交战</summary> Task MakeSpecifiedBattle(int color1, int part1, int color2, int part2) { return(Task.Run(() => { var i = 0; while (true) { i = Interlocked.Decrement(ref countdown); if (i < 0) { break; } var result = new QuQuBattleSimulation(color1, part1, color2, part2, weaken).ShowStartBattleState(); var winner = result.win ? 0 : 1; Interlocked.Increment(ref aggregate[winner][0]); Interlocked.Increment(ref aggregate[winner][(int)result.status]); } })); }