diff --git a/PdkFriendServer/Logic/IsmctsBot.cs b/PdkFriendServer/Logic/IsmctsBot.cs index 1e14d7f9..260de9c7 100644 --- a/PdkFriendServer/Logic/IsmctsBot.cs +++ b/PdkFriendServer/Logic/IsmctsBot.cs @@ -26,10 +26,86 @@ namespace PdkFriendServer.Logic public bool DecideBaoZhuang(PdkBotView view) { - // 包庄决策:用快速模拟评估——手牌质量高就包 - // 简化:手牌中 >10 的大牌(J/Q/K/A/2)多就包 - int bigCards = view.MyHand.Count(c => c.GameNum >= 11); - return bigCards >= 6; // ≥6 张大牌 → 有一定控制力 + // ISMCTS 包庄决策:模拟 N 局,估算自己第一个出完的概率 + // 包庄不改变牌局流程,只翻倍输赢:P(win)*2*gain - P(lose)*2*loss + // 阈值 45%——因为包庄成功收益翻倍,略微倾斜有利于局势占优 + double winRate = EstimateWinProbability(view); + bool shouldBao = winRate >= 0.45; + + Console.WriteLine($"[ISMCTS pos{view.MyPos}] 包庄评估: P(win)={winRate:P0} → {(shouldBao ? "包庄" : "不包")}"); + return shouldBao; + } + + /// 模拟 N 局随机对局,统计我第一个出完的概率 + private double EstimateWinProbability(PdkBotView view) + { + int myPos = view.MyPos; + var hand = view.MyHand; + int sims = Math.Min(_simulations, 600); // 包庄模拟用 600 次,比出牌少 + + int wins = 0; + for (int s = 0; s < sims; s++) + { + if (SimulateWin(hand, view)) + wins++; + } + return (double)wins / sims; + } + + /// 模拟一局只看胜负——不指定第一步出什么 + private bool SimulateWin(TCardInfoPdkF[] myHand, PdkBotView view) + { + int myPos = view.MyPos; + int nextPos = myPos % 3 + 1; + int oppPos = (myPos + 1) % 3 + 1; + + var hands = new List[3]; + hands[myPos - 1] = new List(myHand); + hands[nextPos - 1] = new List(); + hands[oppPos - 1] = new List(); + + var allCards = GenerateDeck(); + var unknown = allCards.Where(c => !myHand.Any(h => h.ID == c.ID)).ToList(); + Shuffle(unknown); + + int nextCnt = view.ShenYuCard[nextPos - 1]; + int oppCnt = view.ShenYuCard[oppPos - 1]; + hands[nextPos - 1].AddRange(unknown.Take(nextCnt)); + hands[oppPos - 1].AddRange(unknown.Skip(nextCnt).Take(oppCnt)); + + // 模拟到有人出完 + int current = myPos; + var maxPlay = new PlayOutCardPdkF(); // GameNum=0 → 新一轮 + int maxPlayer = 0; + + for (int move = 0; move < 400; move++) + { + var curHand = hands[current - 1]; + if (curHand.Count == 0) return current == myPos; + + bool isNewRound = maxPlayer == current || maxPlay.GameNum == 0; + var curMax = isNewRound ? new PlayOutCardPdkF() : maxPlay; + var tips = PdkCardAlgorithm.GetTipCard(curMax, curHand.ToArray(), null, false); + + if (tips != null && tips.Count > 0) + { + var pick = tips[0]; + maxPlay = new PlayOutCardPdkF + { + Pos = (byte)current, + GameNum = pick[0].GameNum, + Type = pick.Count == 1 ? CardType1.DanZhang : CardType1.DuiZi, + Ids = pick.Select(c => c.ID).ToArray() + }; + maxPlayer = current; + foreach (var id in maxPlay.Ids) + curHand.RemoveAll(c => c.ID == id); + } + current = current % 3 + 1; + } + + return hands[myPos - 1].Count <= hands[nextPos - 1].Count + && hands[myPos - 1].Count <= hands[oppPos - 1].Count; } public PlayOutCardPdkF DecidePlay(PdkBotView view) diff --git a/exe/PdkFriendServer/PdkFriendServer.dll b/exe/PdkFriendServer/PdkFriendServer.dll index 4f42588f..e16b7922 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 88c47f7a..42b9bdba 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 4f42588f..e16b7922 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 88c47f7a..42b9bdba 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 c4df0ab4..47bce560 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 98001b13..617d661c 100644 Binary files a/exe/hjha-console/hjha-console.pdb and b/exe/hjha-console/hjha-console.pdb differ diff --git a/gamepack/gamepack.txt b/gamepack/gamepack.txt index 8ca9f2eb..9c0bfaa4 100644 --- a/gamepack/gamepack.txt +++ b/gamepack/gamepack.txt @@ -1 +1 @@ -{"CardPack":{"Cards":[{"CardInfos":[{"Flower":1,"Num":2,"GameState":1,"ID":2,"GameNum":16},{"Flower":4,"Num":13,"GameState":1,"ID":52,"GameNum":13},{"Flower":3,"Num":12,"GameState":1,"ID":38,"GameNum":12},{"Flower":1,"Num":11,"GameState":1,"ID":11,"GameNum":11},{"Flower":4,"Num":11,"GameState":1,"ID":50,"GameNum":11},{"Flower":2,"Num":10,"GameState":1,"ID":23,"GameNum":10},{"Flower":3,"Num":10,"GameState":1,"ID":36,"GameNum":10},{"Flower":4,"Num":10,"GameState":1,"ID":49,"GameNum":10},{"Flower":2,"Num":9,"GameState":1,"ID":22,"GameNum":9},{"Flower":2,"Num":8,"GameState":1,"ID":21,"GameNum":8},{"Flower":3,"Num":8,"GameState":1,"ID":34,"GameNum":8},{"Flower":1,"Num":7,"GameState":1,"ID":7,"GameNum":7},{"Flower":1,"Num":5,"ID":5,"GameNum":5},{"Flower":2,"Num":4,"GameState":1,"ID":17,"GameNum":4},{"Flower":4,"Num":4,"GameState":1,"ID":43,"GameNum":4},{"Flower":2,"Num":3,"GameState":1,"ID":16,"GameNum":3}]},{"CardInfos":[{"Flower":3,"Num":1,"GameState":1,"ID":27,"GameNum":14},{"Flower":2,"Num":13,"GameState":1,"ID":26,"GameNum":13},{"Flower":1,"Num":12,"GameState":1,"ID":12,"GameNum":12},{"Flower":4,"Num":12,"GameState":1,"ID":51,"GameNum":12},{"Flower":2,"Num":11,"GameState":1,"ID":24,"GameNum":11},{"Flower":1,"Num":10,"GameState":1,"ID":10,"GameNum":10},{"Flower":3,"Num":9,"GameState":1,"ID":35,"GameNum":9},{"Flower":4,"Num":9,"GameState":1,"ID":48,"GameNum":9},{"Flower":1,"Num":8,"GameState":1,"ID":8,"GameNum":8},{"Flower":4,"Num":8,"GameState":1,"ID":47,"GameNum":8},{"Flower":4,"Num":7,"GameState":1,"ID":46,"GameNum":7},{"Flower":1,"Num":6,"GameState":1,"ID":6,"GameNum":6},{"Flower":3,"Num":6,"GameState":1,"ID":32,"GameNum":6},{"Flower":4,"Num":6,"GameState":1,"ID":45,"GameNum":6},{"Flower":3,"Num":5,"GameState":1,"ID":31,"GameNum":5},{"Flower":4,"Num":5,"GameState":1,"ID":44,"GameNum":5}]},{"CardInfos":[{"Flower":1,"Num":1,"GameState":1,"ID":1,"GameNum":14},{"Flower":4,"Num":1,"GameState":1,"ID":40,"GameNum":14},{"Flower":1,"Num":13,"GameState":1,"ID":13,"GameNum":13},{"Flower":3,"Num":13,"GameState":1,"ID":39,"GameNum":13},{"Flower":2,"Num":12,"GameState":1,"ID":25,"GameNum":12},{"Flower":3,"Num":11,"GameState":1,"ID":37,"GameNum":11},{"Flower":1,"Num":9,"GameState":1,"ID":9,"GameNum":9},{"Flower":2,"Num":7,"GameState":1,"ID":20,"GameNum":7},{"Flower":3,"Num":7,"GameState":1,"ID":33,"GameNum":7},{"Flower":2,"Num":6,"GameState":1,"ID":19,"GameNum":6},{"Flower":2,"Num":5,"GameState":1,"ID":18,"GameNum":5},{"Flower":1,"Num":4,"GameState":1,"ID":4,"GameNum":4},{"Flower":3,"Num":4,"GameState":1,"ID":30,"GameNum":4},{"Flower":1,"Num":3,"GameState":1,"ID":3,"GameNum":3},{"Flower":3,"Num":3,"GameState":1,"ID":29,"GameNum":3},{"Flower":4,"Num":3,"ID":42,"GameNum":3}]}]},"Info":{"GameZT":4,"MaxPlayCard":{"Pos":1,"Type":2,"GameNum":5,"Ids":"BQ=="},"ActivePlayCard":{"Pos":1,"Type":2,"GameNum":5,"Ids":"BQ=="},"WhoPlay":1,"FistPlay":3,"BaoZhuang":"AAAB","PlayNum":3,"OverPos":1,"ZhaDans":[0,0,0],"ShenYuCard":"DxAP","Score":[0,0,0],"BaoPos":3,"PlayTuoGauan":"AAAA"}} \ No newline at end of file +{"CardPack":{"Cards":[{"CardInfos":[{"Flower":1,"Num":2,"GameState":1,"ID":2,"GameNum":16},{"Flower":3,"Num":1,"GameState":1,"ID":27,"GameNum":14},{"Flower":3,"Num":13,"GameState":1,"ID":39,"GameNum":13},{"Flower":4,"Num":13,"GameState":1,"ID":52,"GameNum":13},{"Flower":3,"Num":11,"GameState":1,"ID":37,"GameNum":11},{"Flower":4,"Num":11,"GameState":1,"ID":50,"GameNum":11},{"Flower":1,"Num":8,"GameState":1,"ID":8,"GameNum":8},{"Flower":3,"Num":8,"GameState":1,"ID":34,"GameNum":8},{"Flower":4,"Num":8,"GameState":1,"ID":47,"GameNum":8},{"Flower":2,"Num":7,"GameState":1,"ID":20,"GameNum":7},{"Flower":3,"Num":6,"GameState":1,"ID":32,"GameNum":6},{"Flower":1,"Num":5,"GameState":1,"ID":5,"GameNum":5},{"Flower":1,"Num":4,"GameState":1,"ID":4,"GameNum":4},{"Flower":4,"Num":4,"GameState":1,"ID":43,"GameNum":4},{"Flower":1,"Num":3,"GameState":1,"ID":3,"GameNum":3},{"Flower":2,"Num":3,"GameState":1,"ID":16,"GameNum":3}]},{"CardInfos":[{"Flower":1,"Num":13,"GameState":1,"ID":13,"GameNum":13},{"Flower":2,"Num":12,"GameState":1,"ID":25,"GameNum":12},{"Flower":4,"Num":12,"GameState":1,"ID":51,"GameNum":12},{"Flower":1,"Num":11,"GameState":1,"ID":11,"GameNum":11},{"Flower":1,"Num":10,"GameState":1,"ID":10,"GameNum":10},{"Flower":4,"Num":10,"GameState":1,"ID":49,"GameNum":10},{"Flower":1,"Num":9,"GameState":1,"ID":9,"GameNum":9},{"Flower":3,"Num":9,"GameState":1,"ID":35,"GameNum":9},{"Flower":4,"Num":9,"GameState":1,"ID":48,"GameNum":9},{"Flower":2,"Num":8,"GameState":1,"ID":21,"GameNum":8},{"Flower":1,"Num":6,"GameState":1,"ID":6,"GameNum":6},{"Flower":2,"Num":6,"GameState":1,"ID":19,"GameNum":6},{"Flower":4,"Num":6,"GameState":1,"ID":45,"GameNum":6},{"Flower":2,"Num":4,"GameState":1,"ID":17,"GameNum":4},{"Flower":3,"Num":3,"GameState":1,"ID":29,"GameNum":3},{"Flower":4,"Num":3,"ID":42,"GameNum":3}]},{"CardInfos":[{"Flower":1,"Num":1,"GameState":1,"ID":1,"GameNum":14},{"Flower":4,"Num":1,"GameState":1,"ID":40,"GameNum":14},{"Flower":2,"Num":13,"GameState":1,"ID":26,"GameNum":13},{"Flower":1,"Num":12,"GameState":1,"ID":12,"GameNum":12},{"Flower":3,"Num":12,"GameState":1,"ID":38,"GameNum":12},{"Flower":2,"Num":11,"GameState":1,"ID":24,"GameNum":11},{"Flower":2,"Num":10,"GameState":1,"ID":23,"GameNum":10},{"Flower":3,"Num":10,"GameState":1,"ID":36,"GameNum":10},{"Flower":2,"Num":9,"GameState":1,"ID":22,"GameNum":9},{"Flower":1,"Num":7,"GameState":1,"ID":7,"GameNum":7},{"Flower":3,"Num":7,"GameState":1,"ID":33,"GameNum":7},{"Flower":4,"Num":7,"GameState":1,"ID":46,"GameNum":7},{"Flower":2,"Num":5,"GameState":1,"ID":18,"GameNum":5},{"Flower":3,"Num":5,"GameState":1,"ID":31,"GameNum":5},{"Flower":4,"Num":5,"GameState":1,"ID":44,"GameNum":5},{"Flower":3,"Num":4,"ID":30,"GameNum":4}]}]},"Info":{"GameZT":4,"MaxPlayCard":{"Pos":3,"Type":2,"GameNum":4,"Ids":"Hg=="},"ActivePlayCard":{"Pos":3,"Type":2,"GameNum":4,"Ids":"Hg=="},"WhoPlay":3,"FistPlay":1,"BaoZhuang":"AgEB","PlayNum":3,"OverPos":3,"ZhaDans":[0,0,0],"ShenYuCard":"EA8P","Score":[0,0,0],"BaoPos":2,"PlayTuoGauan":"AAAA"}} \ No newline at end of file diff --git a/output.txt b/output.txt index c34a99f1..0b8aa82d 100644 --- a/output.txt +++ b/output.txt @@ -1,75 +1,82 @@ -[07/07/2026 13:26:48]:关牌玩法, 首局黑桃3先出, 四带三, 炸弹加10, 包庄, 必压, -[07/07/2026 13:26:48]:-------------1开始----------------------------- -[07/07/2026 13:26:48]:ID:2 花色:黑桃 大小:2_16 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:52 花色:方块 大小:13_13 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:38 花色:梅花 大小:12_12 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:11 花色:黑桃 大小:11_11 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:50 花色:方块 大小:11_11 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:23 花色:红桃 大小:10_10 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:36 花色:梅花 大小:10_10 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:49 花色:方块 大小:10_10 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:22 花色:红桃 大小:9_9 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:21 花色:红桃 大小:8_8 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:34 花色:梅花 大小:8_8 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:7 花色:黑桃 大小:7_7 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:5 花色:黑桃 大小:5_5 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:17 花色:红桃 大小:4_4 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:43 花色:方块 大小:4_4 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:16 花色:红桃 大小:3_3 分:0 状态:在手上 -[07/07/2026 13:26:48]:-------------2开始----------------------------- -[07/07/2026 13:26:48]:ID:27 花色:梅花 大小:1_14 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:26 花色:红桃 大小:13_13 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:12 花色:黑桃 大小:12_12 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:51 花色:方块 大小:12_12 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:24 花色:红桃 大小:11_11 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:10 花色:黑桃 大小:10_10 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:35 花色:梅花 大小:9_9 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:48 花色:方块 大小:9_9 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:8 花色:黑桃 大小:8_8 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:47 花色:方块 大小:8_8 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:46 花色:方块 大小:7_7 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:6 花色:黑桃 大小:6_6 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:32 花色:梅花 大小:6_6 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:45 花色:方块 大小:6_6 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:31 花色:梅花 大小:5_5 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:44 花色:方块 大小:5_5 分:0 状态:在手上 -[07/07/2026 13:26:48]:-------------3开始----------------------------- -[07/07/2026 13:26:48]:ID:1 花色:黑桃 大小:1_14 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:40 花色:方块 大小:1_14 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:13 花色:黑桃 大小:13_13 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:39 花色:梅花 大小:13_13 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:25 花色:红桃 大小:12_12 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:37 花色:梅花 大小:11_11 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:9 花色:黑桃 大小:9_9 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:20 花色:红桃 大小:7_7 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:33 花色:梅花 大小:7_7 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:19 花色:红桃 大小:6_6 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:18 花色:红桃 大小:5_5 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:4 花色:黑桃 大小:4_4 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:30 花色:梅花 大小:4_4 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:3 花色:黑桃 大小:3_3 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:29 花色:梅花 大小:3_3 分:0 状态:在手上 -[07/07/2026 13:26:48]:ID:42 花色:方块 大小:3_3 分:0 状态:在手上 -[07/07/2026 13:26:48]:玩家:0,bombCount:0 -[07/07/2026 13:26:48]:玩家:1,bombCount:0 -[07/07/2026 13:26:48]:玩家:2,bombCount:0 -[07/07/2026 13:26:48]:第一个出牌位置:3,开始次数:0,上游玩家:0 -[07/07/2026 13:26:48]:whoPlay:3 -[07/07/2026 13:26:49]:保存文件:./gamepack/gamepack2026-07-07-13-26-49-044.txt -[07/07/2026 13:26:49]:bot-包庄: pos3=包 -[07/07/2026 13:26:49]:whoPlay:3 -[07/07/2026 13:26:49]:保存文件:./gamepack/gamepack2026-07-07-13-26-49-060.txt -[07/07/2026 13:26:49]:进入打牌流程,玩家出牌内容是:pos:3 type:DanZhang num:3 ids:len:1--42 -[07/07/2026 13:26:49]:---------------------3----- shengyu:15------------- -[07/07/2026 13:26:49]:whoPlay:1 -[07/07/2026 13:26:49]:保存文件:./gamepack/gamepack2026-07-07-13-26-49-365.txt -[07/07/2026 13:26:49]:进入打牌流程,玩家出牌内容是:pos:1 type:DanZhang num:5 ids:len:1--5 -[07/07/2026 13:26:49]:---------------------1----- shengyu:15------------- -[07/07/2026 13:26:49]:whoPlay:1 -[07/07/2026 13:26:49]:保存文件:./gamepack/gamepack2026-07-07-13-26-49-638.txt -[07/07/2026 13:26:49]:进入结算 bao:3,overpos:1 -[07/07/2026 13:26:49]:baowin:False -[07/07/2026 13:26:49]:玩家:1 ,输赢:32 -[07/07/2026 13:26:49]:玩家:2 ,输赢:32 -[07/07/2026 13:26:49]:玩家:3 ,输赢:-64 -[07/07/2026 13:26:49]:test over! +[07/07/2026 13:29:25]:关牌玩法, 首局黑桃3先出, 四带三, 炸弹加10, 包庄, 必压, +[07/07/2026 13:29:25]:-------------1开始----------------------------- +[07/07/2026 13:29:25]:ID:2 花色:黑桃 大小:2_16 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:27 花色:梅花 大小:1_14 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:39 花色:梅花 大小:13_13 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:52 花色:方块 大小:13_13 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:37 花色:梅花 大小:11_11 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:50 花色:方块 大小:11_11 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:8 花色:黑桃 大小:8_8 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:34 花色:梅花 大小:8_8 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:47 花色:方块 大小:8_8 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:20 花色:红桃 大小:7_7 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:32 花色:梅花 大小:6_6 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:5 花色:黑桃 大小:5_5 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:4 花色:黑桃 大小:4_4 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:43 花色:方块 大小:4_4 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:3 花色:黑桃 大小:3_3 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:16 花色:红桃 大小:3_3 分:0 状态:在手上 +[07/07/2026 13:29:25]:-------------2开始----------------------------- +[07/07/2026 13:29:25]:ID:13 花色:黑桃 大小:13_13 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:25 花色:红桃 大小:12_12 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:51 花色:方块 大小:12_12 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:11 花色:黑桃 大小:11_11 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:10 花色:黑桃 大小:10_10 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:49 花色:方块 大小:10_10 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:9 花色:黑桃 大小:9_9 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:35 花色:梅花 大小:9_9 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:48 花色:方块 大小:9_9 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:21 花色:红桃 大小:8_8 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:6 花色:黑桃 大小:6_6 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:19 花色:红桃 大小:6_6 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:45 花色:方块 大小:6_6 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:17 花色:红桃 大小:4_4 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:29 花色:梅花 大小:3_3 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:42 花色:方块 大小:3_3 分:0 状态:在手上 +[07/07/2026 13:29:25]:-------------3开始----------------------------- +[07/07/2026 13:29:25]:ID:1 花色:黑桃 大小:1_14 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:40 花色:方块 大小:1_14 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:26 花色:红桃 大小:13_13 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:12 花色:黑桃 大小:12_12 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:38 花色:梅花 大小:12_12 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:24 花色:红桃 大小:11_11 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:23 花色:红桃 大小:10_10 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:36 花色:梅花 大小:10_10 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:22 花色:红桃 大小:9_9 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:7 花色:黑桃 大小:7_7 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:33 花色:梅花 大小:7_7 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:46 花色:方块 大小:7_7 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:18 花色:红桃 大小:5_5 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:31 花色:梅花 大小:5_5 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:44 花色:方块 大小:5_5 分:0 状态:在手上 +[07/07/2026 13:29:25]:ID:30 花色:梅花 大小:4_4 分:0 状态:在手上 +[07/07/2026 13:29:25]:玩家:0,bombCount:0 +[07/07/2026 13:29:25]:玩家:1,bombCount:0 +[07/07/2026 13:29:25]:玩家:2,bombCount:0 +[07/07/2026 13:29:25]:第一个出牌位置:1,开始次数:0,上游玩家:0 +[07/07/2026 13:29:25]:whoPlay:1 +[07/07/2026 13:29:25]:保存文件:./gamepack/gamepack2026-07-07-13-29-25-456.txt +[07/07/2026 13:29:25]:bot-包庄: pos1=不包 +[07/07/2026 13:29:25]:whoPlay:2 +[07/07/2026 13:29:25]:保存文件:./gamepack/gamepack2026-07-07-13-29-25-606.txt +[07/07/2026 13:29:25]:bot-包庄: pos2=包 +[07/07/2026 13:29:25]:whoPlay:3 +[07/07/2026 13:29:25]:保存文件:./gamepack/gamepack2026-07-07-13-29-25-748.txt +[07/07/2026 13:29:25]:bot-包庄: pos3=包 +[07/07/2026 13:29:25]:进入打牌,play:2 ,包庄玩家的位置:2 +[07/07/2026 13:29:25]:whoPlay:2 +[07/07/2026 13:29:25]:保存文件:./gamepack/gamepack2026-07-07-13-29-25-884.txt +[07/07/2026 13:29:26]:进入打牌流程,玩家出牌内容是:pos:2 type:DanZhang num:3 ids:len:1--42 +[07/07/2026 13:29:26]:---------------------2----- shengyu:15------------- +[07/07/2026 13:29:26]:whoPlay:3 +[07/07/2026 13:29:26]:保存文件:./gamepack/gamepack2026-07-07-13-29-26-037.txt +[07/07/2026 13:29:26]:进入打牌流程,玩家出牌内容是:pos:3 type:DanZhang num:4 ids:len:1--30 +[07/07/2026 13:29:26]:---------------------3----- shengyu:15------------- +[07/07/2026 13:29:26]:whoPlay:3 +[07/07/2026 13:29:26]:保存文件:./gamepack/gamepack2026-07-07-13-29-26-188.txt +[07/07/2026 13:29:26]:进入结算 bao:2,overpos:3 +[07/07/2026 13:29:26]:baowin:False +[07/07/2026 13:29:26]:玩家:1 ,输赢:32 +[07/07/2026 13:29:26]:玩家:2 ,输赢:-64 +[07/07/2026 13:29:26]:玩家:3 ,输赢:32 +[07/07/2026 13:29:26]:test over!