diff --git a/Desktop/GameMapTesting/GameMapTesting.cs b/Desktop/GameMapTesting/GameMapTesting.cs index 74171ea..155a6bb 100644 --- a/Desktop/GameMapTesting/GameMapTesting.cs +++ b/Desktop/GameMapTesting/GameMapTesting.cs @@ -44,7 +44,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting { List result = []; Msg = ""; - List allCharactersInGame = [.. FunGameConstant.Characters]; + List allCharactersInGame = [.. FunGameConstant.Characters.OrderBy(o => Random.Shared.Next()).Take(10)]; await Controller.WriteLine("--- 游戏开始 ---"); TeamGamingQueue? tgq = null; MixGamingQueue? mgq = null; @@ -55,9 +55,9 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting // 升级和赋能 List characters = []; - for (int index = 0; index < FunGameConstant.Characters.Count; index++) + for (int index = 0; index < allCharactersInGame.Count; index++) { - Character c = FunGameConstant.Characters[index]; + Character c = allCharactersInGame[index]; c.Level = clevel; c.NormalAttack.Level = mlevel; FunGameService.AddCharacterSkills(c, 1, slevel, slevel); @@ -245,6 +245,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting _gamingQueue.SelectItemEvent += GamingQueue_SelectItem; _gamingQueue.QueueUpdatedEvent += GamingQueue_QueueUpdated; _gamingQueue.TurnEndEvent += GamingQueue_TurnEnd; + _gamingQueue.CharacterInquiryEvent += GamingQueue_CharacterInquiryEvent; // 总游戏时长 double totalTime = 0; @@ -439,7 +440,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting stats.MVPs++; mvpBuilder.AppendLine($"{(tgq != null ? "[ " + tgq.GetTeamFromEliminated(mvp)?.Name + " ] " : "")}[ {mvp.ToStringWithLevel()} ]"); mvpBuilder.AppendLine($"技术得分:{stats.Rating:0.0#} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(_gamingQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}"); - mvpBuilder.AppendLine($"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}"); + mvpBuilder.AppendLine($"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn} / 总计决策数:{stats.TurnDecisions} / 总计决策点:{stats.UseDecisionPoints}"); mvpBuilder.AppendLine($"控制时长:{stats.ControlTime:0.##} / 总计治疗:{stats.TotalHeal:0.##} / 护盾抵消:{stats.TotalShield:0.##}"); mvpBuilder.AppendLine($"总计伤害:{stats.TotalDamage:0.##} / 总计物理伤害:{stats.TotalPhysicalDamage:0.##} / 总计魔法伤害:{stats.TotalMagicDamage:0.##}"); mvpBuilder.AppendLine($"总承受伤害:{stats.TotalTakenDamage:0.##} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 总承受魔法伤害:{stats.TotalTakenMagicDamage:0.##}"); @@ -471,7 +472,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting CharacterStatistics stats = _gamingQueue.CharacterStatistics[character]; builder.AppendLine($"{(isWeb ? count + ". " : "")}[ {character.ToStringWithLevel()}{(tgq != null ? "(" + tgq.GetTeamFromEliminated(character)?.Name + ")" : "")} ]"); builder.AppendLine($"技术得分:{stats.Rating:0.0#} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(_gamingQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}"); - builder.AppendLine($"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}"); + builder.AppendLine($"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn} / 总计决策数:{stats.TurnDecisions} / 总计决策点:{stats.UseDecisionPoints}"); builder.AppendLine($"控制时长:{stats.ControlTime:0.##} / 总计治疗:{stats.TotalHeal:0.##} / 护盾抵消:{stats.TotalShield:0.##}"); builder.AppendLine($"总计伤害:{stats.TotalDamage:0.##} / 总计物理伤害:{stats.TotalPhysicalDamage:0.##} / 总计魔法伤害:{stats.TotalMagicDamage:0.##}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage:0.##} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 总承受魔法伤害:{stats.TotalTakenMagicDamage:0.##}"); @@ -708,6 +709,11 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting return CharacterActionType.None; // 非玩家角色,由AI处理,或默认None } + private Dictionary GamingQueue_CharacterInquiryEvent(GamingQueue character, Character actor, DecisionPoints dp, string topic, Dictionary args) + { + return []; + } + private static DecisionPoints GetDP(GamingQueue queue) { if (queue.CustomData.TryGetValue("player", out object? value) && value is Character player) @@ -866,6 +872,8 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting totalStats.Top3s += stats.Top3s; totalStats.Loses += stats.Loses; totalStats.MVPs += stats.MVPs; + totalStats.UseDecisionPoints += stats.UseDecisionPoints; + totalStats.TurnDecisions += stats.TurnDecisions; if (totalStats.Plays != 0) { totalStats.AvgDamage = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.Plays); @@ -885,6 +893,8 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting totalStats.AvgEarnedMoney = totalStats.TotalEarnedMoney / totalStats.Plays; totalStats.Winrate = Calculation.Round4Digits(Convert.ToDouble(totalStats.Wins) / Convert.ToDouble(totalStats.Plays)); totalStats.Top3rate = Calculation.Round4Digits(Convert.ToDouble(totalStats.Top3s) / Convert.ToDouble(totalStats.Plays)); + totalStats.AvgUseDecisionPoints = totalStats.UseDecisionPoints / totalStats.Plays; + totalStats.AvgTurnDecisions = totalStats.TurnDecisions / totalStats.Plays; } if (totalStats.LiveRound != 0) totalStats.DamagePerRound = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.LiveRound); if (totalStats.ActionTurn != 0) totalStats.DamagePerTurn = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.ActionTurn); diff --git a/Desktop/GameMapTesting/GameMapViewer.xaml.cs b/Desktop/GameMapTesting/GameMapViewer.xaml.cs index 9442aec..9b9c8af 100644 --- a/Desktop/GameMapTesting/GameMapViewer.xaml.cs +++ b/Desktop/GameMapTesting/GameMapViewer.xaml.cs @@ -398,31 +398,6 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting } } - /// - /// 判断滚动条是否在最底部 - /// - private bool IsScrollViewerAtBottom() - { - // 检查 DebugLogScrollViewer - if (DebugLogScrollViewer != null) - { - // 使用一个小容差值来处理浮点数精度问题 - const double tolerance = 0.1; - double verticalOffset = DebugLogScrollViewer.VerticalOffset; - double scrollableHeight = DebugLogScrollViewer.ScrollableHeight; - - // 如果可滚动高度很小或为0,说明内容不足一屏,视为在底部 - if (scrollableHeight <= 0) - return true; - - // 检查是否已经滚动到底部(容差范围内) - return Math.Abs(verticalOffset - scrollableHeight) <= tolerance; - } - - // 如果没有找到滚动条,默认返回 true 以保持原有行为 - return true; - } - private void CurrentRoundChanged() { QueueTitle.Text = $"行动顺序表{(CurrentRound > 0 ? $" - 第 {CurrentRound} 回合" : "")}"; @@ -934,6 +909,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting StatsTextBlock2.Text = $"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn} / 控制时长:{stats.ControlTime:0.##} / 总计治疗:{stats.TotalHeal:0.##} / 护盾抵消:{stats.TotalShield:0.##}"; StatsTextBlock3.Text = $"总计伤害:{stats.TotalDamage:0.##} / 总计物理伤害:{stats.TotalPhysicalDamage:0.##} / 总计魔法伤害:{stats.TotalMagicDamage:0.##} / 总计真实伤害:{stats.TotalTrueDamage:0.##}"; StatsTextBlock4.Text = $"总承受伤害:{stats.TotalTakenDamage:0.##} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 总承受魔法伤害:{stats.TotalTakenMagicDamage:0.##} / 总承受真实伤害:{stats.TotalTakenTrueDamage:0.##}"; + StatsTextBlock4.Text = $"总计决策数:{stats.TurnDecisions} / 使用决策点:{stats.UseDecisionPoints} / 当前决策点:{DP.CurrentDecisionPoints} / {DP.MaxDecisionPoints}"; } } else @@ -943,6 +919,7 @@ namespace Milimoe.FunGame.Testing.Desktop.GameMapTesting StatsTextBlock2.Text = "存活时长:- / 存活回合数:- / 行动回合数:- / 控制时长:- / 总计治疗:- / 护盾抵消:-"; StatsTextBlock3.Text = "总计伤害:- / 总计物理伤害:- / 总计魔法伤害:- / 总计真实伤害:-"; StatsTextBlock4.Text = "总承受伤害:- / 总承受物理伤害:- / 总承受魔法伤害:- / 总承受真实伤害:-"; + StatsTextBlock4.Text = "总计决策数:- / 使用决策点:-"; } } diff --git a/Library/Main.cs b/Library/Main.cs index 5f1238a..cd0a662 100644 --- a/Library/Main.cs +++ b/Library/Main.cs @@ -45,26 +45,27 @@ queue.LoadGameMap(new FastAutoMap()); // Console.WriteLine(i.ToString(true, false)); //} -foreach (Skill s in FunGameConstant.Skills) -{ - s.GamingQueue = queue; - s.Level = 6; - Console.WriteLine(s.GetInfo()); -} -foreach (Skill m in FunGameConstant.Magics) -{ - m.GamingQueue = queue; - m.Level = 8; - Console.WriteLine(m.GetInfo()); -} -//foreach (Character c in FunGameConstant.Characters) +//foreach (Skill s in FunGameConstant.Skills) //{ -// Character character = c.Copy(); -// character.Level = 1; -// character.Recovery(); -// FunGameService.AddCharacterSkills(character, 1, 6, 6); -// Console.WriteLine(character.GetInfo()); +// s.GamingQueue = queue; +// s.Level = 6; +// Console.WriteLine(s.GetInfo()); //} +//foreach (Skill m in FunGameConstant.Magics) +//{ +// m.GamingQueue = queue; +// m.Level = 8; +// Console.WriteLine(m.GetInfo()); +//} +foreach (Character c in FunGameConstant.Characters) +{ + Character character = c.Copy(); + character.Level = 60; + character.NormalAttack.Level = 8; + character.Recovery(); + FunGameService.AddCharacterSkills(character, 1, 6, 6); + Console.WriteLine(character.GetInfo()); +} //foreach (Skill s in FunGameConstant.Skills) //{ // s.Level = 6; @@ -96,18 +97,20 @@ Console.ReadKey(); while (true) { - await FunGameSimulation.StartSimulationGame(true, false, true, false, useStore: false, hasMap: true); - ConsoleKeyInfo key = Console.ReadKey(); - if (key.Key == ConsoleKey.Escape) - { - break; - } - await FunGameSimulation.StartSimulationGame(true, false, false, false, hasMap: true); - key = Console.ReadKey(); - if (key.Key == ConsoleKey.Escape) - { - break; - } + await FunGameSimulation.StartSimulationGame(true, false, true, false, useStore: false, hasMap: false); + //ConsoleKeyInfo key = Console.ReadKey(); + //if (key.Key == ConsoleKey.Escape) + //{ + // break; + //} + await Task.Delay(100); + await FunGameSimulation.StartSimulationGame(true, false, false, false, hasMap: false); + //key = Console.ReadKey(); + //if (key.Key == ConsoleKey.Escape) + //{ + // break; + //} + await Task.Delay(100); } //strings.ForEach(Console.WriteLine); diff --git a/Library/Tests/FunGame.cs b/Library/Tests/FunGame.cs index fefc3e7..62ad218 100644 --- a/Library/Tests/FunGame.cs +++ b/Library/Tests/FunGame.cs @@ -308,7 +308,7 @@ namespace Milimoe.FunGame.Testing.Tests stats.MVPs++; mvpBuilder.AppendLine($"[ {mvp.ToStringWithLevel()} ]"); mvpBuilder.AppendLine($"技术得分:{stats.Rating:0.0#} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(gamingQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}"); - mvpBuilder.AppendLine($"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}"); + mvpBuilder.AppendLine($"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn} / 总计决策数:{stats.TurnDecisions} / 总计决策点:{stats.UseDecisionPoints}"); mvpBuilder.AppendLine($"控制时长:{stats.ControlTime:0.##} / 总计治疗:{stats.TotalHeal:0.##} / 护盾抵消:{stats.TotalShield:0.##}"); mvpBuilder.AppendLine($"总计伤害:{stats.TotalDamage:0.##} / 总计物理伤害:{stats.TotalPhysicalDamage:0.##} / 总计魔法伤害:{stats.TotalMagicDamage:0.##}"); mvpBuilder.AppendLine($"总承受伤害:{stats.TotalTakenDamage:0.##} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 总承受魔法伤害:{stats.TotalTakenMagicDamage:0.##}"); @@ -343,7 +343,7 @@ namespace Milimoe.FunGame.Testing.Tests CharacterStatistics stats = gamingQueue.CharacterStatistics[character]; builder.AppendLine($"{(isWeb ? count + ". " : "")}[ {character.ToStringWithLevel()} ]"); builder.AppendLine($"技术得分:{stats.Rating:0.0#} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(gamingQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}"); - builder.AppendLine($"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}"); + builder.AppendLine($"存活时长:{stats.LiveTime:0.##} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn} / 总计决策数:{stats.TurnDecisions} / 总计决策点:{stats.UseDecisionPoints}"); builder.AppendLine($"控制时长:{stats.ControlTime:0.##} / 总计治疗:{stats.TotalHeal:0.##} / 护盾抵消:{stats.TotalShield:0.##}"); builder.AppendLine($"总计伤害:{stats.TotalDamage:0.##} / 总计物理伤害:{stats.TotalPhysicalDamage:0.##} / 总计魔法伤害:{stats.TotalMagicDamage:0.##}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage:0.##} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 总承受魔法伤害:{stats.TotalTakenMagicDamage:0.##}"); @@ -821,6 +821,8 @@ namespace Milimoe.FunGame.Testing.Tests totalStats.Top3s += stats.Top3s; totalStats.Loses += stats.Loses; totalStats.MVPs += stats.MVPs; + totalStats.UseDecisionPoints += stats.UseDecisionPoints; + totalStats.TurnDecisions += stats.TurnDecisions; if (totalStats.Plays != 0) { totalStats.AvgDamage = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.Plays); @@ -840,6 +842,8 @@ namespace Milimoe.FunGame.Testing.Tests totalStats.AvgEarnedMoney = totalStats.TotalEarnedMoney / totalStats.Plays; totalStats.Winrate = Calculation.Round4Digits(Convert.ToDouble(totalStats.Wins) / Convert.ToDouble(totalStats.Plays)); totalStats.Top3rate = Calculation.Round4Digits(Convert.ToDouble(totalStats.Top3s) / Convert.ToDouble(totalStats.Plays)); + totalStats.AvgUseDecisionPoints = totalStats.UseDecisionPoints / totalStats.Plays; + totalStats.AvgTurnDecisions = totalStats.TurnDecisions / totalStats.Plays; } if (totalStats.LiveRound != 0) totalStats.DamagePerRound = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.LiveRound); if (totalStats.ActionTurn != 0) totalStats.DamagePerTurn = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.ActionTurn);