修复幸运号

master
李泽帆 2026-10-06 23:54:27 +08:00
parent 4e549f031a
commit 67a3f0b9f2
3 changed files with 195 additions and 107 deletions

View File

@ -783,7 +783,7 @@ public class RoomCard {
return dealCards; return dealCards;
} }
public boolean checksanlong(ArrayList<Integer> dealCards, int tmpcard) { private boolean checksanlong(ArrayList<Integer> dealCards, int tmpcard) {
// 判断是否有两条龙 // 判断是否有两条龙
ArrayList<Integer> tmpcards = new ArrayList<Integer>(); ArrayList<Integer> tmpcards = new ArrayList<Integer>();
tmpcards.addAll(dealCards); tmpcards.addAll(dealCards);
@ -804,25 +804,25 @@ public class RoomCard {
return false; return false;
} }
public static void main(String[] args) { // public static void main(String[] args) {
ArrayList<Integer> tmpcards = new ArrayList<Integer>(); // ArrayList<Integer> tmpcards = new ArrayList<Integer>();
ArrayList<Integer> dealCards = new ArrayList<Integer>(); // ArrayList<Integer> dealCards = new ArrayList<Integer>();
dealCards.add(108); // dealCards.add(108);
dealCards.add(108); // dealCards.add(108);
dealCards.add(108); // dealCards.add(108);
dealCards.add(208); // dealCards.add(208);
dealCards.add(208); // dealCards.add(208);
dealCards.add(208); // dealCards.add(208);
dealCards.add(208); // dealCards.add(208);
tmpcards.addAll(dealCards); // tmpcards.addAll(dealCards);
Map<Integer, Integer> cardMap = CardUtil.getCardNumMap(tmpcards); // Map<Integer, Integer> cardMap = CardUtil.getCardNumMap(tmpcards);
for (Map.Entry<Integer, Integer> entry : cardMap.entrySet()) { // for (Map.Entry<Integer, Integer> entry : cardMap.entrySet()) {
int card = entry.getKey(); // int card = entry.getKey();
int num = entry.getValue(); // int num = entry.getValue();
if (num == 4) { // if (num == 4) {
System.out.println(card); // System.out.println(card);
} // }
} // }
//
} // }
} }

View File

@ -2,6 +2,7 @@ package extend.zp.player.state;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import com.game.Global; import com.game.Global;
@ -31,9 +32,9 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
@Override @Override
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
if(owner.stateMachine.lastState instanceof PlayerPauseState) { if (owner.stateMachine.lastState instanceof PlayerPauseState) {
logger.info("状态异常 :" + owner.stateMachine.lastState); logger.info("状态异常 :" + owner.stateMachine.lastState);
owner.stateMachine.curState=owner.stateMachine.lastState; owner.stateMachine.curState = owner.stateMachine.lastState;
return; return;
} }
// logger.info("owner.isTip:"+owner.isTip+"--"+owner.playerid); // logger.info("owner.isTip:"+owner.isTip+"--"+owner.playerid);
@ -52,6 +53,21 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
room.isAllPass = false; room.isAllPass = false;
// room.isFanPao = false; // room.isFanPao = false;
owner.getRoom().tipMap.clear(); owner.getRoom().tipMap.clear();
EXPlayer otherPlayer = null;
// 查询对家信息
for (Entry<Integer, Player> 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) { if (owner.seat == room.adminSeat) {
Global.logger.info("dealcards playerid:" + owner.playerid + " adminseat"); Global.logger.info("dealcards playerid:" + owner.playerid + " adminseat");
@ -147,74 +163,121 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
if (owner.black_white_status == 2) { if (owner.black_white_status == 2) {
Global.logger Global.logger
.info("dealcards playerid:" + owner.playerid + " white player:" + owner.black_white_rate); .info("dealcards playerid:" + owner.playerid + " white player:" + owner.black_white_rate);
/* double rand = Math.random() % 100 * 100;
* double rand = Math.random() % 100 * 100; if (rand <= owner.black_white_rate) if (rand <= owner.black_white_rate) {
* { ArrayList<Integer> tempCardList = new ArrayList<Integer>(); int count = 0; ArrayList<Integer> tempCardList = new ArrayList<Integer>();
* do { int drawCard = room.card.pop(); int count = 0;
* do {
* boolean flag = false; if (IsGoodCard((EXPlayer) owner, drawCard)) { flag = int drawCard = room.card.pop();
* true; }
* boolean flag = false;
* if (!flag) { if (room.card.cardList.size() > 0 && count++ <= if (IsGoodCard((EXPlayer) owner, drawCard)) {
* room.card.cardList.size()) { tempCardList.add(drawCard); flag = true;
* //Global.logger.info("not good card:" + drawCard + " for white player"); }
* continue; } }
* if (!flag) {
* owner.drawCard = drawCard; break; } while (true); if (room.card.cardList.size() > 0 && count++ <= room.card.cardList.size()) {
* room.card.cardList.addAll(tempCardList); } else { owner.drawCard = tempCardList.add(drawCard);
* room.card.pop(); } Global.logger.info(
*/ "状态2的not good card:" + drawCard + " for white player:" + owner.playerid);
owner.drawCard = room.card.pop(); 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) { } else if (owner.black_white_status == 1) {
Global.logger Global.logger
.info("dealcards playerid:" + owner.playerid + " black player:" + owner.black_white_rate); .info("dealcards playerid:" + owner.playerid + " black player:" + owner.black_white_rate);
/* double rand = Math.random() % 100 * 100;
* double rand = Math.random() % 100 * 100; if (rand <= owner.black_white_rate) if (rand <= owner.black_white_rate) {
* { ArrayList<Integer> tempCardList = new ArrayList<Integer>(); int count = 0; ArrayList<Integer> tempCardList = new ArrayList<Integer>();
* do { int drawCard = room.card.pop(); int count = 0;
* do {
* boolean flag = false; if (IsGoodCard((EXPlayer) owner, drawCard)) { flag = int drawCard = room.card.pop();
* true; }
* boolean flag = false;
* if (flag) { if (room.card.cardList.size() > 0 && count++ <= if (IsGoodCard((EXPlayer) owner, drawCard)) {
* room.card.cardList.size()) { tempCardList.add(drawCard); flag = true;
* //Global.logger.info("not good card:" + drawCard + " for white player"); }
* continue; } }
* if (flag) {
* owner.drawCard = drawCard; break; } while (true); if (room.card.cardList.size() > 0 && count++ <= room.card.cardList.size()) {
* room.card.cardList.addAll(tempCardList); } else { owner.drawCard = tempCardList.add(drawCard);
* room.card.pop(); } Global.logger.info(
*/ "状态1的not good card:" + drawCard + " for white player:" + owner.playerid);
owner.drawCard = room.card.pop(); 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 { } else {
Global.logger.info("dealcards playerid:" + owner.playerid + " general player"); Global.logger.info("dealcards playerid:" + owner.playerid + " general player");
/* boolean black_flag = false;
* boolean black_flag = false; for (Map.Entry<Integer, Player> entry : for (Map.Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) {
* room.playerMapBySeat.entrySet()) { Player player = entry.getValue(); Player player = entry.getValue();
*
* if (player.playerid != owner.playerid) { if (player.black_white_status == 1) if (player.playerid != owner.playerid) {
* { black_flag = true; } } } if (player.black_white_status == 1) {
* black_flag = true;
* double rand = Math.random() % 100 * 100; if (black_flag && rand <= }
* owner.black_white_rate) { ArrayList<Integer> tempCardList = new }
* ArrayList<Integer>(); int count = 0; do { int drawCard = room.card.pop(); }
*
* boolean flag = false; for (Map.Entry<Integer, Player> entry : double rand = Math.random() % 100 * 100;
* room.playerMapBySeat.entrySet()) { Player player = entry.getValue(); if (black_flag && rand <= owner.black_white_rate) {
* ArrayList<Integer> tempCardList = new ArrayList<Integer>();
* if (player.playerid != owner.playerid) { if (player.black_white_status == 1) int count = 0;
* { if (IsGoodCard2((EXPlayer) player, drawCard)) { flag = true; break; } } } } do {
* int drawCard = room.card.pop();
* if (flag) { if (room.card.cardList.size() > 0 && count++ <=
* room.card.cardList.size()) { tempCardList.add(drawCard); boolean flag = false;
* Global.logger.info("not good card:" + drawCard + " for white player"); for (Map.Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) {
* continue; } } Player player = entry.getValue();
*
* owner.drawCard = drawCard; break; } while (true); if (player.playerid != owner.playerid) {
* room.card.cardList.addAll(tempCardList); } else { owner.drawCard = if (player.black_white_status == 1) {
* room.card.pop(); } if (IsGoodCard2((EXPlayer) player, drawCard)) {
*/ flag = true;
owner.drawCard = room.card.pop(); 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<EXPlayer> {
return false; 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 @Override
public void toNextState(EXPlayer owner) { public void toNextState(EXPlayer owner) {
if (!owner.getRoom().isAllPass) { if (!owner.getRoom().isAllPass) {
@ -353,7 +444,7 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
owner.room.enqueueRunnable(new Runnable() { owner.room.enqueueRunnable(new Runnable() {
@Override @Override
public void run() { public void run() {
if (owner.drawCard != 0 ) { if (owner.drawCard != 0) {
ITObject param = new TObject(); ITObject param = new TObject();
param.putInt("card", owner.drawCard); param.putInt("card", owner.drawCard);
param.putInt("seat", owner.seat); param.putInt("seat", owner.seat);

View File

@ -91,7 +91,7 @@ public class Paixing {
} }
// 处理一块扁 // 处理一块扁
MingtangCheck mingtangCheck1 = new MingtangCheck(list, drawCard); // MingtangCheck mingtangCheck1 = new MingtangCheck(list, drawCard);
// logger.info("进入一块匾之前"); // logger.info("进入一块匾之前");
// //
// logger.info("player:"+player.playerid+"---"+player.cardInhand+"--"+player.opCardList.size()+"---摸到的牌:"+drawCard); // logger.info("player:"+player.playerid+"---"+player.cardInhand+"--"+player.opCardList.size()+"---摸到的牌:"+drawCard);
@ -102,29 +102,26 @@ public class Paixing {
// } // }
// logger.info("进入一块匾之后"); // logger.info("进入一块匾之后");
boolean yikuaibian = mingtangCheck1.yikuaibian(player); // boolean yikuaibian = mingtangCheck1.yikuaibian(player);
if (yikuaibian && mingtangCheck1.huxiTotal >= 15) { // if (yikuaibian && mingtangCheck1.huxiTotal >= 15) {
// for (int i = 0; i < mingtangCheck1.opCardList.size(); i++) { //// for (int i = 0; i < mingtangCheck1.opCardList.size(); i++) {
// logger.info("检测一块扁增加的opCard:"+mingtangCheck1.opCardList.get(i).card1 + "---" + mingtangCheck1.opCardList.get(i).card2 //// logger.info("检测一块扁增加的opCard:"+mingtangCheck1.opCardList.get(i).card1 + "---" + mingtangCheck1.opCardList.get(i).card2
// + "---" + mingtangCheck1.opCardList.get(i).card3 + "---" //// + "---" + mingtangCheck1.opCardList.get(i).card3 + "---"
// + mingtangCheck1.opCardList.get(i).huXi); //// + mingtangCheck1.opCardList.get(i).huXi);
// } //// }
// ////
// logger.info("一块匾:" + yikuaibian); //// logger.info("一块匾:" + yikuaibian);
player.huXi = mingtangCheck1.huxiTotal; // player.huXi = mingtangCheck1.huxiTotal;
player.opCardList.addAll(mingtangCheck1.opCardList); // player.opCardList.addAll(mingtangCheck1.opCardList);
player.handCard.clear(); // player.handCard.clear();
return true; // return true;
} // }
// logger.info("player.huXi:" + player.huXi); // logger.info("player.huXi:" + player.huXi);
// logger.info("player.cardInhand:" + player.cardInhand); // logger.info("player.cardInhand:" + player.cardInhand);
// logger.info("win.cardList:" + win.cardList); // logger.info("win.cardList:" + win.cardList);
// 原始算法计算 // 原始算法计算
boolean canWin = win.tryWin(player); boolean canWin = win.tryWin(player);
// logger.info("canWin:" + canWin);
// logger.info("isWin:" + isWin);
// logger.info("player.huXi:" + player.huXi);
if (canWin && !isWin) { if (canWin && !isWin) {
@ -223,7 +220,7 @@ public class Paixing {
} }
} }
logger.info("最后胡息:" + player.huXi); // logger.info("最后胡息:" + player.huXi);
return isWin; return isWin;
} }