master
李泽帆 2025-12-17 21:02:42 +08:00
parent 109fbe2324
commit b89be213df
7 changed files with 114 additions and 295 deletions

View File

@ -385,10 +385,6 @@ public class EXGameController extends GameController {
int maxDanPai = 0; int maxDanPai = 0;
int maxDuizi = 0; int maxDuizi = 0;
int maxSanZhang = 0; int maxSanZhang = 0;
boolean existWhite = false;
boolean existXingyunhao = false;
boolean existGeneral = false;
boolean existBlack = false;
double white_rate = 0; double white_rate = 0;
ArrayList<EXPlayer> tmpPlayerList = new ArrayList<>(); ArrayList<EXPlayer> tmpPlayerList = new ArrayList<>();
@ -401,202 +397,17 @@ public class EXGameController extends GameController {
Random random2 = new Random(); Random random2 = new Random();
int seat = random2.nextInt(2) + 1; int seat = random2.nextInt(2) + 1;
if (tmpPlayerList.size() == 3) { if (tmpPlayerList.size() == 4) {
seat = random2.nextInt(3) + 1; seat = random2.nextInt(4) + 1;
} }
for (int i = 0; i < tmpPlayerList.size(); i++) { for (int i = 0; i < tmpPlayerList.size(); i++) {
EXPlayer player = tmpPlayerList.get(i); EXPlayer player = tmpPlayerList.get(i);
// if (player.seat == seat) {
// player.is_white = true;
//
// }
player.is_white = true;
if (player.is_white) {
existXingyunhao = true;
} else {
if (player.black_white_status == 0) {
existGeneral = true;
} else if (player.black_white_status == 1) {
existBlack = true;
} else if (player.black_white_status == 2) {
existWhite = true;
}
}
}
for (int i = 0; i < tmpPlayerList.size(); i++) {
EXPlayer player = tmpPlayerList.get(i);
if (player.is_white) {
white_rate = 100;
} else {
continue;
}
if (player.nextCardInhand.size() != 0) {
List<CardObj> cardInhand = new ArrayList<CardObj>();
cardInhand.addAll(player.nextCardInhand);
player.cardInhand = cardInhand;
player.nextCardInhand.clear();
} else {
player.cardInhand = owner.card.deal(true, true, 100, player.black_white_status, player.black_white_rate,
player.black_white_rate, 0, 4, 3);
}
Collections.sort(player.cardInhand);
Map<Integer, Integer> playermap = CardUtil.getCardNumMap(player.cardInhand);
for (Entry<Integer, Integer> card_entry : playermap.entrySet()) {
int card = card_entry.getKey();
int num = card_entry.getValue();
if (card > maxDanPai) {
maxDanPai = card;
}
if (num == 2) {
if (card > maxDuizi) {
maxDuizi = card;
}
}
if (num == 3) {
if (card > maxSanZhang) {
maxSanZhang = card;
}
}
}
}
for (int i = 0; i < tmpPlayerList.size(); i++) {
EXPlayer player = tmpPlayerList.get(i);
if (player.is_white) {
continue;
} else {
if (player.black_white_status == 2) {
white_rate = player.black_white_rate;
Global.logger
.info("dealcards playerid:" + player.playerid + " white player:" + player.black_white_rate);
} else {
continue;
}
}
if (!existXingyunhao) {
player.cardInhand = owner.card.deal(owner.while_list, player.is_white, owner.white_value,
player.black_white_status, player.black_white_rate, player.black_white_rate, 0, 0, 0);
} else {
player.cardInhand = owner.card.deal(owner.while_list, player.is_white, owner.white_value,
player.black_white_status, player.black_white_rate, player.black_white_rate, maxDanPai,
maxDuizi, maxSanZhang);
}
Collections.sort(player.cardInhand);
if (!existXingyunhao && (existGeneral || existBlack)) {
Map<Integer, Integer> playermap = CardUtil.getCardNumMap(player.cardInhand);
for (Entry<Integer, Integer> card_entry : playermap.entrySet()) {
int card = card_entry.getKey();
int num = card_entry.getValue();
if (card > maxDanPai) {
maxDanPai = card;
}
if (num == 2) {
if (card > maxDuizi) {
maxDuizi = card;
}
}
if (num == 3) {
if (card > maxSanZhang) {
maxSanZhang = card;
}
}
}
}
}
for (int i = 0; i < tmpPlayerList.size(); i++) {
EXPlayer player = tmpPlayerList.get(i);
if (player.is_white) {
continue;
} else {
if (player.black_white_status == 0) {
Global.logger.info(
"dealcards playerid:" + player.playerid + " general player:" + player.black_white_rate);
} else {
continue;
}
}
player.cardInhand = owner.card.deal(owner.while_list, player.is_white, owner.white_value, player.cardInhand = owner.card.deal(owner.while_list, player.is_white, owner.white_value,
player.black_white_status, white_rate, white_rate, maxDanPai, maxDuizi, maxSanZhang); player.black_white_status, player.black_white_rate + white_rate,
// // 指定牌型 player.black_white_rate + white_rate, maxDanPai, maxDuizi, maxSanZhang);
// player.cardInhand = owner.card.deal0(player.seat);
// if (!existXingyunhao && !existWhite)
// {
// //player.cardInhand = owner.card.deal(owner.while_list, player.is_white, owner.white_value,player.black_white_status, white_rate, white_rate, 0, 0, 0);
// player.cardInhand = owner.card.deal1(player.seat);
// }
// else {
// player.cardInhand = owner.card.deal(owner.while_list, player.is_white, owner.white_value,
// player.black_white_status, white_rate, white_rate, maxDanPai, maxDuizi, maxSanZhang);
//
// }
//
Collections.sort(player.cardInhand);
if (!existXingyunhao && !existWhite && existBlack) {
Map<Integer, Integer> playermap = CardUtil.getCardNumMap(player.cardInhand);
for (Entry<Integer, Integer> card_entry : playermap.entrySet()) {
int card = card_entry.getKey();
int num = card_entry.getValue();
if (card > maxDanPai) {
maxDanPai = card;
}
if (num == 2) {
if (card > maxDuizi) {
maxDuizi = card;
}
}
if (num == 3) {
if (card > maxSanZhang) {
maxSanZhang = card;
}
}
}
}
}
for (int i = 0; i < tmpPlayerList.size(); i++) {
EXPlayer player = tmpPlayerList.get(i);
if (player.is_white) {
continue;
} else {
if (player.black_white_status == 1) {
Global.logger.info("dealcards playerid:" + player.playerid + " black player:"
+ (player.black_white_rate + white_rate));
} else {
continue;
}
}
if (!existXingyunhao && !existWhite && !existGeneral) {
player.cardInhand = owner.card.deal(owner.while_list, player.is_white, owner.white_value,
player.black_white_status, player.black_white_rate + white_rate,
player.black_white_rate + white_rate, 1, 6, 3);
} else {
player.cardInhand = owner.card.deal(owner.while_list, player.is_white, owner.white_value,
player.black_white_status, player.black_white_rate + white_rate,
player.black_white_rate + white_rate, maxDanPai, maxDuizi, maxSanZhang);
}
Collections.sort(player.cardInhand); Collections.sort(player.cardInhand);
} }

View File

@ -40,6 +40,13 @@ public class EXRoom extends Room {
public int adminSeat = 0; public int adminSeat = 0;
public int chooseover = 0; public int chooseover = 0;
/**
*
*/
public int poolScore=0;
public EXRoom(String roomid, Map<String, String> redis_room_map) { public EXRoom(String roomid, Map<String, String> redis_room_map) {
super(roomid, redis_room_map); super(roomid, redis_room_map);

View File

@ -45,7 +45,6 @@ public class RoomCard {
int currentBoomNum = 0; int currentBoomNum = 0;
int currentSanZhangNum = 0; int currentSanZhangNum = 0;
Map<Integer, Integer> result = new HashMap<Integer, Integer>(); Map<Integer, Integer> result = new HashMap<Integer, Integer>();
do {
currentBoomNum = 0; currentBoomNum = 0;
currentSanZhangNum = 0; currentSanZhangNum = 0;
this.shuffle(); this.shuffle();
@ -63,13 +62,11 @@ public class RoomCard {
} }
} }
} }
} while ((currentBoomNum + totalBoomNum > boomNumLimit)
|| (currentSanZhangNum + totalSanZhangNum > sangzhangNumLimit));
} }
private void initCard() { private void initCard() {
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
for (int index = 3; index <= 13; index++) { for (int index = 3; index <= 15; index++) {
this.cardList.add(new CardObj(100 + index)); this.cardList.add(new CardObj(100 + index));
// 梅花 // 梅花
@ -94,14 +91,15 @@ public class RoomCard {
rand.setSeed(System.currentTimeMillis()); rand.setSeed(System.currentTimeMillis());
int len = this.cardList.size(); int len = this.cardList.size();
for (int i = 0; i < len - 8; i++) { Global.logger.info("this.cardList.size()"+len);
// for (int i = 0; i < len - 8; i++) {
int randpos = rand.nextInt(1000000000) % len; //
CardObj cotemp = this.cardList.get(i); // int randpos = rand.nextInt(1000000000) % len;
// CardObj cotemp = this.cardList.get(i);
this.cardList.set(i, this.cardList.get(randpos)); //
this.cardList.set(randpos, cotemp); // this.cardList.set(i, this.cardList.get(randpos));
} // this.cardList.set(randpos, cotemp);
// }
} }

View File

@ -62,44 +62,37 @@ public class EXPlayerDiscardState extends StateBase<EXPlayer> {
return; return;
} else { } else {
if (big_ct.config.type == Config.TYPE_ZHA) { boolean bContainZha = false;
// 如果能出完,就自动出完
if (big_ct.card_list.size() == owner.cardInhand.size()) {
doAction(owner, big_ct, true); Map<Integer, Integer> cardMap = CardUtil.getCardNumMap(owner.cardInhand);
return; for (Map.Entry<Integer, Integer> entry : cardMap.entrySet()) {
}
} else {
boolean bContainZha = false; int handNum = cardMap.get(entry.getKey());
Map<Integer, Integer> cardMap = CardUtil.getCardNumMap(owner.cardInhand); // 4张牌 不能出现在处大赞的牌型中
for (Map.Entry<Integer, Integer> entry : cardMap.entrySet()) { if (handNum >= 4) {
int handNum = cardMap.get(entry.getKey());
// 4张牌 不能出现在处大赞的牌型中
if (handNum >= 4) {
bContainZha = true;
}
bContainZha = true;
} }
if (big_ct.card_list.size() == owner.cardInhand.size() && bContainZha == false) { }
doAction(owner, big_ct, true); System.out.println("触发出牌");
return; System.out.println("big_ct.card_list.size():"+big_ct.card_list.size());
} System.out.println("owner.cardInhand.size():"+owner.cardInhand.size());
if (big_ct.card_list.size() == owner.cardInhand.size() && bContainZha == false) {
doAction(owner, big_ct, true);
return;
} }
} }
} else { } else {
// 自动出牌 // // 自动出牌
CardGroup auto_ct = CardCheck.autoOutLastHand2(owner.cardInhand, room.config, false); // CardGroup auto_ct = CardCheck.autoOutLastHand2(owner.cardInhand, room.config, false);
if (auto_ct != null) { // if (auto_ct != null) {
doAction(owner, auto_ct, true); // doAction(owner, auto_ct, true);
return; // return;
} // }
} }
EXMainServer.gameCtr.discardTipEvent(owner); EXMainServer.gameCtr.discardTipEvent(owner);
@ -212,67 +205,67 @@ public class EXPlayerDiscardState extends StateBase<EXPlayer> {
case EXActionEvent.EVENT_TIMER_AUTO: case EXActionEvent.EVENT_TIMER_AUTO:
case EXActionEvent.EVENT_ENTRUST: case EXActionEvent.EVENT_ENTRUST:
AutoOut(owner); // AutoOut(owner);
break; break;
} }
} }
private void AutoOut(EXPlayer owner) { // private void AutoOut(EXPlayer owner) {
//
EXRoom room = owner.getRoom(); // EXRoom room = owner.getRoom();
//
if (room.lastDiscardSeat != 0 && room.lastDiscardSeat != owner.seat) { // if (room.lastDiscardSeat != 0 && room.lastDiscardSeat != owner.seat) {
//
CardGroup big_ct = null; // CardGroup big_ct = null;
EXPlayer playerNext = (EXPlayer) room.playerMapBySeat.get(owner.nextSeat); // EXPlayer playerNext = (EXPlayer) room.playerMapBySeat.get(owner.nextSeat);
if (playerNext != null && room.discard.config.type == Config.TYPE_DANPAI // if (playerNext != null && room.discard.config.type == Config.TYPE_DANPAI
&& playerNext.cardInhand.size() == 1) { // && playerNext.cardInhand.size() == 1) {
//
Map<Integer, List<CardObj>> cardMap = CardUtil.getCardListMap(owner.cardInhand); // Map<Integer, List<CardObj>> cardMap = CardUtil.getCardListMap(owner.cardInhand);
big_ct = CardCheck.selectDanpai(cardMap, room.discard, room.config, true); // big_ct = CardCheck.selectDanpai(cardMap, room.discard, room.config, true);
} else { // } else {
big_ct = CardCheck.tryBig(owner.cardInhand, room.discard); // big_ct = CardCheck.tryBig(owner.cardInhand, room.discard);
} // }
//
if (big_ct != null) { // if (big_ct != null) {
big_ct.card_list_mp = CardUtil.toTArray(big_ct.card_list); // big_ct.card_list_mp = CardUtil.toTArray(big_ct.card_list);
doAction(owner, big_ct, true); // doAction(owner, big_ct, true);
} else { // } else {
pass(owner); // pass(owner);
} // }
//
} else { // } else {
//
// 在托管或者自动出牌的时候 系统先出炸弹,如果炸弹没有 再出单张 // // 在托管或者自动出牌的时候 系统先出炸弹,如果炸弹没有 再出单张
// 将来可以把这个函数做的能智能一些,不光可以出炸弹 也可以出顺子飞机等等 // // 将来可以把这个函数做的能智能一些,不光可以出炸弹 也可以出顺子飞机等等
CardGroup out_ct = CardCheck.autoOut(owner.cardInhand, owner.room.config); // CardGroup out_ct = CardCheck.autoOut(owner.cardInhand, owner.room.config);
if (out_ct == null) { // if (out_ct == null) {
//
out_ct = new CardGroup(); // out_ct = new CardGroup();
List<CardObj> out_list = new ArrayList<>(); // List<CardObj> out_list = new ArrayList<>();
out_ct.card_list = out_list; // out_ct.card_list = out_list;
out_ct.config = CardConfig.DAN; // out_ct.config = CardConfig.DAN;
out_ct.len = 1; // out_ct.len = 1;
//
if (room.firstCard != 0) { // if (room.firstCard != 0) {
CardObj co = CardUtil.getCard1(room.firstCard, owner.cardInhand); // CardObj co = CardUtil.getCard1(room.firstCard, owner.cardInhand);
out_list.add(co); // out_list.add(co);
} else { // } else {
EXPlayer next = (EXPlayer) owner.room.playerMapBySeat.get(owner.nextSeat); // EXPlayer next = (EXPlayer) owner.room.playerMapBySeat.get(owner.nextSeat);
if (next.cardInhand.size() == 1) { // if (next.cardInhand.size() == 1) {
out_list.add(owner.cardInhand.get(owner.cardInhand.size() - 1)); // out_list.add(owner.cardInhand.get(owner.cardInhand.size() - 1));
} else { // } else {
out_list.add(owner.cardInhand.get(0)); // out_list.add(owner.cardInhand.get(0));
} // }
} // }
} // }
//
out_ct.card_list_mp = CardUtil.toTArray(out_ct.card_list); // out_ct.card_list_mp = CardUtil.toTArray(out_ct.card_list);
out_ct.min_card = out_ct.card_list.get(0).cardMod; // out_ct.min_card = out_ct.card_list.get(0).cardMod;
//
doAction(owner, out_ct, true); // doAction(owner, out_ct, true);
} // }
} // }
private void pass(EXPlayer owner) { private void pass(EXPlayer owner) {
EXMainServer.gameCtr.pass(owner);// 打不起过 EXMainServer.gameCtr.pass(owner);// 打不起过

View File

@ -19,6 +19,8 @@ public class EXPlayerPassState extends StateBase<EXPlayer> {
private void pass(EXPlayer owner) { private void pass(EXPlayer owner) {
EXMainServer.gameCtr.pass(owner);//打不起过 EXMainServer.gameCtr.pass(owner);//打不起过
//如果前两家都pass了则需要将奖池分算到下家头上
this.toNextState(owner);//下一位大哥 this.toNextState(owner);//下一位大哥
} }

View File

@ -658,14 +658,22 @@ public class CardCheck {
public final static boolean tryCompete(CardGroup banker, CardGroup other, ITObject roomConfig) { public final static boolean tryCompete(CardGroup banker, CardGroup other, ITObject roomConfig) {
int bankerCradType = banker.config.type; int bankerCradType = banker.config.type;
int otherCradType = other.config.type; int otherCradType = other.config.type;
if (bankerCradType != Config.TYPE_ZHA && otherCradType == Config.TYPE_ZHA) { if (bankerCradType != Config.TYPE_ZHA && otherCradType == Config.TYPE_ZHA) {
return true; return true;
} }
if (bankerCradType != otherCradType) { if (bankerCradType != otherCradType) {
return false; return false;
} }
if (otherCradType == Config.TYPE_ZHA && bankerCradType==Config.TYPE_ZHA) {
if(other.len > banker.len) {
return true;
}else if(other.min_card > banker.min_card) {
return true;
}else if(other.min_card) {
}
}
if (other.min_card > banker.min_card) { if (other.min_card > banker.min_card) {
if (otherCradType == Config.TYPE_ZHA) { if (otherCradType == Config.TYPE_ZHA) {

View File

@ -2,7 +2,7 @@ package game_pk_paodekuai;
import com.taurus.permanent.TPServer; import com.taurus.permanent.TPServer;
public class MainPaodekuai { public class MainDuoduo {
public static void main(String[] args) { public static void main(String[] args) {
TPServer.me().start(); TPServer.me().start();
} }