diff --git a/game_pk_duoduo/src/main/java/extend/pk/EXGameController.java b/game_pk_duoduo/src/main/java/extend/pk/EXGameController.java index 8c84afb..a55818f 100644 --- a/game_pk_duoduo/src/main/java/extend/pk/EXGameController.java +++ b/game_pk_duoduo/src/main/java/extend/pk/EXGameController.java @@ -385,10 +385,6 @@ public class EXGameController extends GameController { int maxDanPai = 0; int maxDuizi = 0; int maxSanZhang = 0; - boolean existWhite = false; - boolean existXingyunhao = false; - boolean existGeneral = false; - boolean existBlack = false; double white_rate = 0; ArrayList tmpPlayerList = new ArrayList<>(); @@ -401,202 +397,17 @@ public class EXGameController extends GameController { Random random2 = new Random(); int seat = random2.nextInt(2) + 1; - if (tmpPlayerList.size() == 3) { - seat = random2.nextInt(3) + 1; + if (tmpPlayerList.size() == 4) { + seat = random2.nextInt(4) + 1; } + + for (int i = 0; i < tmpPlayerList.size(); 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 cardInhand = new ArrayList(); - 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 playermap = CardUtil.getCardNumMap(player.cardInhand); - for (Entry 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 playermap = CardUtil.getCardNumMap(player.cardInhand); - for (Entry 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.black_white_status, 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 playermap = CardUtil.getCardNumMap(player.cardInhand); - for (Entry 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); - } + player.black_white_status, player.black_white_rate + white_rate, + player.black_white_rate + white_rate, maxDanPai, maxDuizi, maxSanZhang); Collections.sort(player.cardInhand); } diff --git a/game_pk_duoduo/src/main/java/extend/pk/EXRoom.java b/game_pk_duoduo/src/main/java/extend/pk/EXRoom.java index 81de65b..9697028 100644 --- a/game_pk_duoduo/src/main/java/extend/pk/EXRoom.java +++ b/game_pk_duoduo/src/main/java/extend/pk/EXRoom.java @@ -40,6 +40,13 @@ public class EXRoom extends Room { public int adminSeat = 0; public int chooseover = 0; + + /** + * 当前轮数的奖池分 + */ + public int poolScore=0; + + public EXRoom(String roomid, Map redis_room_map) { super(roomid, redis_room_map); diff --git a/game_pk_duoduo/src/main/java/extend/pk/RoomCard.java b/game_pk_duoduo/src/main/java/extend/pk/RoomCard.java index 3917078..d98cc49 100644 --- a/game_pk_duoduo/src/main/java/extend/pk/RoomCard.java +++ b/game_pk_duoduo/src/main/java/extend/pk/RoomCard.java @@ -45,7 +45,6 @@ public class RoomCard { int currentBoomNum = 0; int currentSanZhangNum = 0; Map result = new HashMap(); - do { currentBoomNum = 0; currentSanZhangNum = 0; this.shuffle(); @@ -63,13 +62,11 @@ public class RoomCard { } } } - } while ((currentBoomNum + totalBoomNum > boomNumLimit) - || (currentSanZhangNum + totalSanZhangNum > sangzhangNumLimit)); } private void initCard() { 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)); // 梅花 @@ -94,14 +91,15 @@ public class RoomCard { rand.setSeed(System.currentTimeMillis()); int len = this.cardList.size(); - for (int i = 0; i < len - 8; 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); - } + 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); +// +// this.cardList.set(i, this.cardList.get(randpos)); +// this.cardList.set(randpos, cotemp); +// } } diff --git a/game_pk_duoduo/src/main/java/extend/pk/player/state/EXPlayerDiscardState.java b/game_pk_duoduo/src/main/java/extend/pk/player/state/EXPlayerDiscardState.java index 77218e9..4b2064d 100644 --- a/game_pk_duoduo/src/main/java/extend/pk/player/state/EXPlayerDiscardState.java +++ b/game_pk_duoduo/src/main/java/extend/pk/player/state/EXPlayerDiscardState.java @@ -62,44 +62,37 @@ public class EXPlayerDiscardState extends StateBase { return; } else { - if (big_ct.config.type == Config.TYPE_ZHA) { - // 如果能出完,就自动出完 - if (big_ct.card_list.size() == owner.cardInhand.size()) { + boolean bContainZha = false; - doAction(owner, big_ct, true); - return; - } - } else { + Map cardMap = CardUtil.getCardNumMap(owner.cardInhand); + for (Map.Entry entry : cardMap.entrySet()) { - boolean bContainZha = false; + int handNum = cardMap.get(entry.getKey()); - Map cardMap = CardUtil.getCardNumMap(owner.cardInhand); - for (Map.Entry entry : cardMap.entrySet()) { - - int handNum = cardMap.get(entry.getKey()); - - // 4张牌 不能出现在处大赞的牌型中 - if (handNum >= 4) { - - bContainZha = true; - } + // 4张牌 不能出现在处大赞的牌型中 + if (handNum >= 4) { + bContainZha = true; } - if (big_ct.card_list.size() == owner.cardInhand.size() && bContainZha == false) { - doAction(owner, big_ct, true); - return; - } + } + System.out.println("触发出牌"); + 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 { - // 自动出牌 - CardGroup auto_ct = CardCheck.autoOutLastHand2(owner.cardInhand, room.config, false); - if (auto_ct != null) { - doAction(owner, auto_ct, true); - return; - } +// // 自动出牌 +// CardGroup auto_ct = CardCheck.autoOutLastHand2(owner.cardInhand, room.config, false); +// if (auto_ct != null) { +// doAction(owner, auto_ct, true); +// return; +// } } EXMainServer.gameCtr.discardTipEvent(owner); @@ -212,67 +205,67 @@ public class EXPlayerDiscardState extends StateBase { case EXActionEvent.EVENT_TIMER_AUTO: case EXActionEvent.EVENT_ENTRUST: - AutoOut(owner); +// AutoOut(owner); break; } } - private void AutoOut(EXPlayer owner) { - - EXRoom room = owner.getRoom(); - - if (room.lastDiscardSeat != 0 && room.lastDiscardSeat != owner.seat) { - - CardGroup big_ct = null; - EXPlayer playerNext = (EXPlayer) room.playerMapBySeat.get(owner.nextSeat); - if (playerNext != null && room.discard.config.type == Config.TYPE_DANPAI - && playerNext.cardInhand.size() == 1) { - - Map> cardMap = CardUtil.getCardListMap(owner.cardInhand); - big_ct = CardCheck.selectDanpai(cardMap, room.discard, room.config, true); - } else { - big_ct = CardCheck.tryBig(owner.cardInhand, room.discard); - } - - if (big_ct != null) { - big_ct.card_list_mp = CardUtil.toTArray(big_ct.card_list); - doAction(owner, big_ct, true); - } else { - pass(owner); - } - - } else { - - // 在托管或者自动出牌的时候 系统先出炸弹,如果炸弹没有 再出单张 - // 将来可以把这个函数做的能智能一些,不光可以出炸弹 也可以出顺子飞机等等 - CardGroup out_ct = CardCheck.autoOut(owner.cardInhand, owner.room.config); - if (out_ct == null) { - - out_ct = new CardGroup(); - List out_list = new ArrayList<>(); - out_ct.card_list = out_list; - out_ct.config = CardConfig.DAN; - out_ct.len = 1; - - if (room.firstCard != 0) { - CardObj co = CardUtil.getCard1(room.firstCard, owner.cardInhand); - out_list.add(co); - } else { - EXPlayer next = (EXPlayer) owner.room.playerMapBySeat.get(owner.nextSeat); - if (next.cardInhand.size() == 1) { - out_list.add(owner.cardInhand.get(owner.cardInhand.size() - 1)); - } else { - out_list.add(owner.cardInhand.get(0)); - } - } - } - - out_ct.card_list_mp = CardUtil.toTArray(out_ct.card_list); - out_ct.min_card = out_ct.card_list.get(0).cardMod; - - doAction(owner, out_ct, true); - } - } +// private void AutoOut(EXPlayer owner) { +// +// EXRoom room = owner.getRoom(); +// +// if (room.lastDiscardSeat != 0 && room.lastDiscardSeat != owner.seat) { +// +// CardGroup big_ct = null; +// EXPlayer playerNext = (EXPlayer) room.playerMapBySeat.get(owner.nextSeat); +// if (playerNext != null && room.discard.config.type == Config.TYPE_DANPAI +// && playerNext.cardInhand.size() == 1) { +// +// Map> cardMap = CardUtil.getCardListMap(owner.cardInhand); +// big_ct = CardCheck.selectDanpai(cardMap, room.discard, room.config, true); +// } else { +// big_ct = CardCheck.tryBig(owner.cardInhand, room.discard); +// } +// +// if (big_ct != null) { +// big_ct.card_list_mp = CardUtil.toTArray(big_ct.card_list); +// doAction(owner, big_ct, true); +// } else { +// pass(owner); +// } +// +// } else { +// +// // 在托管或者自动出牌的时候 系统先出炸弹,如果炸弹没有 再出单张 +// // 将来可以把这个函数做的能智能一些,不光可以出炸弹 也可以出顺子飞机等等 +// CardGroup out_ct = CardCheck.autoOut(owner.cardInhand, owner.room.config); +// if (out_ct == null) { +// +// out_ct = new CardGroup(); +// List out_list = new ArrayList<>(); +// out_ct.card_list = out_list; +// out_ct.config = CardConfig.DAN; +// out_ct.len = 1; +// +// if (room.firstCard != 0) { +// CardObj co = CardUtil.getCard1(room.firstCard, owner.cardInhand); +// out_list.add(co); +// } else { +// EXPlayer next = (EXPlayer) owner.room.playerMapBySeat.get(owner.nextSeat); +// if (next.cardInhand.size() == 1) { +// out_list.add(owner.cardInhand.get(owner.cardInhand.size() - 1)); +// } else { +// out_list.add(owner.cardInhand.get(0)); +// } +// } +// } +// +// out_ct.card_list_mp = CardUtil.toTArray(out_ct.card_list); +// out_ct.min_card = out_ct.card_list.get(0).cardMod; +// +// doAction(owner, out_ct, true); +// } +// } private void pass(EXPlayer owner) { EXMainServer.gameCtr.pass(owner);// 打不起过 diff --git a/game_pk_duoduo/src/main/java/extend/pk/player/state/EXPlayerPassState.java b/game_pk_duoduo/src/main/java/extend/pk/player/state/EXPlayerPassState.java index 97a56be..c8f8012 100644 --- a/game_pk_duoduo/src/main/java/extend/pk/player/state/EXPlayerPassState.java +++ b/game_pk_duoduo/src/main/java/extend/pk/player/state/EXPlayerPassState.java @@ -19,6 +19,8 @@ public class EXPlayerPassState extends StateBase { private void pass(EXPlayer owner) { EXMainServer.gameCtr.pass(owner);//打不起过 + //如果前两家都pass了,则需要将奖池分算到下家头上 + this.toNextState(owner);//下一位大哥 } diff --git a/game_pk_duoduo/src/main/java/extend/pk/uitl/CardCheck.java b/game_pk_duoduo/src/main/java/extend/pk/uitl/CardCheck.java index 85e82df..338c38b 100644 --- a/game_pk_duoduo/src/main/java/extend/pk/uitl/CardCheck.java +++ b/game_pk_duoduo/src/main/java/extend/pk/uitl/CardCheck.java @@ -658,14 +658,22 @@ public class CardCheck { public final static boolean tryCompete(CardGroup banker, CardGroup other, ITObject roomConfig) { int bankerCradType = banker.config.type; int otherCradType = other.config.type; - if (bankerCradType != Config.TYPE_ZHA && otherCradType == Config.TYPE_ZHA) { return true; } if (bankerCradType != otherCradType) { 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 (otherCradType == Config.TYPE_ZHA) { diff --git a/game_pk_duoduo/src/test/java/game_pk_paodekuai/MainPaodekuai.java b/game_pk_duoduo/src/test/java/game_pk_paodekuai/MainDuoduo.java similarity index 82% rename from game_pk_duoduo/src/test/java/game_pk_paodekuai/MainPaodekuai.java rename to game_pk_duoduo/src/test/java/game_pk_paodekuai/MainDuoduo.java index 0d30aa1..10316c6 100644 --- a/game_pk_duoduo/src/test/java/game_pk_paodekuai/MainPaodekuai.java +++ b/game_pk_duoduo/src/test/java/game_pk_paodekuai/MainDuoduo.java @@ -2,7 +2,7 @@ package game_pk_paodekuai; import com.taurus.permanent.TPServer; -public class MainPaodekuai { +public class MainDuoduo { public static void main(String[] args) { TPServer.me().start(); }