修复幸运号

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

View File

@ -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<EXPlayer> {
@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<EXPlayer> {
room.isAllPass = false;
// room.isFanPao = false;
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) {
Global.logger.info("dealcards playerid:" + owner.playerid + " adminseat");
@ -147,77 +163,124 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
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<Integer> tempCardList = new ArrayList<Integer>(); 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<Integer> tempCardList = new ArrayList<Integer>();
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<Integer> tempCardList = new ArrayList<Integer>(); 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<Integer> tempCardList = new ArrayList<Integer>();
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<Integer, Player> 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<Integer> tempCardList = new
* ArrayList<Integer>(); int count = 0; do { int drawCard = room.card.pop();
*
* boolean flag = false; for (Map.Entry<Integer, Player> 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(); }
*/
boolean black_flag = false;
for (Map.Entry<Integer, Player> 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<Integer> tempCardList = new ArrayList<Integer>();
int count = 0;
do {
int drawCard = room.card.pop();
boolean flag = false;
for (Map.Entry<Integer, Player> 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();
}
}
}
}
room.step++;
int tempStep = room.step;
@ -299,6 +362,34 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
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<EXPlayer> {
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);

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("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);
// 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("一块匾:" + 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;
}