diff --git a/PdkFriendServer/Logic/SOIsmctsBot.cs b/PdkFriendServer/Logic/SOIsmctsBot.cs index ba1eb1c4..fa6c4a62 100644 --- a/PdkFriendServer/Logic/SOIsmctsBot.cs +++ b/PdkFriendServer/Logic/SOIsmctsBot.cs @@ -190,7 +190,7 @@ namespace PdkFriendServer.Logic return FastSim(o1g, o2g, mg, current, myGameNum, CardType1.DanZhang, myPos - 1, 0); } - // 快速模拟核心:全部用 byte[] + // 快速模拟核心:全部用 byte[]。支持单张+对子。 private bool FastSim(List h1, List h2, List my, int current, byte maxGameNum, CardType1 maxType, int maxPlayer, int depth) { @@ -202,10 +202,19 @@ namespace PdkFriendServer.Logic var cur = current == 0 ? h1 : current == 1 ? h2 : my; bool isNewRound = maxPlayer == current || maxGameNum == 0; - // 贪心:找最大可出牌 if (isNewRound) { if (cur.Count == 0) return false; + // 找对子(贪心:出最大的对子) + var groups = cur.GroupBy(g => g).Where(g => g.Count() >= 2).OrderByDescending(g => g.Key).ToList(); + if (groups.Count > 0) + { + var pair = groups[0]; + var toRemove = pair.Take(2).ToList(); + foreach (var g in toRemove) cur.Remove(g); + return FastSim(h1, h2, my, (current + 1) % 3, pair.Key, CardType1.DuiZi, current, depth + 1); + } + // 单张 var sorted = cur.OrderByDescending(g => g).ToList(); byte play = sorted[0]; cur.Remove(play); @@ -213,8 +222,20 @@ namespace PdkFriendServer.Logic } else { - // 找能压制的最大牌 + // 跟牌:找能压制的同类型牌 var bigger = cur.Where(g => g > maxGameNum).OrderBy(g => g).ToList(); + if (maxType == CardType1.DuiZi) + { + // 对子:找 ≥2 张且大于 maxGameNum + var pairGroups = cur.GroupBy(g => g).Where(g => g.Count() >= 2 && g.Key > maxGameNum).OrderBy(g => g.Key).ToList(); + if (pairGroups.Count > 0) + { + var pair = pairGroups[0]; + var toRemove = pair.Take(2).ToList(); + foreach (var g in toRemove) cur.Remove(g); + return FastSim(h1, h2, my, (current + 1) % 3, pair.Key, CardType1.DuiZi, current, depth + 1); + } + } if (bigger.Count > 0) { byte play = bigger[0]; diff --git a/exe/PdkFriendServer/PdkFriendServer.dll b/exe/PdkFriendServer/PdkFriendServer.dll index 7d2ad18d..8f1718ea 100644 Binary files a/exe/PdkFriendServer/PdkFriendServer.dll and b/exe/PdkFriendServer/PdkFriendServer.dll differ diff --git a/exe/PdkFriendServer/PdkFriendServer.pdb b/exe/PdkFriendServer/PdkFriendServer.pdb index f32b7781..e6d85e6c 100644 Binary files a/exe/PdkFriendServer/PdkFriendServer.pdb and b/exe/PdkFriendServer/PdkFriendServer.pdb differ diff --git a/exe/hjha-console/PdkFriendServer.dll b/exe/hjha-console/PdkFriendServer.dll index 7d2ad18d..8f1718ea 100644 Binary files a/exe/hjha-console/PdkFriendServer.dll and b/exe/hjha-console/PdkFriendServer.dll differ diff --git a/exe/hjha-console/PdkFriendServer.pdb b/exe/hjha-console/PdkFriendServer.pdb index f32b7781..e6d85e6c 100644 Binary files a/exe/hjha-console/PdkFriendServer.pdb and b/exe/hjha-console/PdkFriendServer.pdb differ diff --git a/exe/hjha-console/hjha-console.dll b/exe/hjha-console/hjha-console.dll index db94b882..26b40fb5 100644 Binary files a/exe/hjha-console/hjha-console.dll and b/exe/hjha-console/hjha-console.dll differ diff --git a/exe/hjha-console/hjha-console.pdb b/exe/hjha-console/hjha-console.pdb index 5b4768fc..e9fafcf9 100644 Binary files a/exe/hjha-console/hjha-console.pdb and b/exe/hjha-console/hjha-console.pdb differ