From 5ae4bcdc6d0301a4cfa3676d042526d943c89f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B3=BD=E5=B8=86?= <411641460@qq.com> Date: Fri, 17 Jul 2026 21:21:15 +0800 Subject: [PATCH] 1 --- .../src/main/java/extend/zp/RoomCard.java | 25 ++++-- .../zp/player/rulestate/PRDrawPaoState.java | 1 + .../extend/zp/player/rulestate/PRTiState.java | 1 + .../zp/player/rulestate/PRWeiState.java | 3 +- .../src/main/java/extend/zp/uitl/Paixing.java | 17 ++-- .../src/main/java/extend/zp/uitl/WinCard.java | 90 +++++++++++-------- 6 files changed, 85 insertions(+), 52 deletions(-) diff --git a/game_zp_fangpaofa/src/main/java/extend/zp/RoomCard.java b/game_zp_fangpaofa/src/main/java/extend/zp/RoomCard.java index 1d19dab..37b5e92 100644 --- a/game_zp_fangpaofa/src/main/java/extend/zp/RoomCard.java +++ b/game_zp_fangpaofa/src/main/java/extend/zp/RoomCard.java @@ -59,12 +59,25 @@ public class RoomCard { } public void sanlong() { - List list2 = Arrays.asList(103, 104, 104, 105, 106, 107, 108, 108, 108, 109, 110, 110, 201, 203, 204, 204, 207, - 208, 209, 210); - List list = Arrays.asList(101, 102, 103, 104, 105, 105, 107, 107, 107, 108, 110, 110, 201, 201, 202, 202, 204, - 205, 207, 210); - List list3 = Arrays.asList(207, 106, 205, 206, 202, 202, 108, 104, 202, 109, 208, 206, 106, 209, 102, 210, 205, - 202, 209); + +// //不够胡息 + List list2 = Arrays.asList(101, 102, 103, 104, 105, 105, 107, 108, 108, 109, 204, 204, 205, 205, 205, 206, 206, 207, 209, 210); + List list = Arrays.asList(101, 102, 103, 104, 105, 108, 109, 109, 201, 202, 203, 203, 203, 204, 206, 207, 207, 208, 208, 209); + List list3 = Arrays.asList(102, 107, 204, 209, 208, 107, 110, 103, 106, 205, 105, 207, 210, 108, 103, 201, 110, 110, 104, 202); + +// List list2 = Arrays.asList(101, 103, 103, 105, 106, 108, 109, 109, 110, 201, 202, 203, 204, 204, 205, 205, 208, 208, 210, 210); +// List list = Arrays.asList(101, 102, 103, 104, 104, 104, 105, 105, 107, 107, 107, 107, 108, 110, 201, 202, 207, 209, 210, 210); +// List list3 = Arrays.asList(102, 209, 109, 203, 101, 110, 101, 205, 108, 201, 206, 203, 202, 106, 104, 209, 209, 205, 204, 109); +// + +// //够胡息 +// List list2 = Arrays.asList(103, 104, 104, 105, 106, 107, 108, 108, 108, 109, 110, 110, 201, 203, 204, 204, 207, +// 208, 209, 210); +// List list = Arrays.asList(101, 102, 103, 104, 105, 105, 107, 107, 107, 108, 110, 110, 201, 201, 202, 202, 204, +// 205, 207, 210); +// List list3 = Arrays.asList(207, 106, 205, 206, 202, 202, 108, 104, 202, 109, 208, 206, 106, 209, 102, 210, 205, +// 202, 209); + // List list2 = Arrays.asList(102, 104, 107, 107, 108, 108, 109, 109, 110, 203, 204, 204, 205, 207, 207, 208, 208, 208, 208, 209); // List list = Arrays.asList(103, 103, 103, 104, 106, 109, 110, 201, 202, 202, 202, 202, 203, 206, 206, 206, 207, 209, 210, 210); // List list3 = Arrays.asList(108, 210, 207, 105, 105, 105, 103, 204, 203, 209, 106, 106, 107, 107, 102, 203, 110, 110, 106, 201); diff --git a/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRDrawPaoState.java b/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRDrawPaoState.java index 1c41725..9467796 100644 --- a/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRDrawPaoState.java +++ b/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRDrawPaoState.java @@ -49,6 +49,7 @@ public class PRDrawPaoState extends StateBase { opcard.addInt(card); EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_PAO, fromseat, opcard); + owner.getRoom().activeCard=0; int count = owner.tiCount + owner.kongCount; if (count<2&&!owner.guohupao){ EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner); diff --git a/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRTiState.java b/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRTiState.java index bcb7193..4f389d6 100644 --- a/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRTiState.java +++ b/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRTiState.java @@ -38,6 +38,7 @@ public class PRTiState extends StateBase { opcard.addInt(card); opcard.addInt(card); owner.tipai_count = owner.tipai_count + 1; + owner.getRoom().activeCard=0; EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_TI, owner.seat, opcard); EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner); } diff --git a/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRWeiState.java b/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRWeiState.java index 156c871..b614e0f 100644 --- a/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRWeiState.java +++ b/game_zp_fangpaofa/src/main/java/extend/zp/player/rulestate/PRWeiState.java @@ -52,7 +52,8 @@ public class PRWeiState extends StateBase { ITArray opcard = TArray.newInstance(); opcard.addInt(card); opcard.addInt(card); - + + owner.getRoom().activeCard=0; EXMainServer.gameCtr.actionCard(owner, card, card, type, owner.seat, opcard); EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner); } diff --git a/game_zp_fangpaofa/src/main/java/extend/zp/uitl/Paixing.java b/game_zp_fangpaofa/src/main/java/extend/zp/uitl/Paixing.java index edd6fe4..203ed73 100644 --- a/game_zp_fangpaofa/src/main/java/extend/zp/uitl/Paixing.java +++ b/game_zp_fangpaofa/src/main/java/extend/zp/uitl/Paixing.java @@ -23,14 +23,17 @@ public class Paixing { haveCardCount++; } } - if (haveCardCount >= 2) { - player.huXi+=win.tryKeziBefore(room.activeCard, player); - - logger.info("当前胡息:"+player.huXi); - } - logger.info("当前行动的牌:" + room.activeCard); +// int lastHuxi = 0; +// if (haveCardCount >= 2) { +// lastHuxi=win.tryKeziBefore(room.activeCard, player); +// +// logger.info("当前胡息:"+player.huXi+",最后胡牌胡息:"+lastHuxi); +// } +// logger.info("当前行动的牌:" + room.activeCard); // 原始算法计算 - if (win.tryWin(player) && !isWin) { + boolean canWin = win.tryWin(player); + if (canWin && !isWin) { + if (player.huXi >= 15) { isWin = true; } diff --git a/game_zp_fangpaofa/src/main/java/extend/zp/uitl/WinCard.java b/game_zp_fangpaofa/src/main/java/extend/zp/uitl/WinCard.java index 358507a..d8626a8 100644 --- a/game_zp_fangpaofa/src/main/java/extend/zp/uitl/WinCard.java +++ b/game_zp_fangpaofa/src/main/java/extend/zp/uitl/WinCard.java @@ -3,17 +3,21 @@ package extend.zp.uitl; import java.io.IOException; import java.util.*; +import com.taurus.core.util.Logger; + import extend.zp.EXPlayer; import extend.zp.EXRoom; import extend.zp.OpCard; import extend.zp.RuleWeight; +import extend.zp.player.rulestate.PRChi; public class WinCard { - public int pair_count; - public int long_count; - public Stack> stack; - public Stack stackHuxi; - public List cardList; + public int pair_count; + public int long_count; + public Stack> stack; + public Stack stackHuxi; + public List cardList; + public static final Logger logger = Logger.getLogger(WinCard.class); private void push(List cardGroup) { this.stack.push(cardGroup); @@ -28,6 +32,10 @@ public class WinCard { } boolean tryKezi(int card, EXPlayer player) { + if(player.getRoom().activeCard!=0) { + card = player.getRoom().activeCard; + } +// logger.info("当前牌数量:" + CardUtil.cardNum(card, this.cardList) + "--" + card); if (CardUtil.cardNum(card, this.cardList) >= 3) { CardUtil.removeCard(this.cardList, card, CardUtil.cardNum(card, this.cardList)); List cardGroup = new ArrayList(); @@ -36,12 +44,17 @@ public class WinCard { cardGroup.add(card); this.push(cardGroup); int huXi = 0; - if (player.getRoom().isTianHu && card == player.getRoom().drawCard && player.getRoom().bankerSeat == player.seat) { + if (player.getRoom().isTianHu && card == player.getRoom().drawCard + && player.getRoom().bankerSeat == player.seat) { huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, card); } else { huXi = Paixing.caclHuxi(RuleWeight.TYPE_PONG, card); } +// logger.info("计算胡息:" + huXi + "--" + card); + player.huXi += huXi; + logger.info("总胡息:" + player.huXi); + this.stackHuxi.push(huXi); return true; } @@ -163,6 +176,7 @@ public class WinCard { } public boolean tryWin(EXPlayer player) { + if (this.cardList.size() == 0) { if (player.tiCount + player.kongCount > 0) { if (this.pair_count == 1) { @@ -185,11 +199,9 @@ public class WinCard { } } - if (activeCard == 0) { activeCard = this.cardList.get(0); } - if (activeCard % 100 == 1) { if (tryShunzi1(activeCard, player)) { if (tryWin(player)) { @@ -279,7 +291,9 @@ public class WinCard { } } else { if (tryKezi(activeCard, player)) { - if (tryWin(player)) { + + boolean canWin = tryWin(player); + if (canWin) { return true; } this.rollBack(); @@ -334,33 +348,33 @@ public class WinCard { public static void main(String[] args) throws ClassNotFoundException, IOException { Map redis_room_map = new HashMap<>(); - redis_room_map.put("id","749322"); - redis_room_map.put("game","17"); - redis_room_map.put("maxPlayers","2"); - redis_room_map.put("players","[168168,791309]"); - redis_room_map.put("group","532196"); - redis_room_map.put("owner","{user}:123456"); - redis_room_map.put("create_time","1749539730"); - redis_room_map.put("options","{\"tuoguan_active_time\":0,\"daniao\":2,\"pid\":17,\"shoupai\":0,\"honghu\":true,\"yikuaibian\":true,\"tiandihu\":true,\"isvip\":0,\"mode\":1,\"hpData\":{\"limitloot\":0,\"limitInRoom\":0,\"type\":1,\"times\":3000,\"maxRound\":100,\"xipai_rewardType\":3,\"limitPump\":0,\"limitPlay\":1000,\"robot_room\":0,\"basePump\":0,\"anchou_rewardType\":3,\"tex_times_room\":1000,\"rewards_list\":[{\"UpperLimitReward\":0,\"pumpProportion\":0,\"UpperLimit\":0}]},\"kahu\":true,\"maxRound\":100,\"mingwei\":true,\"hp_no_limit\":0,\"isNonnegative\":1,\"wuhu\":true,\"game_id\":17,\"maxPlayers\":2,\"hunum\":0,\"fengding\":1,\"haidiliao\":false,\"tuoguan\":false,\"isHidden\":0,\"xi_pai\":true,\"yidianhong\":true,\"shisanhong\":true,\"tuoguan_active_timeIndex\":1,\"tuoguan_result_type\":0,\"xi_pai_score\":1000,\"choupai\":0}"); - redis_room_map.put("cache_ver","12345"); - redis_room_map.put("times","100"); - redis_room_map.put("pay","2"); - redis_room_map.put("payer","2"); - redis_room_map.put("AA","1"); - redis_room_map.put("agent","true"); - redis_room_map.put("status","1"); - redis_room_map.put("isActive","true"); - redis_room_map.put("opt","1"); - redis_room_map.put("round","1"); - redis_room_map.put("gpid","17"); - redis_room_map.put("open","0"); - redis_room_map.put("kick_time","30"); - redis_room_map.put("seats","[1,2]"); + redis_room_map.put("id", "749322"); + redis_room_map.put("game", "17"); + redis_room_map.put("maxPlayers", "2"); + redis_room_map.put("players", "[168168,791309]"); + redis_room_map.put("group", "532196"); + redis_room_map.put("owner", "{user}:123456"); + redis_room_map.put("create_time", "1749539730"); + redis_room_map.put("options", + "{\"tuoguan_active_time\":0,\"daniao\":2,\"pid\":17,\"shoupai\":0,\"honghu\":true,\"yikuaibian\":true,\"tiandihu\":true,\"isvip\":0,\"mode\":1,\"hpData\":{\"limitloot\":0,\"limitInRoom\":0,\"type\":1,\"times\":3000,\"maxRound\":100,\"xipai_rewardType\":3,\"limitPump\":0,\"limitPlay\":1000,\"robot_room\":0,\"basePump\":0,\"anchou_rewardType\":3,\"tex_times_room\":1000,\"rewards_list\":[{\"UpperLimitReward\":0,\"pumpProportion\":0,\"UpperLimit\":0}]},\"kahu\":true,\"maxRound\":100,\"mingwei\":true,\"hp_no_limit\":0,\"isNonnegative\":1,\"wuhu\":true,\"game_id\":17,\"maxPlayers\":2,\"hunum\":0,\"fengding\":1,\"haidiliao\":false,\"tuoguan\":false,\"isHidden\":0,\"xi_pai\":true,\"yidianhong\":true,\"shisanhong\":true,\"tuoguan_active_timeIndex\":1,\"tuoguan_result_type\":0,\"xi_pai_score\":1000,\"choupai\":0}"); + redis_room_map.put("cache_ver", "12345"); + redis_room_map.put("times", "100"); + redis_room_map.put("pay", "2"); + redis_room_map.put("payer", "2"); + redis_room_map.put("AA", "1"); + redis_room_map.put("agent", "true"); + redis_room_map.put("status", "1"); + redis_room_map.put("isActive", "true"); + redis_room_map.put("opt", "1"); + redis_room_map.put("round", "1"); + redis_room_map.put("gpid", "17"); + redis_room_map.put("open", "0"); + redis_room_map.put("kick_time", "30"); + redis_room_map.put("seats", "[1,2]"); ; - EXRoom room = new EXRoom("749322",redis_room_map); - EXPlayer player = new EXPlayer(168168,room,"ddddddd"); - + EXRoom room = new EXRoom("749322", redis_room_map); + EXPlayer player = new EXPlayer(168168, room, "ddddddd"); List list = new ArrayList<>(); String str = "106"; @@ -369,18 +383,18 @@ public class WinCard { } player.cardInhand = list; - List op = new ArrayList(); - OpCard opCard=new OpCard(3, 102, 102, 102, 9); + OpCard opCard = new OpCard(3, 102, 102, 102, 9); op.add(opCard); WinCard win = new WinCard(list, 106); boolean res = win.tryWin(player); } - + int tryKeziBefore(int card, EXPlayer player) { int huXi = 0; if (CardUtil.cardNum(card, this.cardList) >= 3) { - if (player.getRoom().isTianHu && card == player.getRoom().drawCard && player.getRoom().bankerSeat == player.seat) { + if (player.getRoom().isTianHu && card == player.getRoom().drawCard + && player.getRoom().bankerSeat == player.seat) { huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, card); } else { huXi = Paixing.caclHuxi(RuleWeight.TYPE_PONG, card);