From 67a3f0b9f2fc3291e04c163873b60a32069ccd85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B3=BD=E5=B8=86?= <411641460@qq.com> Date: Tue, 6 Oct 2026 23:54:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B9=B8=E8=BF=90=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/extend/zp/RoomCard.java | 44 ++-- .../zp/player/state/EXPlayerDrawState.java | 223 ++++++++++++------ .../src/main/java/extend/zp/uitl/Paixing.java | 35 ++- 3 files changed, 195 insertions(+), 107 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 df1f373..c3e818d 100644 --- a/game_zp_fangpaofa/src/main/java/extend/zp/RoomCard.java +++ b/game_zp_fangpaofa/src/main/java/extend/zp/RoomCard.java @@ -783,7 +783,7 @@ public class RoomCard { return dealCards; } - public boolean checksanlong(ArrayList dealCards, int tmpcard) { + private boolean checksanlong(ArrayList dealCards, int tmpcard) { // 判断是否有两条龙 ArrayList tmpcards = new ArrayList(); tmpcards.addAll(dealCards); @@ -804,25 +804,25 @@ public class RoomCard { return false; } - public static void main(String[] args) { - ArrayList tmpcards = new ArrayList(); - ArrayList dealCards = new ArrayList(); - dealCards.add(108); - dealCards.add(108); - dealCards.add(108); - dealCards.add(208); - dealCards.add(208); - dealCards.add(208); - dealCards.add(208); - tmpcards.addAll(dealCards); - Map cardMap = CardUtil.getCardNumMap(tmpcards); - for (Map.Entry entry : cardMap.entrySet()) { - int card = entry.getKey(); - int num = entry.getValue(); - if (num == 4) { - System.out.println(card); - } - } - - } +// public static void main(String[] args) { +// ArrayList tmpcards = new ArrayList(); +// ArrayList dealCards = new ArrayList(); +// dealCards.add(108); +// dealCards.add(108); +// dealCards.add(108); +// dealCards.add(208); +// dealCards.add(208); +// dealCards.add(208); +// dealCards.add(208); +// tmpcards.addAll(dealCards); +// Map cardMap = CardUtil.getCardNumMap(tmpcards); +// for (Map.Entry entry : cardMap.entrySet()) { +// int card = entry.getKey(); +// int num = entry.getValue(); +// if (num == 4) { +// System.out.println(card); +// } +// } +// +// } } diff --git a/game_zp_fangpaofa/src/main/java/extend/zp/player/state/EXPlayerDrawState.java b/game_zp_fangpaofa/src/main/java/extend/zp/player/state/EXPlayerDrawState.java index 25f014b..0d42265 100644 --- a/game_zp_fangpaofa/src/main/java/extend/zp/player/state/EXPlayerDrawState.java +++ b/game_zp_fangpaofa/src/main/java/extend/zp/player/state/EXPlayerDrawState.java @@ -2,6 +2,7 @@ package extend.zp.player.state; import java.util.ArrayList; import java.util.Map; +import java.util.Map.Entry; import java.util.concurrent.TimeUnit; import com.game.Global; @@ -31,9 +32,9 @@ public class EXPlayerDrawState extends StateBase { @Override public void enter(EXPlayer owner) { - if(owner.stateMachine.lastState instanceof PlayerPauseState) { + if (owner.stateMachine.lastState instanceof PlayerPauseState) { logger.info("状态异常 :" + owner.stateMachine.lastState); - owner.stateMachine.curState=owner.stateMachine.lastState; + owner.stateMachine.curState = owner.stateMachine.lastState; return; } // logger.info("owner.isTip:"+owner.isTip+"--"+owner.playerid); @@ -52,6 +53,21 @@ public class EXPlayerDrawState extends StateBase { room.isAllPass = false; // room.isFanPao = false; owner.getRoom().tipMap.clear(); + EXPlayer otherPlayer = null; + + // 查询对家信息 + for (Entry entry : owner.getRoom().playerMapById.entrySet()) { + if (!entry.getKey().equals(owner.playerid)) { + otherPlayer = (EXPlayer) entry.getValue(); + } + } + + if (otherPlayer.black_white_rate > 0) { + owner.is_white=true; + room.while_list = true; + } + Global.logger.info("dealcards playerid:" + owner.playerid + " xingyuhao:" + owner.is_white + + " white_value:" + room.white_value); if (owner.seat == room.adminSeat) { Global.logger.info("dealcards playerid:" + owner.playerid + " adminseat"); @@ -147,74 +163,121 @@ public class EXPlayerDrawState extends StateBase { if (owner.black_white_status == 2) { Global.logger .info("dealcards playerid:" + owner.playerid + " white player:" + owner.black_white_rate); - /* - * double rand = Math.random() % 100 * 100; if (rand <= owner.black_white_rate) - * { ArrayList tempCardList = new ArrayList(); int count = 0; - * do { int drawCard = room.card.pop(); - * - * boolean flag = false; if (IsGoodCard((EXPlayer) owner, drawCard)) { flag = - * true; } - * - * if (!flag) { if (room.card.cardList.size() > 0 && count++ <= - * room.card.cardList.size()) { tempCardList.add(drawCard); - * //Global.logger.info("not good card:" + drawCard + " for white player"); - * continue; } } - * - * owner.drawCard = drawCard; break; } while (true); - * room.card.cardList.addAll(tempCardList); } else { owner.drawCard = - * room.card.pop(); } - */ - owner.drawCard = room.card.pop(); + double rand = Math.random() % 100 * 100; + if (rand <= owner.black_white_rate) { + ArrayList tempCardList = new ArrayList(); + int count = 0; + do { + int drawCard = room.card.pop(); + + boolean flag = false; + if (IsGoodCard((EXPlayer) owner, drawCard)) { + flag = true; + } + + if (!flag) { + if (room.card.cardList.size() > 0 && count++ <= room.card.cardList.size()) { + tempCardList.add(drawCard); + Global.logger.info( + "状态2的not good card:" + drawCard + " for white player:" + owner.playerid); + continue; + } + } + + owner.drawCard = drawCard; + break; + } while (true); + room.card.cardList.addAll(tempCardList); + } else { + int card = room.card.pop(); + Global.logger.info("正常发牌:" + card); + + owner.drawCard = card; + } } else if (owner.black_white_status == 1) { Global.logger .info("dealcards playerid:" + owner.playerid + " black player:" + owner.black_white_rate); - /* - * double rand = Math.random() % 100 * 100; if (rand <= owner.black_white_rate) - * { ArrayList tempCardList = new ArrayList(); int count = 0; - * do { int drawCard = room.card.pop(); - * - * boolean flag = false; if (IsGoodCard((EXPlayer) owner, drawCard)) { flag = - * true; } - * - * if (flag) { if (room.card.cardList.size() > 0 && count++ <= - * room.card.cardList.size()) { tempCardList.add(drawCard); - * //Global.logger.info("not good card:" + drawCard + " for white player"); - * continue; } } - * - * owner.drawCard = drawCard; break; } while (true); - * room.card.cardList.addAll(tempCardList); } else { owner.drawCard = - * room.card.pop(); } - */ - owner.drawCard = room.card.pop(); + double rand = Math.random() % 100 * 100; + if (rand <= owner.black_white_rate) { + ArrayList tempCardList = new ArrayList(); + int count = 0; + do { + int drawCard = room.card.pop(); + + boolean flag = false; + if (IsGoodCard((EXPlayer) owner, drawCard)) { + flag = true; + } + + if (flag) { + if (room.card.cardList.size() > 0 && count++ <= room.card.cardList.size()) { + tempCardList.add(drawCard); + Global.logger.info( + "状态1的not good card:" + drawCard + " for white player:" + owner.playerid); + continue; + } + } + + owner.drawCard = drawCard; + break; + } while (true); + room.card.cardList.addAll(tempCardList); + } else { + int card = room.card.pop(); + Global.logger.info("正常发牌:" + card); + + owner.drawCard = card; + } } else { Global.logger.info("dealcards playerid:" + owner.playerid + " general player"); - /* - * boolean black_flag = false; for (Map.Entry entry : - * room.playerMapBySeat.entrySet()) { Player player = entry.getValue(); - * - * if (player.playerid != owner.playerid) { if (player.black_white_status == 1) - * { black_flag = true; } } } - * - * double rand = Math.random() % 100 * 100; if (black_flag && rand <= - * owner.black_white_rate) { ArrayList tempCardList = new - * ArrayList(); int count = 0; do { int drawCard = room.card.pop(); - * - * boolean flag = false; for (Map.Entry entry : - * room.playerMapBySeat.entrySet()) { Player player = entry.getValue(); - * - * if (player.playerid != owner.playerid) { if (player.black_white_status == 1) - * { if (IsGoodCard2((EXPlayer) player, drawCard)) { flag = true; break; } } } } - * - * if (flag) { if (room.card.cardList.size() > 0 && count++ <= - * room.card.cardList.size()) { tempCardList.add(drawCard); - * Global.logger.info("not good card:" + drawCard + " for white player"); - * continue; } } - * - * owner.drawCard = drawCard; break; } while (true); - * room.card.cardList.addAll(tempCardList); } else { owner.drawCard = - * room.card.pop(); } - */ - owner.drawCard = room.card.pop(); + boolean black_flag = false; + for (Map.Entry entry : room.playerMapBySeat.entrySet()) { + Player player = entry.getValue(); + + if (player.playerid != owner.playerid) { + if (player.black_white_status == 1) { + black_flag = true; + } + } + } + + double rand = Math.random() % 100 * 100; + if (black_flag && rand <= owner.black_white_rate) { + ArrayList tempCardList = new ArrayList(); + int count = 0; + do { + int drawCard = room.card.pop(); + + boolean flag = false; + for (Map.Entry entry : room.playerMapBySeat.entrySet()) { + Player player = entry.getValue(); + + if (player.playerid != owner.playerid) { + if (player.black_white_status == 1) { + if (IsGoodCard2((EXPlayer) player, drawCard)) { + flag = true; + break; + } + } + } + } + + if (flag) { + if (room.card.cardList.size() > 0 && count++ <= room.card.cardList.size()) { + tempCardList.add(drawCard); + Global.logger.info("not good card:" + drawCard + " for white player"); + continue; + } + } + + owner.drawCard = drawCard; + break; + } while (true); + room.card.cardList.addAll(tempCardList); + } else { + + owner.drawCard = room.card.pop(); + } } } } @@ -299,6 +362,34 @@ public class EXPlayerDrawState extends StateBase { return false; } +// private boolean IsGoodCard3(EXPlayer player, int drawCard) { +// boolean goodCard = false; +// if (Paixing.checkWin((EXPlayer) player, drawCard)) { +// goodCard = true; +// } +// +// for (int i = 0; i < player.kanGroup.size(); i++) { +// if (drawCard == player.kanGroup.get(i)[0]) { +// goodCard = true; +// } +// } +// +// for (int i = 0; i < player.weiGroup.size(); i++) { +// if (drawCard == player.weiGroup.get(i)[0]) { +// goodCard = true; +// } +// } +// +// if (CardUtil.cardNum(drawCard, player.cardInhand) >= 2) { +// goodCard = true; +// } +// if (goodCard == true) { +// return false; +// } +// +// return false; +// } + @Override public void toNextState(EXPlayer owner) { if (!owner.getRoom().isAllPass) { @@ -353,7 +444,7 @@ public class EXPlayerDrawState extends StateBase { owner.room.enqueueRunnable(new Runnable() { @Override public void run() { - if (owner.drawCard != 0 ) { + if (owner.drawCard != 0) { ITObject param = new TObject(); param.putInt("card", owner.drawCard); param.putInt("seat", owner.seat); 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 bb2e08d..96f7e77 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 @@ -91,7 +91,7 @@ public class Paixing { } // 处理一块扁 - MingtangCheck mingtangCheck1 = new MingtangCheck(list, drawCard); +// MingtangCheck mingtangCheck1 = new MingtangCheck(list, drawCard); // logger.info("进入一块匾之前"); // // logger.info("player:"+player.playerid+"---"+player.cardInhand+"--"+player.opCardList.size()+"---摸到的牌:"+drawCard); @@ -102,29 +102,26 @@ public class Paixing { // } // logger.info("进入一块匾之后"); - boolean yikuaibian = mingtangCheck1.yikuaibian(player); - if (yikuaibian && mingtangCheck1.huxiTotal >= 15) { -// for (int i = 0; i < mingtangCheck1.opCardList.size(); i++) { -// logger.info("检测一块扁增加的opCard:"+mingtangCheck1.opCardList.get(i).card1 + "---" + mingtangCheck1.opCardList.get(i).card2 -// + "---" + mingtangCheck1.opCardList.get(i).card3 + "---" -// + mingtangCheck1.opCardList.get(i).huXi); -// } -// -// logger.info("一块匾:" + yikuaibian); - player.huXi = mingtangCheck1.huxiTotal; - player.opCardList.addAll(mingtangCheck1.opCardList); - player.handCard.clear(); - return true; - } +// boolean yikuaibian = mingtangCheck1.yikuaibian(player); +// if (yikuaibian && mingtangCheck1.huxiTotal >= 15) { +//// for (int i = 0; i < mingtangCheck1.opCardList.size(); i++) { +//// logger.info("检测一块扁增加的opCard:"+mingtangCheck1.opCardList.get(i).card1 + "---" + mingtangCheck1.opCardList.get(i).card2 +//// + "---" + mingtangCheck1.opCardList.get(i).card3 + "---" +//// + mingtangCheck1.opCardList.get(i).huXi); +//// } +//// +//// logger.info("一块匾:" + yikuaibian); +// player.huXi = mingtangCheck1.huxiTotal; +// player.opCardList.addAll(mingtangCheck1.opCardList); +// player.handCard.clear(); +// return true; +// } // logger.info("player.huXi:" + player.huXi); // logger.info("player.cardInhand:" + player.cardInhand); // logger.info("win.cardList:" + win.cardList); // 原始算法计算 boolean canWin = win.tryWin(player); -// logger.info("canWin:" + canWin); -// logger.info("isWin:" + isWin); -// logger.info("player.huXi:" + player.huXi); if (canWin && !isWin) { @@ -223,7 +220,7 @@ public class Paixing { } } - logger.info("最后胡息:" + player.huXi); +// logger.info("最后胡息:" + player.huXi); return isWin; }