放炮罚增加名堂优先判断

master
李泽帆 2026-09-21 18:26:11 +08:00
parent fb14f9bb51
commit 9693851bd2
26 changed files with 1970 additions and 478 deletions

View File

@ -303,6 +303,7 @@ public class GameController implements IController {
} }
} }
player = MainServer.instance.newPlayer(playerid, owner, session_key); player = MainServer.instance.newPlayer(playerid, owner, session_key);
//这里判断了加入房间后的最高限制分,需要调整代码
if (player.room.upper_limit_hp == 0 || player.room.upper_limit_hp > cur_hp) { if (player.room.upper_limit_hp == 0 || player.room.upper_limit_hp > cur_hp) {
player.room.upper_limit_hp = cur_hp; player.room.upper_limit_hp = cur_hp;
} }

View File

@ -170,8 +170,11 @@ public class RoomCard {
int indexhh = this.cardList.indexOf(Config.HONGZHONG); int indexhh = this.cardList.indexOf(Config.HONGZHONG);
// Global.logger.info("hongzhongid:"+indexhh+"card"+this.cardList); // Global.logger.info("hongzhongid:"+indexhh+"card"+this.cardList);
dealCards.add(Config.HONGZHONG); dealCards.add(Config.HONGZHONG);
this.cardList.remove(indexhh); if(indexhh!=0) {
Collections.shuffle(this.cardList); this.cardList.remove(indexhh);
Collections.shuffle(this.cardList);
}
} }
for (int index = 0; index < 13 - flag; index++) { for (int index = 0; index < 13 - flag; index++) {
dealCards.add(this.pop()); dealCards.add(this.pop());

View File

@ -21,7 +21,7 @@ public class EXRoomStartGameState extends StateBase<EXRoom> {
// player.initSeat(); // player.initSeat();
// } // }
owner.startGame(); owner.startGame();
//游戏开始前重新计算最高限制分------------------------
this.toNextState(owner); this.toNextState(owner);
} }

View File

@ -35,6 +35,10 @@ public class EXRoom extends Room {
public RoomCard card; public RoomCard card;
public int activeCard; public int activeCard;
public int checkPaoActiveCard;
public int checkPaoActiveSeat;
public int drawCard; public int drawCard;
public int currenDiscardSeat; public int currenDiscardSeat;
public int lastDiscardSeat; public int lastDiscardSeat;
@ -85,6 +89,8 @@ public class EXRoom extends Room {
public int adminSeat; public int adminSeat;
public boolean jiesanflag = false; public boolean jiesanflag = false;
public Set<Integer> broadCard =new HashSet<Integer>();
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);
@ -492,7 +498,7 @@ public class EXRoom extends Room {
player.mingtangList.clear(); player.mingtangList.clear();
player.winFan = 1; player.winFan = 1;
int score = 0; int score = 0;
// logger.info("是否听胡:"+this.isTianHu+"---"+player.playerid);
if (this.isTianHu) { if (this.isTianHu) {
// 天胡 // 天胡
if (player.seat == this.bankerSeat) { if (player.seat == this.bankerSeat) {
@ -506,9 +512,15 @@ public class EXRoom extends Room {
} }
} }
// 判断房间是否有出牌 // 判断房间是否有出牌
// logger.info("地胡:"+player.getRoom().roomoutcardlist.size());
// logger.info("地胡:"+player.outcardList.size());
// logger.info("地胡:"+player.getRoom().card.cardList.size());
if (player.getRoom().roomoutcardlist.size() == 1 && player.outcardList.size() == 0) { if (player.getRoom().roomoutcardlist.size() == 1 && player.outcardList.size() == 0 && player.getRoom().card.cardList.size() >=19) {
if (player.getRoom().activeCard == player.getRoom().roomoutcardlist.get(0)) { // logger.info(player.getRoom().roomoutcardlist.size()+"---这里是出牌集合player.getRoom().roomoutcardlist.get(0):"+player.getRoom().roomoutcardlist.get(0));
// logger.info("这里是当前行动的牌player.getRoom().activeCard"+player.getRoom().activeCard);
if (player.getRoom().activeCard == player.getRoom().roomoutcardlist.get(0) || player.getRoom().activeCard==0) {
mingtangflag = true; mingtangflag = true;
player.mingtangList.add(new MingTang(RuleWeight.DI_HU, 1, 100)); player.mingtangList.add(new MingTang(RuleWeight.DI_HU, 1, 100));
} }
@ -566,6 +578,10 @@ public class EXRoom extends Room {
} }
// 自摸 // 自摸
// logger.info("检测自摸是否来到这里:"+(this.winSeat == player.seat));
// logger.info("检测自摸是否来到这里:"+(player.ispengchiwin == false));
// logger.info("检测自摸是否来到这里:"+(!this.isFanPao));
if (this.winSeat == player.seat && player.ispengchiwin == false && !this.isFanPao) { if (this.winSeat == player.seat && player.ispengchiwin == false && !this.isFanPao) {
player.winFan = player.winFan * 2; player.winFan = player.winFan * 2;
player.mingtangList.add(new MingTang(RuleWeight.ZI_MO, 2, 2)); player.mingtangList.add(new MingTang(RuleWeight.ZI_MO, 2, 2));
@ -1342,7 +1358,7 @@ public class EXRoom extends Room {
public void endGame() { public void endGame() {
// this.endflag = this.entrustTotal(); // this.endflag = this.entrustTotal();
// 如果是流局则:给庄家-10 // 如果是流局则:给庄家-10
if (this.liuju) { if (this.liuju && this.card.cardList.size()==0) {
for (Entry<Integer, Player> entry : this.playerMapById.entrySet()) { for (Entry<Integer, Player> entry : this.playerMapById.entrySet()) {
EXPlayer player = (EXPlayer) entry.getValue(); EXPlayer player = (EXPlayer) entry.getValue();
if (player.seat == this.bankerSeat) { if (player.seat == this.bankerSeat) {
@ -1458,10 +1474,13 @@ public class EXRoom extends Room {
this.weiRoomGroup.clear(); this.weiRoomGroup.clear();
this.roomoutcardlist.clear(); this.roomoutcardlist.clear();
this.paochucardlist.clear(); this.paochucardlist.clear();
this.card=new RoomCard(this);
this.isFanPao = false; this.isFanPao = false;
this.endflag = false; this.endflag = false;
this.fangpaosubvalue = 0; this.fangpaosubvalue = 0;
this.yikuaibianflag = false; this.yikuaibianflag = false;
this.broadCard.clear();
} }
} }

View File

@ -5,8 +5,10 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import com.game.Global; import com.game.Global;
import com.taurus.core.util.Logger;
import extend.zp.player.rule.*; import extend.zp.player.rule.*;
import extend.zp.player.rulestate.PRDiscardPaoState;
import extend.zp.player.state.EXPlayerDisCardTipState; import extend.zp.player.state.EXPlayerDisCardTipState;
import extend.zp.player.state.EXPlayerDrawTipState; import extend.zp.player.state.EXPlayerDrawTipState;
import extend.zp.player.state.EXPlayerTipState; import extend.zp.player.state.EXPlayerTipState;
@ -26,6 +28,7 @@ public class PlayerRuleManager {
public HashMap<Integer, List<IRuleBase>> ruleMap = null; public HashMap<Integer, List<IRuleBase>> ruleMap = null;
public HashMap<Integer, EXPlayerTipState> tipMap = null; public HashMap<Integer, EXPlayerTipState> tipMap = null;
public static final Logger logger = Logger.getLogger(PlayerRuleManager.class);
public PlayerRuleManager() { public PlayerRuleManager() {
ruleMap = new HashMap<Integer, List<IRuleBase>>(); ruleMap = new HashMap<Integer, List<IRuleBase>>();
@ -71,15 +74,21 @@ public class PlayerRuleManager {
ruleMap.put(PlayerRuleManager.DRAW_PAO_RULE, drawPaoList); ruleMap.put(PlayerRuleManager.DRAW_PAO_RULE, drawPaoList);
List<IRuleBase> otherDiscardList = new ArrayList<IRuleBase>(); List<IRuleBase> otherDiscardList = new ArrayList<IRuleBase>();
otherDiscardList.add(new RuleDrawWin());//放炮
otherDiscardList.add(new RuleDiscardPao()); otherDiscardList.add(new RuleDiscardPao());
otherDiscardList.add(new RulePaoWin());
otherDiscardList.add(new RuleDrawWin());//放炮
otherDiscardList.add(new RulePong()); otherDiscardList.add(new RulePong());
otherDiscardList.add(new RuleChi()); otherDiscardList.add(new RuleChi());
ruleMap.put(PlayerRuleManager.DISCARD_RULE, otherDiscardList); ruleMap.put(PlayerRuleManager.DISCARD_RULE, otherDiscardList);
List<IRuleBase> huList = new ArrayList<IRuleBase>(); List<IRuleBase> huList = new ArrayList<IRuleBase>();
huList.add(new RuleWin());
huList.add(new RuleWei()); huList.add(new RuleWei());
huList.add(new RuleWin());
// huList.add(new RulePaoWin());
ruleMap.put(PlayerRuleManager.HU_RULE, huList); ruleMap.put(PlayerRuleManager.HU_RULE, huList);
List<IRuleBase> otherHuList = new ArrayList<IRuleBase>(); List<IRuleBase> otherHuList = new ArrayList<IRuleBase>();

View File

@ -28,12 +28,12 @@ public class RoomCard {
public void init() { public void init() {
// this.cardList.clear(); // this.cardList.clear();
// this.subCardList.clear(); // this.subCardList.clear();
// this.sanlong(); this.sanlong();
this.initCard(); // this.initCard();
this.shuffle(); // this.shuffle();
this.subCard(); //抽牌 // this.subCard(); //抽牌
this.shuffle(); // this.shuffle();
// this.testhuxi(); // this.testhuxi();
@ -63,11 +63,164 @@ public class RoomCard {
} }
public void sanlong() { public void sanlong() {
List list2 = Arrays.asList(102, 103, 103, 103, 104, 105, 106, 106, 107, 107, 108, 109, 201, 203, 204, 204, 205, 205, 208, 208);
List list2 = Arrays.asList(102, 103, 105, 106, 107, 107, 108, 109, 201, 202, 203, 203, 206, 206, 207, 208, 208, 208, 209, 210); List list = Arrays.asList(101, 101, 103, 104, 105, 108, 109, 109, 110, 110, 202, 202, 203, 203, 205, 206, 208, 209, 209, 210);
List list = Arrays.asList(101, 101, 104, 104, 109, 109, 110, 110, 110, 201, 201, 202, 203, 204, 204, 205, 205, 207, 208, 210); List list3 = Arrays.asList(109, 106, 206, 203, 102, 201, 105, 207, 208, 207, 101, 209, 108, 206, 105, 204, 210, 206, 201, 202);
List list3 = Arrays.asList(209, 205, 109, 104, 202, 204, 201, 206, 101, 105, 106, 101, 203, 210, 205, 102, 103, 204, 206, 207);
//596912 大九不能胡
// List list2 = Arrays.asList(101, 102, 102, 104, 105, 105, 105, 107, 107, 107, 110, 203, 204, 205, 206, 207, 208, 208, 209, 210);
// List list = Arrays.asList(101, 101, 102, 103, 103, 104, 106, 106, 106, 106, 108, 108, 201, 201, 202, 203, 205, 206, 206, 207);
// List list3 = Arrays.asList(109, 101, 102, 103, 110, 210, 105, 103, 109, 210, 108, 205, 202, 109, 201, 202, 104, 201, 209, 205);
// //178466 大一不能胡
// List list2 = Arrays.asList(101, 102, 103, 104, 104, 106, 106, 106, 107, 108, 109, 201, 201, 202, 204, 204, 205, 205, 207, 209);
// List list = Arrays.asList(101, 103, 104, 104, 105, 107, 107, 108, 109, 109, 110, 201, 202, 203, 204, 205, 206, 206, 208, 210);
// List list3 = Arrays.asList(203, 210, 209, 110, 106, 206, 105, 208, 102, 203, 204, 205, 110, 208, 209, 207, 103, 210, 103, 207);
// //131987 畏起不算自摸
// List list2 = Arrays.asList(101, 101, 103, 104, 104, 104, 105, 105, 110, 110, 201, 201, 202, 202, 203, 206, 207, 207, 207, 210);
// List list = Arrays.asList(101, 102, 104, 106, 108, 108, 109, 110, 201, 201, 202, 204, 204, 204, 206, 207, 208, 208, 209, 209);
// List list3 = Arrays.asList(210, 107, 103, 108, 204, 105, 103, 107, 101, 102, 108, 210, 203, 109, 105, 206, 106, 202, 208, 205);
// //385250 大九不能胡
// List list2 = Arrays.asList(101, 101, 104, 104, 104, 108, 109, 109, 201, 202, 203, 204, 204, 205, 206, 207, 208, 209, 210, 210);
// List list = Arrays.asList(101, 102, 102, 102, 103, 103, 103, 104, 106, 106, 107, 108, 109, 201, 201, 203, 203, 206, 209, 210);
// List list3 = Arrays.asList(103, 206, 207, 202, 207, 101, 203, 110, 205, 107, 107, 102, 202, 209, 206, 106, 109, 209, 201, 205);
// // 387894_1 卡死未准备
// List list2 = Arrays.asList(102, 102, 104, 104, 201, 201, 203, 203, 203, 204, 205, 205, 205, 206, 206, 206, 207, 208, 210, 210);
// List list = Arrays.asList(101, 102, 103, 103, 104, 105, 105, 108, 108, 109, 109, 110, 110, 202, 204, 204, 206, 207, 208, 210);
// List list3 = Arrays.asList(202, 109, 106, 107, 106, 110, 202, 106, 202, 205, 208, 207, 209, 109, 106, 105, 107, 101, 104, 102);
// // 590898_6 多一张小八
// List list2 = Arrays.asList(102, 102, 104, 105, 105, 105, 106, 108, 110, 110, 201, 202, 202, 205, 206, 207, 208, 209, 210, 210);
// List list = Arrays.asList(101, 101, 103, 104, 104, 106, 109, 110, 201, 201, 203, 204, 204, 205, 208, 208, 208, 209, 209, 210);
// List list3 = Arrays.asList(107, 108, 206, 106, 103, 107, 101, 110, 203, 205, 106, 210, 206, 103, 105, 102, 202, 209, 207, 108);
// // 590898_6 多一张小八
// List list2 = Arrays.asList(102, 104, 105, 106, 106, 106, 107, 108, 109, 110, 201, 202, 203, 204, 204, 206, 206, 207, 209, 210);
// List list = Arrays.asList(101, 103, 105, 105, 106, 107, 107, 109, 110, 201, 202, 205, 205, 206, 207, 207, 208, 210, 210, 210);
// List list3 = Arrays.asList(104, 201, 102, 203, 208, 204, 101, 203, 202, 204, 103, 208, 109, 110, 102, 201, 209, 102, 103, 103);
//地胡
// List list2 = Arrays.asList(101, 102, 103, 201, 202, 203, 202, 207, 210, 205, 205, 205, 105, 106, 107, 108, 108, 208, 209, 210);
// List list = Arrays.asList(101, 102, 102, 104, 104, 205, 106, 107, 103, 104, 108, 109, 109, 110, 201, 201, 203, 204, 206, 207);
// List list3 = Arrays.asList(108, 108, 208, 210, 103, 105, 109, 102, 103, 107, 109, 106, 209, 103, 207, 104, 206, 205, 209, 205);
// //测试856802_6 单调不能胡
// List list2 = Arrays.asList(101, 103, 104, 107, 107, 108, 110, 110, 201, 202, 203, 203, 203, 204, 204, 205, 206, 208, 209, 210);
// List list = Arrays.asList(101, 102, 102, 104, 104, 106, 106, 107, 108, 108, 108, 109, 109, 110, 201, 201, 203, 204, 206, 207);
// List list3 = Arrays.asList(102, 105, 208, 210, 103, 105, 109, 102, 103, 107, 109, 106, 209, 103, 207, 104, 206, 205, 209, 205);
// //918864_3胡息没结算
// List list2 = Arrays.asList(101, 102, 102, 104, 105, 105, 105, 108, 109, 110, 201, 202, 204, 206, 206, 206, 207, 207, 208, 210);
// List list = Arrays.asList(103, 104, 105, 107, 107, 107, 108, 108, 109, 110, 202, 204, 205, 208, 208, 209, 209, 209, 210, 210);
// List list3 = Arrays.asList(203, 106, 101, 102, 106, 201, 201, 103, 109, 101, 106, 209, 206, 203, 106, 201, 102, 207, 104, 110);
// //651696胡息不对
// List list2 = Arrays.asList(101, 101, 103, 104, 107, 108, 109, 110, 201, 202, 203, 204, 204, 204, 205, 206, 206, 208, 208, 209);
// List list = Arrays.asList(102, 102, 102, 103, 103, 105, 108, 109, 110, 201, 202, 202, 203, 203, 204, 205, 207, 209, 210, 210);
// List list3 = Arrays.asList(203, 202, 207, 209, 106, 104, 109, 105, 201, 103, 101, 206, 109, 110, 108, 106, 207, 208, 106, 104);
// //起手提并且对家打了跑
// List list2 = Arrays.asList(106, 106, 107, 108, 108, 109, 110, 201, 202, 203, 203, 203, 204, 204, 204, 205, 206, 208, 208, 209);
// List list = Arrays.asList(101, 101, 101, 102, 102, 102, 102, 103, 105, 201, 201, 201, 204, 206, 207, 207, 209, 209, 210, 210);
// List list3 = Arrays.asList(207, 108, 103, 202, 110, 108, 106, 207, 103, 110, 104, 105, 109, 107, 203, 107, 209, 109, 103, 206);
// //海底胡显示异常
// List list2 = Arrays.asList(101, 101, 103, 105, 106, 108, 108, 109, 201, 202, 203, 203, 204, 205, 207, 208, 208, 208, 210, 210);
// List list = Arrays.asList(104, 104, 106, 107, 107, 108, 108, 110, 110, 201, 202, 202, 204, 204, 204, 205, 205, 205, 207, 209);
// List list3 = Arrays.asList(201, 210, 103, 209, 206, 107, 105, 206, 207, 106, 103, 101, 105, 107, 109, 202, 208, 109, 207, 101);
// //275664提完点胡没反应
// List list2 = Arrays.asList(101, 102, 102, 104, 105, 107, 108, 201, 202, 202, 202, 203, 206, 207, 207, 207, 207, 208, 209, 210);
// List list = Arrays.asList(103, 104, 105, 106, 106, 110, 110, 201, 203, 203, 203, 204, 204, 205, 205, 205, 209, 210, 210, 210);
// List list3 = Arrays.asList(209, 107, 108, 103, 109, 208, 208, 101, 102, 101, 106, 209, 201, 102, 103, 109, 204, 206, 109, 206);
// //599876按最大胡息
// List list2 = Arrays.asList(101, 102, 103, 106, 108, 109, 109, 110, 110, 201, 201, 202, 203, 206, 207, 207, 208, 209, 209, 209);
// List list = Arrays.asList(101, 104, 105, 106, 106, 107, 108, 108, 110, 201, 202, 204, 205, 206, 207, 208, 208, 209, 210, 210);
// List list3 = Arrays.asList(102, 108, 107, 207, 101, 204, 102, 205, 208, 103, 104, 103, 105, 109, 109, 210, 206, 205, 106, 204);
//554601按最大胡息
// List list2 = Arrays.asList(101, 201, 203, 103, 107, 107, 108, 109, 202, 202, 203, 204, 204, 205, 207, 208, 209, 209, 209, 210);
// List list = Arrays.asList(101, 104, 104, 105, 106, 106, 107, 107, 109, 110, 202, 204, 205, 206, 206, 206, 207, 207, 207, 209);
// List list3 = Arrays.asList(210, 109, 101, 210, 108, 109, 104, 205, 103, 208, 202, 108, 201, 106, 201, 110, 101, 106, 110, 102);
//554601按最大胡息
// List list2 = Arrays.asList(101, 102, 102, 103, 107, 107, 108, 109, 202, 202, 203, 204, 204, 205, 207, 208, 209, 209, 209, 210);
// List list = Arrays.asList(101, 104, 104, 105, 106, 106, 107, 107, 109, 110, 202, 204, 205, 206, 206, 206, 207, 207, 207, 209);
// List list3 = Arrays.asList(210, 109, 101, 210, 108, 109, 104, 205, 103, 208, 202, 108, 201, 106, 201, 110, 101, 106, 110, 102);
//613649不能胡
// List list2 = Arrays.asList(101, 102, 102, 103, 104, 105, 106, 106, 107, 109, 110, 202, 205, 206, 207, 207, 208, 210, 210, 210);
// List list = Arrays.asList(101, 101, 103, 103, 104, 104, 105, 106, 107, 108, 109, 110, 201, 203, 205, 206, 208, 208, 208, 209);
// List list3 = Arrays.asList(204, 109, 105, 103, 203, 210, 105, 202, 209, 201, 206, 205, 107, 202, 102, 104, 108, 107, 202, 108);
//放跑胡
// List list2 = Arrays.asList(101, 101, 102, 103, 105, 105, 105, 106, 108, 109, 109, 203, 203, 205, 205, 206, 208, 208, 210, 210);
// List list = Arrays.asList(102, 102, 103, 104, 104, 105, 106, 110, 203, 204, 205, 205, 206, 206, 207, 207, 208, 209, 209, 209);
// List list3 = Arrays.asList(102, 208, 201, 110, 202, 209, 202, 201, 108, 104, 107, 101, 109, 204, 204, 106, 210, 108, 103, 104);
// List list2 = Arrays.asList(101, 101, 102, 103, 105, 105, 105, 106, 108, 109, 109, 203, 203, 205, 205, 206, 208, 208, 210, 210);
// List list = Arrays.asList(102, 102, 103, 104, 104, 105, 106, 209, 203, 204, 205, 206, 206, 206, 207, 207, 208, 209, 209, 209);
// List list3 = Arrays.asList(102, 208, 201, 110, 202, 209, 202, 201, 108, 104, 107, 101, 109, 204, 204, 106, 210, 108, 103, 104);
//结算异常
// List list2 = Arrays.asList(102, 103, 103, 103, 105, 107, 107, 108, 108, 110, 201, 201, 202, 203, 203, 205, 205, 206, 206, 210);
// List list = Arrays.asList(101, 102, 102, 104, 105, 107, 108, 108, 109, 109, 110, 110, 110, 201, 202, 203, 208, 209, 209, 210);
// List list3 = Arrays.asList(209, 203, 104, 208, 209, 210, 105, 107, 207, 207, 206, 202, 210, 102, 103, 208, 109, 205, 202, 101);
//提走算自摸
// List list2 = Arrays.asList(102, 103, 103, 104, 105, 106, 106, 107, 107, 107, 110, 202, 203, 204, 204, 205, 206, 209, 210, 210);
// List list = Arrays.asList(102, 106, 106, 107, 108, 109, 110, 201, 202, 203, 205, 205, 206, 207, 207, 207, 208, 208, 210, 210);
// List list3 = Arrays.asList(105, 101, 207, 201, 103, 203, 101, 103, 110, 201, 206, 109, 202, 209, 109, 104, 205, 108, 209, 101);
// //小7胡不了
// List list2 = Arrays.asList(101, 101, 102, 103, 103, 104, 104, 107, 108, 109, 109, 201, 201, 203, 207, 207, 208, 209, 209, 209);
// List list = Arrays.asList(101, 102, 103, 104, 106, 106, 107, 108, 109, 110, 201, 202, 202, 204, 204, 204, 206, 208, 209, 210);
// List list3 = Arrays.asList(203, 204, 101, 210, 205, 207, 207, 205, 102, 105, 201, 202, 107, 106, 205, 102, 203, 104, 109, 203);
//一块匾
// List list2 = Arrays.asList(101, 103, 103, 104, 105, 107, 107, 108, 108, 109, 110, 110, 201, 202, 204, 204, 206, 206, 208, 208);
// List list = Arrays.asList(102, 102, 106, 106, 108, 109, 110, 201, 201, 203, 203, 205, 205, 206, 207, 208, 209, 209, 210, 210);
// List list3 = Arrays.asList(208, 103, 104, 106, 205, 205, 207, 203, 101, 105, 210, 102, 202, 110, 105, 107, 107, 202, 204, 203);
//胡不了
// List list2 = Arrays.asList(101, 102, 103, 103, 104, 105, 106, 107, 107, 108, 109, 110, 110, 203, 205, 206, 206, 208, 208, 209);
// List list = Arrays.asList(101, 101, 102, 105, 105, 105, 108, 109, 109, 110, 201, 202, 202, 202, 203, 204, 204, 206, 207, 210);
// List list3 = Arrays.asList(207, 104, 207, 110, 203, 107, 102, 209, 108, 107, 104, 106, 204, 203, 103, 108, 103, 201, 209, 104);
//小三胡不了
// List list2 = Arrays.asList(103, 104, 105, 107, 108, 108, 108, 109, 109, 110, 201, 201, 202, 204, 205, 205, 206, 206, 207, 208);
// List list = Arrays.asList(101, 101, 102, 102, 103, 103, 105, 106, 107, 109, 110, 110, 203, 203, 207, 207, 207, 208, 208, 210);
// List list3 = Arrays.asList(209, 210, 209, 202, 105, 201, 104, 206, 106, 101, 204, 204, 106, 102, 204, 210, 209, 110, 101, 103);
//没算胡息
// List list2 = Arrays.asList(101, 101, 102, 103, 103, 104, 105, 105, 105, 106, 106, 110, 110, 202, 203, 205, 208, 209, 209, 210);
// List list = Arrays.asList(101, 102, 103, 104, 107, 107, 108, 109, 110, 202, 203, 203, 205, 206, 207, 208, 208, 208, 209, 210);
// List list3 = Arrays.asList(207, 209, 108, 201, 205, 110, 104, 206, 104, 201, 103, 108, 202, 204, 210, 108, 210, 107, 102, 105);
//小九胡不了
// List list2 = Arrays.asList(101, 102, 103, 103, 104, 104, 105, 106, 107, 108, 201, 202, 203, 204, 204, 206, 208, 210, 210, 210);
// List list = Arrays.asList(101, 102, 103, 105, 108, 109, 109, 110, 201, 201, 202, 203, 204, 205, 205, 206, 207, 209, 209, 210);
// List list3 = Arrays.asList(107, 107, 207, 209, 203, 205, 110, 204, 107, 104, 103, 110, 202, 106, 109, 208, 105, 203, 206, 104);
// //123无胡息
// List list2 = Arrays.asList(103, 104, 105, 107, 108, 108, 108, 109, 109, 110, 201, 201, 202, 204, 205, 205, 206, 206, 207, 208);
// List list = Arrays.asList(101, 101, 102, 102, 103, 103, 105, 106, 107, 109, 110, 110, 203, 203, 207, 207, 207, 208, 208, 210);
// List list3 = Arrays.asList(209, 210, 209, 202, 105, 201, 104, 206, 106, 101, 204, 204, 106, 102, 204, 210, 209, 110, 101, 103);
//护不了2
// List list2 = Arrays.asList(101, 101, 101, 103, 105, 107, 107, 109, 110, 201, 202, 202, 204, 205, 206, 207, 208, 209, 210, 210);
// List list = Arrays.asList(102, 102, 104, 104, 106, 106, 108, 108, 109, 109, 109, 201, 203, 204, 204, 205, 206, 207, 208, 210);
// List list3 = Arrays.asList(110, 102, 106, 208, 201, 210, 103, 102, 203, 203, 103, 104, 204, 206, 105, 110, 108, 207, 205, 206);
// List list2 = Arrays.asList(101, 102, 102, 105, 105, 105, 106, 106, 109, 110, 110, 201, 202, 202, 203, 203, 204, 204, 207, 208);
// List list = Arrays.asList(101, 101, 103, 104, 105, 106, 108, 109, 201, 202, 203, 204, 205, 205, 206, 207, 207, 209, 210, 210);
// List list3 = Arrays.asList(103, 205, 205, 110, 104, 109, 109, 106, 110, 102, 207, 101, 206, 209, 108, 104, 107, 107, 202, 103);
//
// List list2 = Arrays.asList(101, 102, 102, 104, 104, 105, 106, 106, 108, 201, 203, 204, 204, 205, 208, 208, 209, 209, 210, 210); // List list2 = Arrays.asList(101, 102, 102, 104, 104, 105, 106, 106, 108, 201, 203, 204, 204, 205, 208, 208, 209, 209, 210, 210);
// List list = Arrays.asList(102, 103, 104, 105, 107, 110, 202, 202, 202, 202, 203, 203, 205, 205, 206, 206, 206, 208, 209, 210); // List list = Arrays.asList(102, 103, 104, 105, 107, 110, 202, 202, 202, 202, 203, 203, 205, 205, 206, 206, 206, 208, 209, 210);

View File

@ -0,0 +1,184 @@
package extend.zp.player.rule;
import java.util.ArrayList;
import java.util.List;
import com.game.Global;
import com.game.player.state.PlayerEndState;
import com.game.player.state.PlayerPauseState;
import com.game.player.state.PlayerWaitState;
import com.taurus.core.entity.ITArray;
import com.taurus.core.entity.TArray;
import com.taurus.core.util.Logger;
import extend.zp.EXPlayer;
import extend.zp.OpCard;
import extend.zp.RuleWeight;
import extend.zp.player.rulestate.PRDiscardPaoState;
import extend.zp.player.rulestate.PRDrawPaoState;
import extend.zp.player.rulestate.PRWinState;
import extend.zp.player.state.EXPlayerWaitState;
import extend.zp.room.state.EXRoomDealState;
import extend.zp.room.state.EXRoomSetpState;
import extend.zp.tip.IRuleBase;
import extend.zp.tip.Tip;
import extend.zp.uitl.CardUtil;
import extend.zp.uitl.MingtangCheck;
import extend.zp.uitl.Paixing;
public class RulePaoWin implements IRuleBase {
public static final Logger logger = Logger.getLogger(RulePaoWin.class);
@Override
public boolean condition(EXPlayer player) {
int eventCard = player.getRoom().checkPaoActiveCard;
boolean kanOrWei = true;
int huxi = 0;
//// System.out.println("RuleWin");
if (player.isLaoYe) {
return false;
}
// 这里检测是否跑
// for (OpCard opCard : player.opCardList) {
// if (opCard.card1 == eventCard && opCard.type == RuleWeight.TYPE_PAO) {
// isPao = true;
// }
// }
// logger.info("isPao:"+isPao);
// if(!isPao) {
// return true;
// }
EXPlayer activePlayer = (EXPlayer) player.room.playerMapBySeat.get(player.getRoom().checkPaoActiveSeat);
if (player.getRoom().roomoutcardlist.size() == 0 && player.seat != activePlayer.seat) {
player.getRoom().checkPaoActiveCard = 0;
player.getRoom().checkPaoActiveSeat = 0;
return false;
}
if (activePlayer == null) {
player.getRoom().checkPaoActiveCard = 0;
player.getRoom().checkPaoActiveSeat = 0;
return false;
}
// logger.info("如果来到这里看看当前胡牌的手牌" + player.cardInhand);
boolean isWin = Paixing.checkWin(player, 0);
// logger.info("跑后的结果-------------" + activePlayer);
// logger.info("跑后的结果-------------" + player.cardInhand);
// logger.info("跑后的结果-------------" + player.opCard);
// logger.info("跑后的结果-------------" + isWin);
// logger.info("跑后的结果-------------" + player.huXi);
if (isWin) {
player.stateMachine.changeState(Global.getState(PRWinState.class));
} else {
// logger.info("如果跑后不能胡牌则进入这里-------------");
for (OpCard opCard : player.opCardList) {
if (opCard.card1 == eventCard && opCard.type == RuleWeight.TYPE_PAO) {
if (kanOrWei) {
opCard.type = RuleWeight.TYPE_KAN;
opCard.huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, eventCard);
player.kongCount -= 1;
} else {
opCard.type = RuleWeight.TYPE_WEI;
opCard.huXi = Paixing.caclHuxi(RuleWeight.TYPE_WEI, eventCard);
player.kongCount -= 1;
}
}
}
isWin = Paixing.checkWin(player, eventCard);
player.huXi = huxi;
// logger.info("回退后结果-------------" + activePlayer);
// logger.info("回退后结果-------------" + player.cardInhand);
// logger.info("回退后结果-------------" + player.opCard);
// logger.info("回退后结果-------------" + isWin);
// logger.info("回退后结果-------------" + player.huXi);
if (isWin) {
logger.info("回退后进入这里则表示检测胡-------------");
ITArray opcard = TArray.newInstance();
opcard.addInt(eventCard);
int weight = RuleWeight.WIN3;
if (activePlayer.seat != player.seat) {
if (player.seat == activePlayer.nextSeat) {
weight = RuleWeight.WIN2;
} else {
weight = RuleWeight.WIN1;
}
}
player.getRoom().isFanPao = true;
player.getRoom().winSeat = activePlayer.seat;
player.hupai_count = player.hupai_count + 1;
player.winCard = eventCard;
Tip tip = new Tip(eventCard, opcard, 7, this, RuleWeight.TYPE_WIN);
player.tipMgr.addTip(tip);
player.getRoom().checkPaoActiveCard = 0;
player.getRoom().checkPaoActiveSeat = 0;
logger.info("回退后胡-------------");
activePlayer.stateMachine.changeState(Global.getState(PlayerPauseState.class));
// activePlayer.stateMachine.changeState(Global.getState(PlayerEndState.class));
activePlayer.getRoom().stateMachine.changeState(Global.getState(EXRoomSetpState.class));
// this.action(player);
return true;
}
else {
// if (player.seat == player.getRoom().activeSeat) {
// player.cardInhand.remove(eventCard);
// }
for (OpCard opCard : player.opCardList) {
if (opCard.card1 == eventCard && opCard.type == RuleWeight.TYPE_KAN) {
if (kanOrWei) {
opCard.type = RuleWeight.TYPE_PAO;
opCard.huXi = Paixing.caclHuxi(RuleWeight.TYPE_PAO, eventCard);
player.kongCount += 1;
player.huXi +=opCard.huXi;
} else {
opCard.type = RuleWeight.TYPE_PAO;
opCard.huXi = Paixing.caclHuxi(RuleWeight.TYPE_PAO, eventCard);
player.kongCount += 1;
player.huXi +=opCard.huXi;
}
}
}
// isWin = Paixing.checkWin(player, eventCard);
// player.huXi = huxi;
logger.info("如果都不行则直接跑牌---------------------"+player.huXi);
// player.stateMachine.changeState(Global.getState(PRDiscardPaoState.class));
// activePlayer.getRoom().stateMachine.changeState(Global.getState(EXRoomSetpState.class));
player.getRoom().checkPaoActiveCard = 0;
player.getRoom().checkPaoActiveSeat = 0;
}
}
player.getRoom().checkPaoActiveCard = 0;
player.getRoom().checkPaoActiveSeat = 0;
return false;
}
@Override
public void action(EXPlayer player) {
player.stateMachine.changeState(Global.getState(PRWinState.class));
}
}

View File

@ -14,7 +14,10 @@ public class RuleWei implements IRuleBase {
@Override @Override
public boolean condition(EXPlayer player) { public boolean condition(EXPlayer player) {
int eventCard = player.drawCard; int eventCard = player.drawCard;
EXPlayer activePlayer = (EXPlayer) player.room.playerMapBySeat.get(player.room.activeSeat); EXPlayer activePlayer = (EXPlayer) player.getRoom().playerMapBySeat.get(player.getRoom().activeSeat);
if(activePlayer==null) {
return false;
}
if (player.getRoom().roomoutcardlist.size()==0&&player.seat!=activePlayer.seat){ if (player.getRoom().roomoutcardlist.size()==0&&player.seat!=activePlayer.seat){
return false; return false;
} }

View File

@ -24,14 +24,14 @@ public class RuleWin implements IRuleBase {
EXPlayer activePlayer = (EXPlayer) player.room.playerMapBySeat.get(player.room.activeSeat); EXPlayer activePlayer = (EXPlayer) player.room.playerMapBySeat.get(player.room.activeSeat);
if (player.getRoom().roomoutcardlist.size()==0&&player.seat!=activePlayer.seat){
return false;
}
if (activePlayer == null) { if (activePlayer == null) {
return false; return false;
} }
if (player.getRoom().roomoutcardlist.size()==0&&player.seat!=activePlayer.seat){
return false;
}
if (Paixing.checkWin(player, activePlayer.drawCard)) { if (Paixing.checkWin(player, activePlayer.drawCard)) {
player.guohupao = true; player.guohupao = true;

View File

@ -1,21 +1,31 @@
package extend.zp.player.rulestate; package extend.zp.player.rulestate;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import com.game.Global; import com.game.Global;
import com.game.data.Player;
import com.game.player.state.PlayerWaitState; import com.game.player.state.PlayerWaitState;
import com.game.state.StateBase; import com.game.state.StateBase;
import com.taurus.core.entity.ITArray; import com.taurus.core.entity.ITArray;
import com.taurus.core.entity.TArray; import com.taurus.core.entity.TArray;
import com.taurus.core.util.Logger;
import com.taurus.permanent.TPServer; import com.taurus.permanent.TPServer;
import extend.zp.*; import extend.zp.*;
import extend.zp.player.rule.RuleDrawWin;
import extend.zp.player.state.EXPlayerDisCardTipState;
import extend.zp.player.state.EXPlayerDiscardState; import extend.zp.player.state.EXPlayerDiscardState;
import extend.zp.player.state.EXPlayerDrawTipState;
import extend.zp.player.state.EXPlayerTipState;
import extend.zp.room.state.EXRoomSetpState; import extend.zp.room.state.EXRoomSetpState;
import extend.zp.tip.Tip;
import extend.zp.uitl.Paixing; import extend.zp.uitl.Paixing;
import extend.zp.uitl.WinCard;
public class PRDiscardPaoState extends StateBase<EXPlayer> { public class PRDiscardPaoState extends StateBase<EXPlayer> {
public static final Logger logger = Logger.getLogger(PRDiscardPaoState.class);
@Override @Override
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
owner.kongCount++; owner.kongCount++;
@ -25,12 +35,17 @@ public class PRDiscardPaoState extends StateBase<EXPlayer> {
activePlayer.stateMachine.changeState(Global.getState(PlayerWaitState.class)); activePlayer.stateMachine.changeState(Global.getState(PlayerWaitState.class));
int fromseat = activePlayer.seat; int fromseat = activePlayer.seat;
if (!owner.getRoom().isFanPao){ if (!owner.getRoom().isFanPao) {
EXMainServer.gameCtr.changeActiveSeat(room, owner.seat); EXMainServer.gameCtr.changeActiveSeat(room, owner.seat);
} }
int card = owner.getRoom().activeCard;
if (card == 0) {
card = owner.opCard.getInt(0);
owner.getRoom().checkPaoActiveCard = card;
owner.getRoom().checkPaoActiveSeat = activePlayer.seat;
int card = owner.opCard.getInt(0); }
int[] paoGroup = new int[4]; int[] paoGroup = new int[4];
paoGroup[0] = card; paoGroup[0] = card;
paoGroup[1] = card; paoGroup[1] = card;
@ -38,36 +53,72 @@ public class PRDiscardPaoState extends StateBase<EXPlayer> {
paoGroup[3] = card; paoGroup[3] = card;
owner.paoGroup.add(paoGroup); owner.paoGroup.add(paoGroup);
owner.opCardList.add(new OpCard(RuleWeight.TYPE_PAO, card, card, card, Paixing.caclHuxi(RuleWeight.TYPE_PAO, card))); owner.opCardList
.add(new OpCard(RuleWeight.TYPE_PAO, card, card, card, Paixing.caclHuxi(RuleWeight.TYPE_PAO, card)));
room.activeCard = 0;
room.lastDiscardSeat = 0;
ITArray opcard = TArray.newInstance(); ITArray opcard = TArray.newInstance();
opcard.addInt(card); opcard.addInt(card);
opcard.addInt(card); opcard.addInt(card);
opcard.addInt(card); opcard.addInt(card);
owner.paopai_count = owner.paopai_count + 1; owner.paopai_count = owner.paopai_count + 1;
EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_PAO, fromseat, opcard); if(!owner.getRoom().broadCard.contains(card)) {
owner.getRoom().broadCard.add(card);
EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_PAO, fromseat, opcard);
}else {
logger.info("已经广播过放跑的牌" + card);
}
logger.info(Paixing.checkWin(owner, card));
logger.info(owner.playerid != activePlayer.playerid);
logger.info(owner.paoqiflag == true);
if (Paixing.checkWin(owner, 0) && owner.playerid != activePlayer.playerid && owner.paoqiflag == true
&& owner.huXi >= 15) {
owner.winCard = card;
owner.getRoom().isFanPao = true;
room.activeCard = 0;
owner.stateMachine.changeState(Global.getState(PRWinState.class));
} else {
this.toNextState(owner);
}
room.activeCard = 0;
room.lastDiscardSeat = 0;
this.toNextState(owner);
} }
@Override @Override
public void toNextState(EXPlayer owner) { public void toNextState(EXPlayer owner) {
owner.isTingHu = false; // owner.isTingHu = false;
int count = owner.tiCount + owner.kongCount; int count = owner.tiCount + owner.kongCount;
logger.info("跑牌次数count:" + count);
logger.info("跑牌次数count:" + owner.playerid);
if (count == 1) { if (count == 1) {
//EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner); // EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class)); owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class));
} else if (count == 2) { } else if (count == 2) {
//if (owner.tiCount == 2) { // if (owner.tiCount == 2) {
//重跑 // 重跑
// //owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class)); // //owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class));
//} else { // } else {
timer(owner); timer(owner);
//} // if(owner.seat==owner.room.activeSeat) {
// owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
// owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
//
// }
// }
} else { } else {
// if(owner.seat==owner.room.activeSeat) {
// owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
// owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
//
// }
timer(owner); timer(owner);
} }
} }
@ -81,8 +132,12 @@ public class PRDiscardPaoState extends StateBase<EXPlayer> {
owner.room.enqueueRunnable(new Runnable() { owner.room.enqueueRunnable(new Runnable() {
@Override @Override
public void run() { public void run() {
owner.stateMachine.changeState(Global.getState(PlayerWaitState.class)); if(owner.seat==owner.room.activeSeat) {
owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class)); owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
}
} }
}); });
} }

View File

@ -7,6 +7,7 @@ import com.game.player.state.PlayerWaitState;
import com.game.state.StateBase; import com.game.state.StateBase;
import com.taurus.core.entity.ITArray; import com.taurus.core.entity.ITArray;
import com.taurus.core.entity.TArray; import com.taurus.core.entity.TArray;
import com.taurus.core.util.Logger;
import com.taurus.permanent.TPServer; import com.taurus.permanent.TPServer;
import extend.zp.EXMainServer; import extend.zp.EXMainServer;
@ -21,6 +22,8 @@ import extend.zp.uitl.Paixing;
public class PRDrawPaoState extends StateBase<EXPlayer> { public class PRDrawPaoState extends StateBase<EXPlayer> {
public static final Logger logger = Logger.getLogger(PRDrawPaoState.class);
@Override @Override
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
@ -50,6 +53,14 @@ public class PRDrawPaoState extends StateBase<EXPlayer> {
EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_PAO, fromseat, opcard); EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_PAO, fromseat, opcard);
owner.getRoom().activeCard=0; owner.getRoom().activeCard=0;
// logger.info("摸牌来到跑最后----"+owner.getRoom().activeCard);
// if (Paixing.checkWin(owner, 0)&& owner.playerid!=activePlayer.playerid && owner.guohupao==true) {
// owner.winCard = card;
// owner.getRoom().isFanPao = true;
//
// owner.stateMachine.changeState(Global.getState(PRWinState.class));
// }
int count = owner.tiCount + owner.kongCount; int count = owner.tiCount + owner.kongCount;
if (count<2&&!owner.guohupao){ if (count<2&&!owner.guohupao){
EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner); EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
@ -79,8 +90,17 @@ public class PRDrawPaoState extends StateBase<EXPlayer> {
} else if (count == 2) { } else if (count == 2) {
//二跑 不出牌 //二跑 不出牌
timer(owner); timer(owner);
// logger.info("来到这里自动出牌----"+owner.playerid);
// owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
// owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
} else { } else {
timer(owner); timer(owner);
// logger.info("来到这里是干啥的----"+owner.playerid);
// owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
// owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
} }
} }

View File

@ -7,10 +7,12 @@ import com.game.player.state.PlayerWaitState;
import com.game.state.StateBase; import com.game.state.StateBase;
import com.taurus.core.entity.ITArray; import com.taurus.core.entity.ITArray;
import com.taurus.core.entity.TArray; import com.taurus.core.entity.TArray;
import com.taurus.core.util.Logger;
import com.taurus.permanent.TPServer; import com.taurus.permanent.TPServer;
import extend.zp.EXMainServer; import extend.zp.EXMainServer;
import extend.zp.EXPlayer; import extend.zp.EXPlayer;
import extend.zp.MingTang;
import extend.zp.OpCard; import extend.zp.OpCard;
import extend.zp.PlayerRuleManager; import extend.zp.PlayerRuleManager;
import extend.zp.RuleWeight; import extend.zp.RuleWeight;
@ -18,8 +20,9 @@ import extend.zp.player.state.EXPlayerDiscardState;
import extend.zp.room.state.EXRoomSetpState; import extend.zp.room.state.EXRoomSetpState;
import extend.zp.uitl.Paixing; import extend.zp.uitl.Paixing;
public class PRTiState extends StateBase<EXPlayer> { public class PRTiState extends StateBase<EXPlayer> {
public static final Logger logger = Logger.getLogger(PRTiState.class);
@Override @Override
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
owner.kongCount++; owner.kongCount++;
@ -31,14 +34,22 @@ public class PRTiState extends StateBase<EXPlayer> {
tiGroup[3] = card; tiGroup[3] = card;
owner.tiGroup.add(tiGroup); owner.tiGroup.add(tiGroup);
owner.opCardList.add(new OpCard(RuleWeight.TYPE_TI, card, card, card, Paixing.caclHuxi(RuleWeight.TYPE_TI, card))); owner.opCardList
.add(new OpCard(RuleWeight.TYPE_TI, card, card, card, Paixing.caclHuxi(RuleWeight.TYPE_TI, card)));
ITArray opcard = TArray.newInstance(); ITArray opcard = TArray.newInstance();
opcard.addInt(card); opcard.addInt(card);
opcard.addInt(card); opcard.addInt(card);
opcard.addInt(card); opcard.addInt(card);
owner.tipai_count = owner.tipai_count + 1; owner.tipai_count = owner.tipai_count + 1;
owner.getRoom().activeCard=0; owner.getRoom().activeCard = 0;
// if (Paixing.checkWin(owner, 0) && owner.isTingHu == true) {
// logger.info("胡息:"+owner.huXi);
// owner.getRoom().winSeat = owner.seat;
// owner.stateMachine.changeState(Global.getState(PRWinState.class));
// }
EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_TI, owner.seat, opcard); EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_TI, owner.seat, opcard);
EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner); EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
} }
@ -57,11 +68,11 @@ public class PRTiState extends StateBase<EXPlayer> {
if (count == 1) { if (count == 1) {
owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class)); owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class));
} else if (count == 2) { } else if (count == 2) {
//if (owner.tiCount == 2) { // if (owner.tiCount == 2) {
// owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class)); // owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class));
//} else { // } else {
timer(owner); timer(owner);
// } // }
} else { } else {
timer(owner); timer(owner);
} }
@ -76,11 +87,14 @@ public class PRTiState extends StateBase<EXPlayer> {
owner.room.enqueueRunnable(new Runnable() { owner.room.enqueueRunnable(new Runnable() {
@Override @Override
public void run() { public void run() {
owner.stateMachine.changeState(Global.getState(PlayerWaitState.class)); if(owner.seat==owner.room.activeSeat) {
owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class)); owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
}
} }
}); });
} }
}, 2, TimeUnit.SECONDS); }, 1, TimeUnit.SECONDS);
} }
} }

View File

@ -52,7 +52,13 @@ public class PRWeiState extends StateBase<EXPlayer> {
ITArray opcard = TArray.newInstance(); ITArray opcard = TArray.newInstance();
opcard.addInt(card); opcard.addInt(card);
opcard.addInt(card); opcard.addInt(card);
owner.getRoom().activeCard=0;
// if (Paixing.checkWin(owner, 0) && owner.isTingHu==true ) {
// logger.info("这里显示是否自摸:"+owner.getRoom().isFanPao);
// owner.stateMachine.changeState(Global.getState(PRWinState.class));
// }
EXMainServer.gameCtr.actionCard(owner, card, card, type, owner.seat, opcard); EXMainServer.gameCtr.actionCard(owner, card, card, type, owner.seat, opcard);
EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner); EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
} }

View File

@ -1,18 +1,22 @@
package extend.zp.player.rulestate; package extend.zp.player.rulestate;
import com.game.state.StateBase; import com.game.state.StateBase;
import com.taurus.core.util.Logger;
import extend.zp.EXPlayer; import extend.zp.EXPlayer;
import extend.zp.EXRoom; import extend.zp.EXRoom;
public class PRWinState extends StateBase<EXPlayer> { public class PRWinState extends StateBase<EXPlayer> {
public static final Logger logger = Logger.getLogger(PRTiState.class);
@Override @Override
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
EXRoom room = owner.getRoom(); EXRoom room = owner.getRoom();
if (!room.isplaying) { if (!room.isplaying) {
logger.info("当前房间状态异常:---"+owner.stateMachine.lastState);
owner.stateMachine.curState = owner.stateMachine.lastState; owner.stateMachine.curState = owner.stateMachine.lastState;
return; return;
} }

View File

@ -5,6 +5,7 @@ import java.util.Map.Entry;
import com.game.ActionEvent; import com.game.ActionEvent;
import com.taurus.core.entity.ITArray; import com.taurus.core.entity.ITArray;
import com.taurus.core.entity.ITObject; import com.taurus.core.entity.ITObject;
import com.taurus.core.util.Logger;
import extend.zp.EXActionEvent; import extend.zp.EXActionEvent;
import extend.zp.EXPlayer; import extend.zp.EXPlayer;
@ -13,8 +14,11 @@ import extend.zp.tip.Tip;
public class EXPlayerDisCardTipState extends EXPlayerTipState { public class EXPlayerDisCardTipState extends EXPlayerTipState {
public static final Logger logger = Logger.getLogger(EXPlayerDisCardTipState.class);
@Override @Override
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
super.enter(owner); super.enter(owner);
owner.getRoom().tipMap.put(owner.playerid, owner.tipMgr); owner.getRoom().tipMap.put(owner.playerid, owner.tipMgr);
@ -26,6 +30,7 @@ public class EXPlayerDisCardTipState extends EXPlayerTipState {
// TODO Auto-generated method stub // TODO Auto-generated method stub
super.exit(owner); super.exit(owner);
owner.getRoom().tipMap.remove(owner.playerid); owner.getRoom().tipMap.remove(owner.playerid);
} }
@Override @Override
@ -49,7 +54,9 @@ public class EXPlayerDisCardTipState extends EXPlayerTipState {
} }
} }
owner.tipMgr.choicAction(id,null); owner.tipMgr.choicAction(id,null);
} }
} }
} }

View File

@ -6,6 +6,7 @@ import java.util.concurrent.TimeUnit;
import com.game.Global; import com.game.Global;
import com.game.data.Player; import com.game.data.Player;
import com.game.player.state.PlayerEndState;
import com.game.player.state.PlayerPauseState; import com.game.player.state.PlayerPauseState;
import com.game.player.state.PlayerWaitState; import com.game.player.state.PlayerWaitState;
import com.game.state.StateBase; import com.game.state.StateBase;
@ -25,11 +26,22 @@ import extend.zp.room.state.EXRoomSetpState;
import extend.zp.uitl.CardUtil; import extend.zp.uitl.CardUtil;
import extend.zp.uitl.Paixing; import extend.zp.uitl.Paixing;
public class EXPlayerDrawState extends StateBase<EXPlayer> { public class EXPlayerDrawState extends StateBase<EXPlayer> {
Logger logger = Logger.getLogger(getClass()); Logger logger = Logger.getLogger(getClass());
@Override @Override
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
if(owner.stateMachine.lastState instanceof PlayerPauseState) {
logger.info("状态异常 :" + owner.stateMachine.lastState);
owner.stateMachine.curState=owner.stateMachine.lastState;
return;
}
// logger.info("owner.isTip:"+owner.isTip+"--"+owner.playerid);
// if (owner.isTip) {
// logger.info("状态异常 :" + owner.stateMachine.lastState);
// owner.stateMachine.curState=owner.stateMachine.lastState;
// return;
// }
EXRoom room = owner.getRoom(); EXRoom room = owner.getRoom();
if (owner.getRoom().card.getCount() == 0) { if (owner.getRoom().card.getCount() == 0) {
owner.getRoom().liuju = true; owner.getRoom().liuju = true;
@ -38,226 +50,181 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
return; return;
} }
room.isAllPass = false; room.isAllPass = false;
// room.isFanPao = false;
owner.getRoom().tipMap.clear(); owner.getRoom().tipMap.clear();
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");
if (room.while_list) { if (room.while_list) {
double rand = Math.random() % 100 * 100; double rand = Math.random() % 100 * 100;
ArrayList<Integer> tempCardList = new ArrayList<Integer>();
int count = 0;
do {
int drawCard = room.card.popsub();
boolean flag = false;
for (Map.Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) {
Player player = entry.getValue();
if (!player.is_white) {
if (Paixing.checkWin((EXPlayer) player, drawCard)) {
flag = true;
break;
}
}
}
if (flag) {
if (rand > room.white_value && room.card.cardList.size() != 0 && count++ <= 5) {
tempCardList.add(drawCard);
Global.logger.info("no white:" + owner.playerid + " to hu:" + drawCard);
continue;
}
}
owner.drawCard = drawCard;
break;
} while (true);
room.card.cardList.addAll(tempCardList);
} else {
owner.drawCard = room.card.popsub();
}
} else {
if (room.while_list) {
Global.logger.info("dealcards playerid:" + owner.playerid + " xingyuhao:" + owner.is_white
+ " white_value:" + room.white_value);
double rand = Math.random() % 100 * 100;
if (rand > room.white_value) {
ArrayList<Integer> tempCardList = new ArrayList<Integer>(); ArrayList<Integer> tempCardList = new ArrayList<Integer>();
int count = 0; int count = 0;
do { do {
int drawCard = room.card.popsub(); int drawCard = room.card.pop();
boolean flag = false; boolean flag = false;
for (Map.Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) { for (Map.Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) {
Player player = entry.getValue(); Player player = entry.getValue();
if (!player.is_white) { if (player.playerid != owner.playerid) {
if (Paixing.checkWin((EXPlayer) player, drawCard)) { if (player.is_white) {
flag = true; if (IsGoodCard2((EXPlayer) player, drawCard)) {
break; flag = true;
break;
}
} else {
if (IsGoodCard2((EXPlayer) player, drawCard)) {
flag = false;
}
} }
} }
} }
if (flag) { if (owner.is_white) {
if (rand > room.white_value && room.card.cardList.size() != 0 && count++ <= 5) { if (IsGoodCard((EXPlayer) owner, drawCard)) {
flag = true;
}
} else {
if (IsGoodCard((EXPlayer) owner, drawCard)) {
flag = false;
}
}
if (!flag) {
if (room.card.cardList.size() > 0 && count++ <= room.card.cardList.size()) {
tempCardList.add(drawCard); tempCardList.add(drawCard);
Global.logger.info("no white:" + owner.playerid + " to hu:" + drawCard); // Global.logger.info("not good card:" + drawCard + " for white player");
continue; continue;
} }
} }
owner.drawCard = drawCard; owner.drawCard = drawCard;
break; break;
} } while (true);
while (true);
room.card.cardList.addAll(tempCardList); room.card.cardList.addAll(tempCardList);
} else { } else {
owner.drawCard = room.card.popsub(); owner.drawCard = room.card.pop();
} }
} else { } else {
if (room.while_list) { if (owner.black_white_status == 2) {
Global.logger.info("dealcards playerid:" + owner.playerid + " xingyuhao:" + owner.is_white + " white_value:" + room.white_value); Global.logger
double rand = Math.random() % 100 * 100; .info("dealcards playerid:" + owner.playerid + " white player:" + owner.black_white_rate);
if (rand > room.white_value) { /*
ArrayList<Integer> tempCardList = new ArrayList<Integer>(); * double rand = Math.random() % 100 * 100; if (rand <= owner.black_white_rate)
int count = 0; * { ArrayList<Integer> tempCardList = new ArrayList<Integer>(); int count = 0;
do { * do { int drawCard = room.card.pop();
int drawCard = room.card.pop(); *
* boolean flag = false; if (IsGoodCard((EXPlayer) owner, drawCard)) { flag =
boolean flag = false; * true; }
for (Map.Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) { *
Player player = entry.getValue(); * if (!flag) { if (room.card.cardList.size() > 0 && count++ <=
* room.card.cardList.size()) { tempCardList.add(drawCard);
if (player.playerid != owner.playerid) { * //Global.logger.info("not good card:" + drawCard + " for white player");
if (player.is_white) { * continue; } }
if (IsGoodCard2((EXPlayer) player, drawCard)) { *
flag = true; * owner.drawCard = drawCard; break; } while (true);
break; * room.card.cardList.addAll(tempCardList); } else { owner.drawCard =
} * room.card.pop(); }
} else { */
if (IsGoodCard2((EXPlayer) player, drawCard)) { owner.drawCard = room.card.pop();
flag = false; } 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;
if (owner.is_white) { * do { int drawCard = room.card.pop();
if (IsGoodCard((EXPlayer) owner, drawCard)) { *
flag = true; * boolean flag = false; if (IsGoodCard((EXPlayer) owner, drawCard)) { flag =
} * true; }
} else { *
if (IsGoodCard((EXPlayer) owner, drawCard)) { * if (flag) { if (room.card.cardList.size() > 0 && count++ <=
flag = false; * room.card.cardList.size()) { tempCardList.add(drawCard);
} * //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("not good card:" + drawCard + " for white player"); */
continue; owner.drawCard = room.card.pop();
}
}
owner.drawCard = drawCard;
break;
}
while (true);
room.card.cardList.addAll(tempCardList);
} else {
owner.drawCard = room.card.pop();
}
} else { } else {
if (owner.black_white_status == 2) { Global.logger.info("dealcards playerid:" + owner.playerid + " general player");
Global.logger.info("dealcards playerid:" + owner.playerid + " white player:" + owner.black_white_rate); /*
/*double rand = Math.random() % 100 * 100; * boolean black_flag = false; for (Map.Entry<Integer, Player> entry :
if (rand <= owner.black_white_rate) { * room.playerMapBySeat.entrySet()) { Player player = entry.getValue();
ArrayList<Integer> tempCardList = new ArrayList<Integer>(); *
int count = 0; * if (player.playerid != owner.playerid) { if (player.black_white_status == 1)
do { * { black_flag = true; } } }
int drawCard = room.card.pop(); *
* double rand = Math.random() % 100 * 100; if (black_flag && rand <=
boolean flag = false; * owner.black_white_rate) { ArrayList<Integer> tempCardList = new
if (IsGoodCard((EXPlayer) owner, drawCard)) { * ArrayList<Integer>(); int count = 0; do { int drawCard = room.card.pop();
flag = true; *
} * boolean flag = false; for (Map.Entry<Integer, Player> entry :
* room.playerMapBySeat.entrySet()) { Player player = entry.getValue();
if (!flag) { *
if (room.card.cardList.size() > 0 && count++ <= room.card.cardList.size()) { * if (player.playerid != owner.playerid) { if (player.black_white_status == 1)
tempCardList.add(drawCard); * { if (IsGoodCard2((EXPlayer) player, drawCard)) { flag = true; break; } } } }
//Global.logger.info("not good card:" + drawCard + " for white player"); *
continue; * 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; * owner.drawCard = drawCard; break; } while (true);
} * room.card.cardList.addAll(tempCardList); } else { owner.drawCard =
while (true); * room.card.pop(); }
room.card.cardList.addAll(tempCardList); */
} else { owner.drawCard = room.card.pop();
owner.drawCard = room.card.pop();
}*/
owner.drawCard = room.card.pop();
} 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();
} 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();
}
*/
owner.drawCard = room.card.pop();
}
} }
} }
}
room.step++; room.step++;
int tempStep = room.step; int tempStep = room.step;
// if (owner.seat == 2) { // if (owner.seat == 2) {
// owner.drawCard = 102; // owner.drawCard = 102;
// } // }
//owner.drawCard = room.card.pop(); // owner.drawCard = room.card.pop();
logger.info("drawCard,player:" + owner + ",card:" + owner.drawCard); logger.info("drawCard,player:" + owner + ",card:" + owner.drawCard);
room.drawCard = owner.drawCard; room.drawCard = owner.drawCard;
@ -266,21 +233,12 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
int card = owner.drawCard; int card = owner.drawCard;
/* /*
for (int i = 0; i < owner.kanGroup.size(); i++) { * for (int i = 0; i < owner.kanGroup.size(); i++) { if (owner.drawCard ==
if (owner.drawCard == owner.kanGroup.get(i)[0]) { * owner.kanGroup.get(i)[0]) { card = 0; break; } } for (int i = 0; i <
card = 0; * owner.weiGroup.size(); i++) { if (owner.drawCard == owner.weiGroup.get(i)[0])
break; * { card = 0; break; } } if (CardUtil.cardNum(owner.drawCard, owner.cardInhand)
} * >= 2) { card = 0; }
} */
for (int i = 0; i < owner.weiGroup.size(); i++) {
if (owner.drawCard == owner.weiGroup.get(i)[0]) {
card = 0;
break;
}
}
if (CardUtil.cardNum(owner.drawCard, owner.cardInhand) >= 2) {
card = 0;
}*/
ITObject otherParam = new TObject(); ITObject otherParam = new TObject();
otherParam.putInt("card", card); otherParam.putInt("card", card);
otherParam.putInt("seat", owner.room.activeSeat); otherParam.putInt("seat", owner.room.activeSeat);
@ -295,13 +253,13 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
private boolean IsGoodCard(EXPlayer player, int drawCard) { private boolean IsGoodCard(EXPlayer player, int drawCard) {
if (Paixing.checkWin((EXPlayer) player, drawCard)) { if (Paixing.checkWin((EXPlayer) player, drawCard)) {
return true; return true;
} }
for (int i = 0; i < player.kanGroup.size(); i++) { for (int i = 0; i < player.kanGroup.size(); i++) {
if (drawCard == player.kanGroup.get(i)[0]) { if (drawCard == player.kanGroup.get(i)[0]) {
return true; return true;
} }
} }
for (int i = 0; i < player.weiGroup.size(); i++) { for (int i = 0; i < player.weiGroup.size(); i++) {
@ -310,8 +268,7 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
} }
} }
if (CardUtil.cardNum(drawCard, player.cardInhand) >= 2) if (CardUtil.cardNum(drawCard, player.cardInhand) >= 2) {
{
return true; return true;
} }
@ -335,8 +292,7 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
} }
} }
if (CardUtil.cardNum(drawCard, player.cardInhand) >= 2) if (CardUtil.cardNum(drawCard, player.cardInhand) >= 2) {
{
return true; return true;
} }
@ -397,7 +353,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);
@ -405,7 +361,7 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
owner.outcardList.add(owner.drawCard); owner.outcardList.add(owner.drawCard);
owner.getRoom().throwCardsSet.add(owner.drawCard); owner.getRoom().throwCardsSet.add(owner.drawCard);
owner.getRoom().getPlayBack().addThrowCardCommand(owner.seat, owner.drawCard); owner.getRoom().getPlayBack().addThrowCardCommand(owner.seat, owner.drawCard);
owner.drawCard = 0; owner.drawCard = 0;
owner.stateMachine.changeState(Global.getState(PlayerWaitState.class)); owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class)); owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));

View File

@ -5,18 +5,23 @@ import java.util.Map.Entry;
import com.game.ActionEvent; import com.game.ActionEvent;
import com.taurus.core.entity.ITArray; import com.taurus.core.entity.ITArray;
import com.taurus.core.entity.ITObject; import com.taurus.core.entity.ITObject;
import com.taurus.core.util.Logger;
import extend.zp.EXActionEvent; import extend.zp.EXActionEvent;
import extend.zp.EXPlayer; import extend.zp.EXPlayer;
import extend.zp.RuleWeight; import extend.zp.RuleWeight;
import extend.zp.player.rulestate.PRDiscardPaoState;
import extend.zp.tip.Tip; import extend.zp.tip.Tip;
public class EXPlayerDrawTipState extends EXPlayerTipState { public class EXPlayerDrawTipState extends EXPlayerTipState {
public static final Logger logger = Logger.getLogger(EXPlayerDrawTipState.class);
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
super.enter(owner); super.enter(owner);
////System.out.println("outs DI enter"); ////System.out.println("outs DI enter");
owner.getRoom().tipMap.put(owner.playerid, owner.tipMgr); owner.getRoom().tipMap.put(owner.playerid, owner.tipMgr);
} }
@Override @Override
@ -25,6 +30,7 @@ public class EXPlayerDrawTipState extends EXPlayerTipState {
super.exit(owner); super.exit(owner);
////System.out.println("outs DI exit"); ////System.out.println("outs DI exit");
owner.getRoom().tipMap.remove(owner.playerid); owner.getRoom().tipMap.remove(owner.playerid);
} }
public void reload(EXPlayer owner) { public void reload(EXPlayer owner) {
@ -42,6 +48,8 @@ public class EXPlayerDrawTipState extends EXPlayerTipState {
int id = netParam.getInt("id"); int id = netParam.getInt("id");
ITArray biid = netParam.containsKey("biid")?netParam.getTArray("biid"):null; ITArray biid = netParam.containsKey("biid")?netParam.getTArray("biid"):null;
owner.tipMgr.doAction(id,biid); owner.tipMgr.doAction(id,biid);
}else if (ActionEvent.EVENT_TIMER_AUTO.equals(cmd)) { }else if (ActionEvent.EVENT_TIMER_AUTO.equals(cmd)) {
int id = owner.tipMgr.getUid(); int id = owner.tipMgr.getUid();
for (Entry<Integer, Tip> entry : owner.tipMgr.tipMap.entrySet()) { for (Entry<Integer, Tip> entry : owner.tipMgr.tipMap.entrySet()) {
@ -53,6 +61,7 @@ public class EXPlayerDrawTipState extends EXPlayerTipState {
} }
owner.tipMgr.doAction(id,null); owner.tipMgr.doAction(id,null);
} }
} }
} }

View File

@ -10,6 +10,7 @@ import com.game.player.state.PlayerPauseState;
import com.game.state.StateBase; import com.game.state.StateBase;
import com.taurus.core.entity.ITObject; import com.taurus.core.entity.ITObject;
import com.taurus.core.entity.TObject; import com.taurus.core.entity.TObject;
import com.taurus.core.util.Logger;
import com.taurus.permanent.TPServer; import com.taurus.permanent.TPServer;
import extend.zp.Config; import extend.zp.Config;
@ -19,10 +20,13 @@ import extend.zp.EXMainServer;
import extend.zp.EXPlayer; import extend.zp.EXPlayer;
import extend.zp.EXRoom; import extend.zp.EXRoom;
import extend.zp.PlayerRuleManager; import extend.zp.PlayerRuleManager;
import extend.zp.player.rulestate.PRDiscardPaoState;
import extend.zp.uitl.Paixing; import extend.zp.uitl.Paixing;
public class EXPlayerPreDrawState extends StateBase<EXPlayer> { public class EXPlayerPreDrawState extends StateBase<EXPlayer> {
public static final Logger logger = Logger.getLogger(EXPlayerPreDrawState.class);
@Override @Override
public void enter(EXPlayer owner) { public void enter(EXPlayer owner) {
EXRoom room = owner.getRoom(); EXRoom room = owner.getRoom();

View File

@ -1,15 +1,29 @@
package extend.zp.player.state; package extend.zp.player.state;
import com.game.Global;
import com.game.player.state.PlayerEndState;
import com.game.player.state.PlayerReadyState;
import com.game.state.StateBase; import com.game.state.StateBase;
import com.taurus.core.util.Logger;
import extend.zp.EXActionEvent; import extend.zp.EXActionEvent;
import extend.zp.EXMainServer; import extend.zp.EXMainServer;
import extend.zp.EXPlayer; import extend.zp.EXPlayer;
import extend.zp.PlayerRuleManager; import extend.zp.PlayerRuleManager;
import extend.zp.player.rulestate.PRTiState;
public class EXPlayerWaitState extends StateBase<EXPlayer> { public class EXPlayerWaitState extends StateBase<EXPlayer> {
public static final Logger logger = Logger.getLogger(EXPlayerWaitState.class);
@Override @Override
public void execute(EXPlayer owner, String cmd, int gid, Object param) { public void execute(EXPlayer owner, String cmd, int gid, Object param) {
// if (owner.stateMachine.lastState instanceof PlayerEndState) {
// logger.info("又抓到你了-------:" + owner.stateMachine.lastState);
// owner.stateMachine.changeState(Global.getState(PlayerReadyState.class));
// return;
// }
// TODO Auto-generated method stub // TODO Auto-generated method stub
switch (cmd) { switch (cmd) {
case EXActionEvent.EVENT_OTHER_DISCARD: case EXActionEvent.EVENT_OTHER_DISCARD:

View File

@ -95,7 +95,7 @@ public class EXRoomDealState extends StateBase<EXRoom> {
} }
}); });
} }
}, 500, TimeUnit.MILLISECONDS); }, 5000, TimeUnit.MILLISECONDS);
} }
} }

View File

@ -2,15 +2,28 @@ package extend.zp.room.state;
import com.game.Global; import com.game.Global;
import com.game.data.Player; import com.game.data.Player;
import com.game.player.state.PlayerEndState;
import com.game.player.state.PlayerReadyState;
import com.game.room.state.RoomEndState;
import com.game.state.StateBase; import com.game.state.StateBase;
import com.taurus.core.util.Logger;
import extend.zp.EXMainServer; import extend.zp.EXMainServer;
import extend.zp.EXRoom; import extend.zp.EXRoom;
import extend.zp.player.state.EXPlayerDrawState; import extend.zp.player.state.EXPlayerDrawState;
import extend.zp.player.state.EXPlayerWaitState;
public class EXRoomSetpState extends StateBase<EXRoom> { public class EXRoomSetpState extends StateBase<EXRoom> {
public static final Logger logger = Logger.getLogger(EXRoomSetpState.class);
@Override @Override
public void enter(EXRoom owner) { public void enter(EXRoom owner) {
// if (owner.stateMachine.lastState instanceof RoomEndState) {
// logger.info("又又又又抓到你了-------:" + owner.stateMachine.lastState);
// owner.stateMachine.changeState(Global.getState(EXRoomStartGameState.class));
// return;
// }
Player player; Player player;
// TODO Auto-generated method stub // TODO Auto-generated method stub
if (owner.activeSeat == 0) { if (owner.activeSeat == 0) {

View File

@ -11,8 +11,10 @@ import com.taurus.core.entity.ITArray;
import com.taurus.core.entity.ITObject; import com.taurus.core.entity.ITObject;
import com.taurus.core.entity.TArray; import com.taurus.core.entity.TArray;
import com.taurus.core.entity.TObject; import com.taurus.core.entity.TObject;
import com.taurus.core.util.Logger;
import extend.zp.*; import extend.zp.*;
import extend.zp.player.rule.RuleDiscardPao;
import extend.zp.player.rulestate.PRDrawPaoState; import extend.zp.player.rulestate.PRDrawPaoState;
import extend.zp.player.state.EXPlayerDiscardState; import extend.zp.player.state.EXPlayerDiscardState;
import extend.zp.room.state.EXRoomSetpState; import extend.zp.room.state.EXRoomSetpState;
@ -20,6 +22,7 @@ import extend.zp.uitl.CardUtil;
public class TipManager { public class TipManager {
public static final Logger logger = Logger.getLogger(TipManager.class);
private int id = 0; private int id = 0;
private int uid = 100; private int uid = 100;
@ -45,7 +48,9 @@ public class TipManager {
return this.uid; return this.uid;
} }
public void choicAction(int id,ITArray biid) { public void choicAction(int id,ITArray biid) {
if (id == this.uid) { if (id == this.uid) {
// //
Iterator<Entry<Integer, Tip>> it = this.tipMap.entrySet().iterator(); Iterator<Entry<Integer, Tip>> it = this.tipMap.entrySet().iterator();
int card = 0; int card = 0;
@ -101,6 +106,7 @@ public class TipManager {
owner.stateMachine.changeState(Global.getState(PlayerWaitState.class)); owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
////System.out.println("typesttteee"); ////System.out.println("typesttteee");
owner.getRoom().addAction(new Action(tip, owner)); owner.getRoom().addAction(new Action(tip, owner));
} else { } else {
//异常下轮 //异常下轮
//owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class)); //owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));

View File

@ -0,0 +1,968 @@
package extend.zp.uitl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import com.game.data.Room;
import com.taurus.core.entity.ITObject;
import com.taurus.core.entity.TObject;
import com.taurus.core.util.Logger;
import extend.zp.EXPlayer;
import extend.zp.EXRoom;
import extend.zp.OpCard;
import extend.zp.RuleWeight;
public class MingtangCheck {
public static final Logger logger = Logger.getLogger(MingtangCheck.class);
public List<Integer> cardGroup = new ArrayList<Integer>();
public List<Integer> cardList = new ArrayList<Integer>();
public Stack<List<Integer>> stack = new Stack<List<Integer>>();
public Stack<Integer> stackHuxi = new Stack<Integer>();
public List<OpCard> opCardList = new ArrayList<OpCard>();
public int pair_count;
public int huxiTotal;
public int activeCard;
public List<Integer> huxiList = new ArrayList<Integer>();
public MingtangCheck(List<Integer> cardInhand, int addCard) {
this.pair_count = 0;
this.huxiTotal = 0;
this.activeCard = 0;
this.huxiList.clear();
this.opCardList.clear();
this.cardGroup.clear();
for (int i = 0; i < cardInhand.size(); i++) {
this.cardList.add(cardInhand.get(i));
}
this.cardList.add(Integer.valueOf(addCard));
Collections.sort(this.cardList);
}
public boolean yikuaibian(EXPlayer player) {
this.opCardList.clear();
int yikuaibianCount = 0;
for (int i = 0; i < player.opCardList.size(); i++) {
OpCard opCard = player.opCardList.get(i);
if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)
&& CardUtil.isRedCard(opCard.card3)) {
yikuaibianCount++;
} else if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)) {
yikuaibianCount++;
}
huxiTotal += opCard.huXi;
}
// 如果吃碰跑提中的一块扁大于1则返回
if (yikuaibianCount > 1) {
return false;
}
int redCardCount = 0;
for (int i = 0; i < this.cardList.size(); i++) {
if (CardUtil.isRedCard(cardList.get(i))) {
redCardCount++;
}
}
// 如果红牌数量超过4则返回
if (redCardCount > 4) {
return false;
}
// 检测各种一块匾排列后能否胡牌
int huxi = 0;
for (int i = 0; i < this.cardList.size(); i++) {
if (CardUtil.isRedCard(cardList.get(i))) {
int activeCard = cardList.get(i);
if (activeCard % 100 == 2 || activeCard % 100 == 7 || activeCard % 100 == 10) {
if (CardUtil.cardNum(activeCard, this.cardList) >= 3) {
CardUtil.removeCard(this.cardList, activeCard, 3);
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard));
int huXi = 0;
if (player.getRoom() == null) {
if (activeCard > 200) {
huXi = Paixing.caclHuxi(3, activeCard);
} else {
huXi = Paixing.caclHuxi(2, activeCard);
}
} else {
if ((player.getRoom()).isTianHu && activeCard == (player.getRoom()).drawCard
&& (player.getRoom()).bankerSeat == player.seat) {
huXi = Paixing.caclHuxi(3, activeCard);
} else {
huXi = Paixing.caclHuxi(2, activeCard);
}
}
opCardList.add(new OpCard(RuleWeight.TYPE_PONG, activeCard, activeCard, activeCard, huXi));
huxiTotal += huXi;
if (tryWin(player, pair_count)) {
for (int j = 0; j < opCardList.size(); j++) {
OpCard opCard = opCardList.get(j);
if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)
&& CardUtil.isRedCard(opCard.card3)) {
yikuaibianCount++;
} else if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)) {
yikuaibianCount++;
}
}
// 如果吃碰跑提中的一块扁大于1则返回
if (yikuaibianCount > 1) {
return false;
}
return true;
}
}
}
if (activeCard % 100 == 2) {
// 组装二贰贰
if (CardUtil.cardNum(activeCard, this.cardList) >= 1
&& CardUtil.cardNum(activeCard + 100, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, activeCard, 1);
CardUtil.removeCard(this.cardList, activeCard + 100, 2);
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard + 100));
cardGroup.add(Integer.valueOf(activeCard + 100));
ITObject obj = TObject.newInstance();
obj.putInt("type", RuleWeight.CHOW1);
obj.putInt("hu_xi", 0);
obj.putInt("card1", activeCard);
obj.putInt("card2", activeCard + 100);
obj.putInt("card3", activeCard + 100);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW_OTHER, activeCard, activeCard + 100,
activeCard + 100, 0));
if (tryWin(player, pair_count)) {
for (int j = 0; j < opCardList.size(); j++) {
OpCard opCard = opCardList.get(j);
if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)
&& CardUtil.isRedCard(opCard.card3)) {
yikuaibianCount++;
} else if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)) {
yikuaibianCount++;
}
}
// 如果吃碰跑提中的一块扁大于1则返回
if (yikuaibianCount > 1) {
return false;
}
return true;
}
}
// 组装二二贰
if (CardUtil.cardNum(activeCard, this.cardList) >= 2
&& CardUtil.cardNum(activeCard + 100, this.cardList) >= 1) {
CardUtil.removeCard(this.cardList, activeCard, 2);
CardUtil.removeCard(this.cardList, activeCard + 100, 1);
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard + 100));
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW_OTHER, activeCard, activeCard + 100,
activeCard + 100, 0));
if (tryWin(player, pair_count)) {
for (int j = 0; j < opCardList.size(); j++) {
OpCard opCard = opCardList.get(j);
if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)
&& CardUtil.isRedCard(opCard.card3)) {
yikuaibianCount++;
} else if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)) {
yikuaibianCount++;
}
}
// 如果吃碰跑提中的一块扁大于1则返回
if (yikuaibianCount > 1) {
return false;
}
return true;
}
}
}
if (activeCard % 100 == 7) {
// 组装七柒柒
System.out.println(CardUtil.cardNum(activeCard, this.cardList));
System.out.println(CardUtil.cardNum(activeCard + 100, this.cardList));
if (CardUtil.cardNum(activeCard, this.cardList) >= 1
&& CardUtil.cardNum(activeCard + 100, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, activeCard, 1);
CardUtil.removeCard(this.cardList, activeCard + 100, 2);
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard + 100));
cardGroup.add(Integer.valueOf(activeCard + 100));
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW_OTHER, activeCard, activeCard + 100,
activeCard + 100, 0));
if (tryWin(player, pair_count)) {
for (int j = 0; j < opCardList.size(); j++) {
OpCard opCard = opCardList.get(j);
if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)
&& CardUtil.isRedCard(opCard.card3)) {
yikuaibianCount++;
} else if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)) {
yikuaibianCount++;
}
}
// 如果吃碰跑提中的一块扁大于1则返回
if (yikuaibianCount > 1) {
return false;
}
return true;
}
}
// 组装七七柒
if (CardUtil.cardNum(activeCard, this.cardList) >= 2
&& CardUtil.cardNum(activeCard + 100, this.cardList) >= 1) {
CardUtil.removeCard(this.cardList, activeCard, 2);
CardUtil.removeCard(this.cardList, activeCard + 100, 1);
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard + 100));
opCardList.add(
new OpCard(RuleWeight.TYPE_CHOW_OTHER, activeCard, activeCard, activeCard + 100, 0));
if (tryWin(player, player.tiCount + player.kongCount)) {
for (int j = 0; j < opCardList.size(); j++) {
OpCard opCard = opCardList.get(j);
if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)
&& CardUtil.isRedCard(opCard.card3)) {
yikuaibianCount++;
} else if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)) {
yikuaibianCount++;
}
}
// 如果吃碰跑提中的一块扁大于1则返回
if (yikuaibianCount > 1) {
return false;
}
return true;
}
}
}
if (activeCard % 100 == 10) {
// 组装十拾拾
if (CardUtil.cardNum(activeCard, this.cardList) >= 1
&& CardUtil.cardNum(activeCard + 100, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, activeCard, 1);
CardUtil.removeCard(this.cardList, activeCard + 100, 2);
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard + 100));
cardGroup.add(Integer.valueOf(activeCard + 100));
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW_OTHER, activeCard, activeCard + 100,
activeCard + 100, 0));
if (tryWin(player, pair_count)) {
for (int j = 0; j < opCardList.size(); j++) {
OpCard opCard = opCardList.get(j);
if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)
&& CardUtil.isRedCard(opCard.card3)) {
yikuaibianCount++;
} else if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)) {
yikuaibianCount++;
}
}
// 如果吃碰跑提中的一块扁大于1则返回
if (yikuaibianCount > 1) {
return false;
}
return true;
}
}
// 组装十十拾
if (CardUtil.cardNum(activeCard, this.cardList) >= 2
&& CardUtil.cardNum(activeCard + 100, this.cardList) >= 1) {
CardUtil.removeCard(this.cardList, activeCard, 2);
CardUtil.removeCard(this.cardList, activeCard + 100, 1);
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard));
cardGroup.add(Integer.valueOf(activeCard + 100));
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW_OTHER, activeCard, activeCard + 100,
activeCard + 100, 0));
if (tryWin(player, pair_count)) {
for (int j = 0; j < opCardList.size(); j++) {
OpCard opCard = opCardList.get(j);
if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)
&& CardUtil.isRedCard(opCard.card3)) {
yikuaibianCount++;
} else if (CardUtil.isRedCard(opCard.card1) && CardUtil.isRedCard(opCard.card2)) {
yikuaibianCount++;
}
}
// 如果吃碰跑提中的一块扁大于1则返回
if (yikuaibianCount > 1) {
return false;
}
return true;
}
}
}
}
}
return false;
}
public boolean tryWin(EXPlayer player, int tikongCount) {
if (this.cardList.size() == 0) {
if (player.tiCount + player.kongCount > 0) {
if (this.pair_count == 1) {
return true;
}
return false;
}
if (this.pair_count > 0) {
return false;
}
return true;
}
int activeCard = 0;
for (Iterator<Integer> iterator = this.cardList.iterator(); iterator.hasNext();) {
int card = ((Integer) iterator.next()).intValue();
if (card == 201 || card == 202) {
activeCard = card;
break;
}
}
if (activeCard == 0)
activeCard = ((Integer) this.cardList.get(0)).intValue();
if (activeCard % 100 == 1) {
if (tryShunzi1(activeCard, player)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
// opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, card, card + 1, card + 2, huXi));
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
if (huXi > 0)
huxiTotal -= huXi;
}
if (tryKezi(activeCard, player)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
if (huXi > 0)
huxiTotal -= huXi;
}
if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
if (tryWin(player, tikongCount))
return true;
this.pair_count = 0;
rollBack();
this.stackHuxi.pop();
}
if (tryShunzi2(activeCard)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
this.stackHuxi.pop();
}
} else if (activeCard % 100 == 2) {
if (tryShunzi3(activeCard, player)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
if (huXi > 0)
huxiTotal -= huXi;
}
if (tryKezi(activeCard, player)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
if (huXi > 0)
huxiTotal -= huXi;
}
if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
if (tryWin(player, tikongCount))
return true;
this.pair_count = 0;
rollBack();
this.stackHuxi.pop();
}
if (tryShunzi1(activeCard, player)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
if (huXi > 0)
huxiTotal -= huXi;
}
if (tryShunzi2(activeCard)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
this.stackHuxi.pop();
}
} else {
if (tryKezi(activeCard, player)) {
boolean canWin = tryWin(player, tikongCount);
if (canWin)
return true;
rollBack();
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
if (huXi > 0)
huxiTotal -= huXi;
}
if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
if (tryWin(player, tikongCount))
return true;
this.pair_count = 0;
rollBack();
this.stackHuxi.pop();
}
if (tryShunzi1(activeCard, player)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
if (huXi > 0)
huxiTotal -= huXi;
}
if (tryShunzi2(activeCard)) {
if (tryWin(player, tikongCount))
return true;
rollBack();
this.stackHuxi.pop();
}
}
return false;
}
boolean tryKezi(int card, EXPlayer player) {
if (huxiTotal + player.huXi > 30) {
return false;
}
if (CardUtil.cardNum(card, this.cardList) >= 3) {
CardUtil.removeCard(this.cardList, card, CardUtil.cardNum(card, this.cardList));
List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card));
push(cardGroup);
int huXi = 0;
if (player.getRoom() == null) {
if (card > 200) {
huXi = Paixing.caclHuxi(2, card);
} else {
huXi = Paixing.caclHuxi(2, card);
}
} else {
if ((player.getRoom()).isTianHu && card == (player.getRoom()).drawCard
&& (player.getRoom()).bankerSeat == player.seat) {
huXi = Paixing.caclHuxi(3, card);
} else {
huXi = Paixing.caclHuxi(2, card);
}
}
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, card, card, card, huXi));
huxiTotal += huXi;
this.stackHuxi.push(Integer.valueOf(huXi));
return true;
}
return false;
}
private boolean tryShunzi1(int card, EXPlayer player) {
if (card < 200 && card % 100 > 8)
return false;
if (CardUtil.cardNum(card + 1, this.cardList) > 0 && CardUtil.cardNum(card + 2, this.cardList) > 0) {
CardUtil.removeCard(this.cardList, card, 1);
CardUtil.removeCard(this.cardList, card + 1, 1);
CardUtil.removeCard(this.cardList, card + 2, 1);
List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card + 1));
cardGroup.add(Integer.valueOf(card + 2));
push(cardGroup);
int huXi = 0;
if (card % 100 == 1) {
// if (huxiTotal + player.huXi >= 30) {
// return false;
// }
huXi = Paixing.caclHuxi(14, card);
huxiTotal += huXi;
}
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, card, card + 1, card + 2, huXi));
this.stackHuxi.push(Integer.valueOf(huXi));
return true;
}
return false;
}
private boolean tryShunzi2(int card) {
if (CardUtil.cardType(card) == 1) {
if (CardUtil.cardNum(card + 100, this.cardList) >= 1 && CardUtil.cardNum(card, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 2);
CardUtil.removeCard(this.cardList, card + 100, 1);
List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card + 100));
push(cardGroup);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, card, card, card + 100, 0));
this.stackHuxi.push(Integer.valueOf(0));
return true;
}
if (CardUtil.cardNum(card + 100, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 1);
CardUtil.removeCard(this.cardList, card + 100, 2);
List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card + 100));
cardGroup.add(Integer.valueOf(card + 100));
push(cardGroup);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, card, card + 100, card + 100, 0));
this.stackHuxi.push(Integer.valueOf(0));
return true;
}
} else {
if (CardUtil.cardNum(card - 100, this.cardList) >= 1 && CardUtil.cardNum(card, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 1);
CardUtil.removeCard(this.cardList, card - 100, 2);
List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card - 100));
push(cardGroup);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, card, card + 1, card + 2, 0));
this.stackHuxi.push(Integer.valueOf(0));
return true;
}
if (CardUtil.cardNum(card - 100, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card - 100, 1);
CardUtil.removeCard(this.cardList, card, 2);
List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card - 100));
cardGroup.add(Integer.valueOf(card - 100));
push(cardGroup);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, card - 100, card, card, 0));
this.stackHuxi.push(Integer.valueOf(0));
return true;
}
}
return false;
}
private boolean tryShunzi3(int card, EXPlayer player) {
if (card % 100 == 2 && CardUtil.cardNum(card + 5, this.cardList) > 0
&& CardUtil.cardNum(card + 8, this.cardList) > 0) {
CardUtil.removeCard(this.cardList, card, 1);
CardUtil.removeCard(this.cardList, card + 5, 1);
CardUtil.removeCard(this.cardList, card + 8, 1);
List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card + 5));
cardGroup.add(Integer.valueOf(card + 8));
push(cardGroup);
// if (huxiTotal + player.huXi > 30) {
// return false;
// }
int huXi = Paixing.caclHuxi(14, card);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, card, card + 5, card + 8, huXi));
huxiTotal += huXi;
this.stackHuxi.push(Integer.valueOf(huXi));
return true;
}
return false;
}
private boolean tryPair(int card) {
if (this.pair_count > 0)
return false;
if (CardUtil.cardNum(card, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 2);
List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(Integer.valueOf(card));
cardGroup.add(Integer.valueOf(card));
push(cardGroup);
opCardList.add(new OpCard(RuleWeight.TYPE_JIANG, card, card, 0, 0));
System.out.println("移除了将:" + card);
this.pair_count = 1;
this.stackHuxi.push(Integer.valueOf(0));
return true;
}
return false;
}
private void push(List<Integer> cardGroup) {
this.stack.push(cardGroup);
}
private void rollBack() {
List<Integer> cardGroup = this.stack.pop();
for (Integer card : cardGroup)
this.cardList.add(card);
Collections.sort(this.cardList);
opCardList.remove(opCardList.size() - 1);
}
public boolean huka20(EXPlayer player, int tikongCount) {
List<Integer> cardList = new ArrayList<Integer>();
cardList.addAll(this.cardList);
// if (this.tryWin(player, pair_count)) {
// logger.info("30胡卡------------:" + (player.huXi + huxiTotal));
// }
// if (player.huXi + huxiTotal < 30) {
// return false;
// }
this.opCardList.clear();
// this.cardList.addAll(cardList);
// this.huxiTotal=0;
// this.pair_count=0;
if (activeCard == 0)
activeCard = ((Integer) cardList.get(0)).intValue();
for (int i = 0; i < cardList.size(); i++) {
this.huxiTotal = 0;
this.pair_count = 0;
this.opCardList.clear();
activeCard = ((Integer) cardList.get(0)).intValue();
// 1 1 2
if (CardUtil.cardNum(activeCard, this.cardList) >= 1 && CardUtil.cardNum(activeCard + 100, cardList) >= 2) {
CardUtil.removeCard(this.cardList, activeCard, 1);
CardUtil.removeCard(this.cardList, activeCard + 100, 2);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, activeCard, activeCard + 100, activeCard + 100, 0));
if (tryWin(player, pair_count)) {
if (player.huXi + huxiTotal == 20) {
return true;
}
} else {
this.cardList.add(activeCard);
this.cardList.add(activeCard + 100);
this.cardList.add(activeCard + 100);
}
}
this.huxiTotal = 0;
this.pair_count = 0;
this.opCardList.clear();
activeCard = ((Integer) cardList.get(0)).intValue();
// 1 1 2
if (CardUtil.cardNum(activeCard, this.cardList) >= 1 && CardUtil.cardNum(activeCard - 100, cardList) >= 2) {
CardUtil.removeCard(this.cardList, activeCard, 1);
CardUtil.removeCard(this.cardList, activeCard - 100, 2);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, activeCard, activeCard - 100, activeCard - 100, 0));
if (tryWin(player, pair_count)) {
if (player.huXi + huxiTotal == 20) {
return true;
}
} else {
this.cardList.add(activeCard);
this.cardList.add(activeCard - 100);
this.cardList.add(activeCard - 100);
}
}
this.huxiTotal = 0;
this.pair_count = 0;
this.opCardList.clear();
// 1 2 2
if (CardUtil.cardNum(activeCard, this.cardList) >= 2
&& CardUtil.cardNum(activeCard + 100, this.cardList) >= 1) {
CardUtil.removeCard(this.cardList, activeCard, 2);
CardUtil.removeCard(this.cardList, activeCard + 100, 1);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, activeCard, activeCard, activeCard + 100, 0));
if (tryWin(player, pair_count)) {
if (player.huXi + huxiTotal == 20) {
return true;
}
} else {
this.cardList.add(activeCard);
this.cardList.add(activeCard);
this.cardList.add(activeCard + 100);
}
}
this.huxiTotal = 0;
this.pair_count = 0;
this.opCardList.clear();
// 1 2 2
if (CardUtil.cardNum(activeCard, this.cardList) >= 2
&& CardUtil.cardNum(activeCard - 100, this.cardList) >= 1) {
CardUtil.removeCard(this.cardList, activeCard, 2);
CardUtil.removeCard(this.cardList, activeCard - 100, 1);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, activeCard, activeCard, activeCard - 100, 0));
if (tryWin(player, pair_count)) {
if (player.huXi + huxiTotal == 20) {
return true;
}
} else {
this.cardList.add(activeCard);
this.cardList.add(activeCard);
this.cardList.add(activeCard - 100);
}
}
}
return false;
}
public boolean huka30(EXPlayer player, int tikongCount) {
List<Integer> cardList = new ArrayList<Integer>();
cardList.addAll(this.cardList);
// if (this.tryWin(player, pair_count)) {
// logger.info("30胡卡------------:" + (player.huXi + huxiTotal));
// }
// if (player.huXi + huxiTotal < 30) {
// return false;
// }
this.opCardList.clear();
// this.cardList.addAll(cardList);
// this.huxiTotal=0;
// this.pair_count=0;
if (activeCard == 0)
activeCard = ((Integer) cardList.get(0)).intValue();
for (int i = 0; i < cardList.size(); i++) {
this.huxiTotal = 0;
this.pair_count = 0;
this.opCardList.clear();
activeCard = ((Integer) cardList.get(0)).intValue();
// 1 1 2
if (CardUtil.cardNum(activeCard, this.cardList) >= 1 && CardUtil.cardNum(activeCard + 100, cardList) >= 2) {
CardUtil.removeCard(this.cardList, activeCard, 1);
CardUtil.removeCard(this.cardList, activeCard + 100, 2);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, activeCard, activeCard + 100, activeCard + 100, 0));
if (tryWin(player, pair_count)) {
if (player.huXi + huxiTotal == 30) {
return true;
}
} else {
this.cardList.add(activeCard);
this.cardList.add(activeCard + 100);
this.cardList.add(activeCard + 100);
}
}
this.huxiTotal = 0;
this.pair_count = 0;
this.opCardList.clear();
activeCard = ((Integer) cardList.get(0)).intValue();
// 1 1 2
if (CardUtil.cardNum(activeCard, this.cardList) >= 1 && CardUtil.cardNum(activeCard - 100, cardList) >= 2) {
CardUtil.removeCard(this.cardList, activeCard, 1);
CardUtil.removeCard(this.cardList, activeCard - 100, 2);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, activeCard, activeCard - 100, activeCard - 100, 0));
if (tryWin(player, pair_count)) {
if (player.huXi + huxiTotal == 30) {
return true;
}
} else {
this.cardList.add(activeCard);
this.cardList.add(activeCard - 100);
this.cardList.add(activeCard - 100);
}
}
this.huxiTotal = 0;
this.pair_count = 0;
this.opCardList.clear();
// 1 2 2
if (CardUtil.cardNum(activeCard, this.cardList) >= 2
&& CardUtil.cardNum(activeCard + 100, this.cardList) >= 1) {
CardUtil.removeCard(this.cardList, activeCard, 2);
CardUtil.removeCard(this.cardList, activeCard + 100, 1);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, activeCard, activeCard, activeCard + 100, 0));
if (tryWin(player, pair_count)) {
if (player.huXi + huxiTotal == 30) {
return true;
}
} else {
this.cardList.add(activeCard);
this.cardList.add(activeCard);
this.cardList.add(activeCard + 100);
}
}
this.huxiTotal = 0;
this.pair_count = 0;
this.opCardList.clear();
// 1 2 2
if (CardUtil.cardNum(activeCard, this.cardList) >= 2
&& CardUtil.cardNum(activeCard - 100, this.cardList) >= 1) {
CardUtil.removeCard(this.cardList, activeCard, 2);
CardUtil.removeCard(this.cardList, activeCard - 100, 1);
opCardList.add(new OpCard(RuleWeight.TYPE_CHOW, activeCard, activeCard, activeCard - 100, 0));
if (tryWin(player, pair_count)) {
if (player.huXi + huxiTotal == 30) {
return true;
}
} else {
this.cardList.add(activeCard);
this.cardList.add(activeCard);
this.cardList.add(activeCard - 100);
}
}
}
return false;
}
public static void main(String[] args) throws ClassNotFoundException, IOException {
// Map<String, String> redis_room_map = new HashMap<>();
// redis_room_map.put("id", "749322");
// redis_room_map.put("game", "17");
// redis_room_map.put("maxPlayers", "2");
// redis_room_map.put("players", "[168168,791309]");
// redis_room_map.put("group", "532196");
// redis_room_map.put("owner", "{user}:123456");
// redis_room_map.put("create_time", "1749539730");
// redis_room_map.put("options",
// "{\"tuoguan_active_time\":0,\"daniao\":2,\"pid\":17,\"shoupai\":0,\"honghu\":true,\"yikuaibian\":true,\"tiandihu\":true,\"isvip\":0,\"mode\":1,\"hpData\":{\"limitloot\":0,\"limitInRoom\":0,\"type\":1,\"times\":3000,\"maxRound\":100,\"xipai_rewardType\":3,\"limitPump\":0,\"limitPlay\":1000,\"robot_room\":0,\"basePump\":0,\"anchou_rewardType\":3,\"tex_times_room\":1000,\"rewards_list\":[{\"UpperLimitReward\":0,\"pumpProportion\":0,\"UpperLimit\":0}]},\"kahu\":true,\"maxRound\":100,\"mingwei\":true,\"hp_no_limit\":0,\"isNonnegative\":1,\"wuhu\":true,\"game_id\":17,\"maxPlayers\":2,\"hunum\":0,\"fengding\":1,\"haidiliao\":false,\"tuoguan\":false,\"isHidden\":0,\"xi_pai\":true,\"yidianhong\":true,\"shisanhong\":true,\"tuoguan_active_timeIndex\":1,\"tuoguan_result_type\":0,\"xi_pai_score\":1000,\"choupai\":0}");
// redis_room_map.put("cache_ver", "12345");
// redis_room_map.put("times", "100");
// redis_room_map.put("pay", "2");
// redis_room_map.put("payer", "2");
// redis_room_map.put("AA", "1");
// redis_room_map.put("agent", "true");
// redis_room_map.put("status", "1");
// redis_room_map.put("isActive", "true");
// redis_room_map.put("opt", "1");
// redis_room_map.put("round", "1");
// redis_room_map.put("gpid", "17");
// redis_room_map.put("open", "0");
// redis_room_map.put("kick_time", "30");
// redis_room_map.put("seats", "[1,2]");
// EXRoom room = new EXRoom("749322", redis_room_map);
EXPlayer player = new EXPlayer(168168, null, "ddddddd");
List<Integer> list = new ArrayList<>();
String str = "102, 102, 103, 103, 104, 104, 203, 201, 201, 202, ";
for (String card : str.split(", ")) {
list.add(Integer.valueOf(Integer.parseInt(card)));
}
player.cardInhand = list;
List<OpCard> op = new ArrayList<>();
OpCard opCard = new OpCard(3, 105, 105, 105, 1);
op.add(opCard);
OpCard opCard1 = new OpCard(7, 208, 208, 208, 12);
op.add(opCard1);
// OpCard opCard2 = new OpCard(3, 209, 209, 209, 6);
// op.add(opCard2);
OpCard opCard3 = new OpCard(3, 106, 106, 106, 1);
op.add(opCard3);
int tikongCount = 0;
for (int i = 0; i < op.size(); i++) {
if (op.get(i).type == 6 || op.get(i).type == 7) {
tikongCount += 1;
}
}
player.opCardList.addAll(op);
player.tiCount = 0;
player.kongCount = 1;
int huxiTotal = 0;
for (int i = 0; i < player.opCardList.size(); i++) {
OpCard opCards = player.opCardList.get(i);
huxiTotal += opCards.huXi;
}
player.huXi = huxiTotal;
System.out.println("吃碰跑提畏胡息:" + huxiTotal);
WinCard win = new WinCard(player.cardInhand, 201);
System.out.println("是否能胡:" + win.tryWin(player));
System.out.println("正常胡息:" + (player.huXi));
// MingtangCheck mingtangCheck = new MingtangCheck(list, 201);
//// 检测是否能胡
// boolean iswin = mingtangCheck.tryWin(player, 1);
// System.out.println("是否能胡:" + iswin);
// System.out.println("正常胡息:" + (mingtangCheck.huxiTotal + huxiTotal));
// 检测是否一块匾
// MingtangCheck mingtangCheck1 = new MingtangCheck(list, 201);
// boolean yikuaibian = mingtangCheck1.yikuaibian(player);
// System.out.println("一块匾:" + yikuaibian);
// System.out.println("一块匾计算增加胡息:" + mingtangCheck1.huxiTotal);
// System.out.println("一块匾对应胡息:" + mingtangCheck1.huxiTotal);
// 检测是否20胡卡
MingtangCheck mingtangCheck20 = new MingtangCheck(list, 201);
boolean huka20 = mingtangCheck20.huka20(player, 2);
System.out.println("20胡卡:" + huka20);
System.out.println("20胡卡计算增加胡息:" + mingtangCheck20.huxiTotal);
System.out.println("20胡卡对应胡息:" + (mingtangCheck20.huxiTotal + huxiTotal));
// // 检测是否30胡卡
// MingtangCheck mingtangCheck30 = new MingtangCheck(list, 101);
// boolean huka30 = mingtangCheck30.huka30(player, 1);
// System.out.println("30胡卡:" + huka30);
// System.out.println("30胡卡计算增加胡息:" + mingtangCheck30.huxiTotal);
// System.out.println("30胡卡对应胡息:" + (mingtangCheck30.huxiTotal + huxiTotal));
// System.out.println("30胡卡对应胡息:" + (mingtangCheck30.huxiList.toString()));
// System.out.println("30胡卡对应op:" + (mingtangCheck30.opCardList.size()));
// for(int i=0;i<mingtangCheck30.opCardList.size();i++) {
// System.out.println(mingtangCheck30.opCardList.get(i).card1+"-"+mingtangCheck30.opCardList.get(i).card2+"-"+mingtangCheck30.opCardList.get(i).card3);
//
// }
}
}

View File

@ -1,5 +1,8 @@
package extend.zp.uitl; package extend.zp.uitl;
import java.util.ArrayList;
import java.util.List;
import com.taurus.core.util.Logger; import com.taurus.core.util.Logger;
import extend.zp.EXPlayer; import extend.zp.EXPlayer;
import extend.zp.EXRoom; import extend.zp.EXRoom;
@ -31,13 +34,101 @@ public class Paixing {
// } // }
// logger.info("当前行动的牌:" + room.activeCard); // logger.info("当前行动的牌:" + room.activeCard);
// logger.info("用户的牌:" + player.cardInhand); // logger.info("用户的牌:" + player.cardInhand);
// logger.info("用户当前胡息:" + player.huXi);
// if(room.activeCard!=0) { // if(room.activeCard!=0) {
// player.cardInhand.add(room.activeCard); // player.cardInhand.add(room.activeCard);
// } // }
// 新增代码1111111111
List<Integer> list = new ArrayList<>();
for (int card : player.cardInhand) {
list.add(card);
}
//
// 处理30胡卡
MingtangCheck mingtangCheck30 = new MingtangCheck(list, drawCard);
for (int i = 0; i < player.opCardList.size(); i++) {
OpCard opCards = player.opCardList.get(i);
mingtangCheck30.huxiTotal += opCards.huXi;
}
boolean huka30 = mingtangCheck30.huka30(player, player.tiCount + player.kongCount);
if (huka30) {
logger.info("30胡卡:" + huka30);
player.huXi = 30;
player.total_huxi = 30;
player.handCard.clear();
player.opCardList.addAll(mingtangCheck30.opCardList);
return true;
}
// 处理20胡卡
MingtangCheck mingtangCheck20 = new MingtangCheck(list, drawCard);
boolean huka20 = mingtangCheck20.huka20(player, player.tiCount + player.kongCount);
mingtangCheck20.huxiTotal = 0;
for (int i = 0; i < player.opCardList.size(); i++) {
OpCard opCards = player.opCardList.get(i);
// logger.info("----------计算当前杠碰吃胡息:" + opCards.card1 + "---" + opCards.card2 + "---" + opCards.card3 + "---"
// + opCards.huXi);
mingtangCheck20.huxiTotal += opCards.huXi;
}
if (huka20 && mingtangCheck20.huxiTotal >= 15) {
logger.info("20胡卡:" + huka20);
player.huXi = 20;
player.total_huxi = 20;
player.handCard.clear();
player.opCardList.addAll(mingtangCheck20.opCardList);
// for (int i = 0; i < mingtangCheck20.opCardList.size(); i++) {
// logger.info(mingtangCheck20.opCardList.get(i).card1 + "---" + mingtangCheck20.opCardList.get(i).card2
// + "---" + mingtangCheck20.opCardList.get(i).card3 + "---"
// + mingtangCheck20.opCardList.get(i).huXi);
// }
return true;
}
// 处理一块扁
MingtangCheck mingtangCheck1 = new MingtangCheck(list, drawCard);
// logger.info("进入一块匾之前");
//
// logger.info("player:"+player.playerid+"---"+player.cardInhand+"--"+player.opCardList.size()+"---摸到的牌:"+drawCard);
// for (int i = 0; i < player.opCardList.size(); i++) {
// logger.info("已存在的opCard:"+player.opCardList.get(i).card1 + "---" + player.opCardList.get(i).card2
// + "---" + player.opCardList.get(i).card3 + "---"
// + player.opCardList.get(i).huXi);
// }
// 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;
}
// logger.info("player.huXi:" + player.huXi);
// logger.info("player.cardInhand:" + player.cardInhand);
// 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) {
// 新增代码1111111111
if (player.huXi >= 15) { if (player.huXi >= 15) {
isWin = true; isWin = true;
} }
@ -132,6 +223,7 @@ public class Paixing {
} }
} }
logger.info("最后胡息:" + player.huXi);
return isWin; return isWin;
} }

View File

@ -1,24 +1,31 @@
package extend.zp.uitl; package extend.zp.uitl;
import java.io.IOException; import com.game.data.Room;
import java.util.*;
import com.taurus.core.util.Logger; import com.taurus.core.util.Logger;
import extend.zp.EXPlayer; import extend.zp.EXPlayer;
import extend.zp.EXRoom; import extend.zp.EXRoom;
import extend.zp.OpCard; import extend.zp.OpCard;
import extend.zp.RuleWeight; import java.io.IOException;
import extend.zp.player.rulestate.PRChi; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
public class WinCard { public class WinCard {
public int pair_count; public int pair_count;
public int long_count; public int long_count;
public Stack<List<Integer>> stack; public Stack<List<Integer>> stack;
public Stack<Integer> stackHuxi; public Stack<Integer> stackHuxi;
public List<Integer> cardList; public List<Integer> cardList;
public static final Logger logger = Logger.getLogger(WinCard.class); public static final Logger logger = Logger.getLogger(WinCard.class);
public boolean activeCardIsUse = false;
private void push(List<Integer> cardGroup) { private void push(List<Integer> cardGroup) {
this.stack.push(cardGroup); this.stack.push(cardGroup);
@ -26,112 +33,103 @@ public class WinCard {
private void rollBack() { private void rollBack() {
List<Integer> cardGroup = this.stack.pop(); List<Integer> cardGroup = this.stack.pop();
for (Integer card : cardGroup) { for (Integer card : cardGroup)
this.cardList.add(card); this.cardList.add(card);
}
Collections.sort(this.cardList); Collections.sort(this.cardList);
} }
boolean tryKezi(int card, EXPlayer player) { boolean tryKezi(int card, EXPlayer player) {
if (player.getRoom().activeCard != 0) { if ((player.getRoom()).activeCard != 0)
card = player.getRoom().activeCard; card = (player.getRoom()).activeCard;
}
// logger.info("当前牌数量:" + CardUtil.cardNum(card, this.cardList) + "--" + card);
if (CardUtil.cardNum(card, this.cardList) >= 3) { if (CardUtil.cardNum(card, this.cardList) >= 3) {
CardUtil.removeCard(this.cardList, card, CardUtil.cardNum(card, this.cardList)); CardUtil.removeCard(this.cardList, card, CardUtil.cardNum(card, this.cardList));
List<Integer> cardGroup = new ArrayList<Integer>(); List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
this.push(cardGroup); push(cardGroup);
int huXi = 0; int huXi = 0;
if (player.getRoom().isTianHu && card == player.getRoom().drawCard if ((player.getRoom()).isTianHu && card == (player.getRoom()).drawCard
&& player.getRoom().bankerSeat == player.seat) { && (player.getRoom()).bankerSeat == player.seat) {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, card); huXi = Paixing.caclHuxi(3, card);
} else { } else {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_PONG, card); huXi = Paixing.caclHuxi(2, card);
} }
// logger.info("计算胡息:" + huXi + "--" + card);
player.huXi += huXi; player.huXi += huXi;
logger.info("总胡息:" + player.huXi); this.stackHuxi.push(Integer.valueOf(huXi));
this.stackHuxi.push(huXi);
return true; return true;
} }
return false; return false;
} }
private boolean tryShunzi1(int card, EXPlayer player) { private boolean tryShunzi1(int card, EXPlayer player) {
if (card < 200 && card % 100 > 8) { if (card < 200 && card % 100 > 8)
return false; return false;
}
if (CardUtil.cardNum(card + 1, this.cardList) > 0 && CardUtil.cardNum(card + 2, this.cardList) > 0) { if (CardUtil.cardNum(card + 1, this.cardList) > 0 && CardUtil.cardNum(card + 2, this.cardList) > 0) {
CardUtil.removeCard(this.cardList, card, 1); CardUtil.removeCard(this.cardList, card, 1);
CardUtil.removeCard(this.cardList, card + 1, 1); CardUtil.removeCard(this.cardList, card + 1, 1);
CardUtil.removeCard(this.cardList, card + 2, 1); CardUtil.removeCard(this.cardList, card + 2, 1);
List<Integer> cardGroup = new ArrayList<Integer>(); List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card + 1); cardGroup.add(Integer.valueOf(card + 1));
cardGroup.add(card + 2); cardGroup.add(Integer.valueOf(card + 2));
this.push(cardGroup); push(cardGroup);
int huXi = 0; int huXi = 0;
if (card % 100 == 1) { if (card % 100 == 1) {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_CHOW, card); huXi = Paixing.caclHuxi(14, card);
player.huXi += huXi; player.huXi += huXi;
} }
this.stackHuxi.push(huXi); this.stackHuxi.push(Integer.valueOf(huXi));
return true; return true;
} }
return false; return false;
} }
private boolean tryShunzi2(int card) { private boolean tryShunzi2(int card) {
if (CardUtil.cardType(card) == RuleWeight.SMALL_CARD) { if (CardUtil.cardType(card) == 1) {
if (CardUtil.cardNum(card + 100, this.cardList) >= 1 && CardUtil.cardNum(card, this.cardList) >= 2) { if (CardUtil.cardNum(card + 100, this.cardList) >= 1 && CardUtil.cardNum(card, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 2); CardUtil.removeCard(this.cardList, card, 2);
CardUtil.removeCard(this.cardList, card + 100, 1); CardUtil.removeCard(this.cardList, card + 100, 1);
List<Integer> cardGroup = new ArrayList<Integer>(); List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card + 100); cardGroup.add(Integer.valueOf(card + 100));
this.push(cardGroup); push(cardGroup);
this.stackHuxi.push(0); this.stackHuxi.push(Integer.valueOf(0));
return true; return true;
} }
if (CardUtil.cardNum(card + 100, this.cardList) >= 2) { if (CardUtil.cardNum(card + 100, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 1); CardUtil.removeCard(this.cardList, card, 1);
CardUtil.removeCard(this.cardList, card + 100, 2); CardUtil.removeCard(this.cardList, card + 100, 2);
List<Integer> cardGroup = new ArrayList<Integer>(); List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card + 100); cardGroup.add(Integer.valueOf(card + 100));
cardGroup.add(card + 100); cardGroup.add(Integer.valueOf(card + 100));
this.push(cardGroup); push(cardGroup);
this.stackHuxi.push(0); this.stackHuxi.push(Integer.valueOf(0));
return true; return true;
} }
} else { } else {
if (CardUtil.cardNum(card - 100, this.cardList) >= 1 && CardUtil.cardNum(card, this.cardList) >= 2) { if (CardUtil.cardNum(card - 100, this.cardList) >= 1 && CardUtil.cardNum(card, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 2); CardUtil.removeCard(this.cardList, card, 2);
CardUtil.removeCard(this.cardList, card - 100, 1); CardUtil.removeCard(this.cardList, card - 100, 1);
List<Integer> cardGroup = new ArrayList<Integer>(); List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card - 100); cardGroup.add(Integer.valueOf(card - 100));
this.push(cardGroup); push(cardGroup);
this.stackHuxi.push(0); this.stackHuxi.push(Integer.valueOf(0));
return true; return true;
} }
if (CardUtil.cardNum(card - 100, this.cardList) >= 2) { if (CardUtil.cardNum(card - 100, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 1); CardUtil.removeCard(this.cardList, card, 1);
CardUtil.removeCard(this.cardList, card - 100, 2); CardUtil.removeCard(this.cardList, card - 100, 2);
List<Integer> cardGroup = new ArrayList<Integer>(); List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card - 100); cardGroup.add(Integer.valueOf(card - 100));
cardGroup.add(card - 100); cardGroup.add(Integer.valueOf(card - 100));
this.push(cardGroup); push(cardGroup);
this.stackHuxi.push(0); this.stackHuxi.push(Integer.valueOf(0));
return true; return true;
} }
} }
@ -139,225 +137,186 @@ public class WinCard {
} }
private boolean tryShunzi3(int card, EXPlayer player) { private boolean tryShunzi3(int card, EXPlayer player) {
if (card % 100 == 2) { if (card % 100 == 2 && CardUtil.cardNum(card + 5, this.cardList) > 0
if (CardUtil.cardNum(card + 5, this.cardList) > 0 && CardUtil.cardNum(card + 8, this.cardList) > 0) { && CardUtil.cardNum(card + 8, this.cardList) > 0) {
CardUtil.removeCard(this.cardList, card, 1); CardUtil.removeCard(this.cardList, card, 1);
CardUtil.removeCard(this.cardList, card + 5, 1); CardUtil.removeCard(this.cardList, card + 5, 1);
CardUtil.removeCard(this.cardList, card + 8, 1); CardUtil.removeCard(this.cardList, card + 8, 1);
List<Integer> cardGroup = new ArrayList<Integer>(); List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card + 5); cardGroup.add(Integer.valueOf(card + 5));
cardGroup.add(card + 8); cardGroup.add(Integer.valueOf(card + 8));
this.push(cardGroup); push(cardGroup);
int huXi = Paixing.caclHuxi(14, card);
int huXi = Paixing.caclHuxi(RuleWeight.TYPE_CHOW, card); player.huXi += huXi;
player.huXi += huXi; this.stackHuxi.push(Integer.valueOf(huXi));
this.stackHuxi.push(huXi); return true;
return true;
}
} }
return false; return false;
} }
private boolean tryPair(int card) { private boolean tryPair(int card) {
if (this.pair_count > 0) { if (this.pair_count > 0)
return false; return false;
}
if (CardUtil.cardNum(card, this.cardList) >= 2) { if (CardUtil.cardNum(card, this.cardList) >= 2) {
CardUtil.removeCard(this.cardList, card, 2); CardUtil.removeCard(this.cardList, card, 2);
List<Integer> cardGroup = new ArrayList<Integer>(); List<Integer> cardGroup = new ArrayList<>();
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
cardGroup.add(card); cardGroup.add(Integer.valueOf(card));
this.push(cardGroup); push(cardGroup);
this.pair_count = 1; this.pair_count = 1;
this.stackHuxi.push(0); this.stackHuxi.push(Integer.valueOf(0));
return true; return true;
} }
return false; return false;
} }
public boolean tryWin(EXPlayer player) { public boolean tryWin(EXPlayer player) {
if (this.cardList.size() == 0) { if (this.cardList.size() == 0) {
if (player.tiCount + player.kongCount > 0) { if (player.tiCount + player.kongCount > 0) {
if (this.pair_count == 1) { if (this.pair_count == 1) {
return true; return true;
} }
return false; return false;
} else {
if (this.pair_count > 0) {
return false;
}
return true;
} }
} if (this.pair_count > 0) {
return false;
}
return true;
}
int activeCard = 0; int activeCard = 0;
for (int card : this.cardList) { for (Iterator<Integer> iterator = this.cardList.iterator(); iterator.hasNext();) {
int card = ((Integer) iterator.next()).intValue();
if (card == 201 || card == 202) { if (card == 201 || card == 202) {
activeCard = card; activeCard = card;
break; break;
} }
} }
if (activeCardIsUse == false && player.seat!=player.getRoom().activeSeat) { if (activeCard == 0)
activeCard = player.getRoom().activeCard; activeCard = ((Integer) this.cardList.get(0)).intValue();
activeCardIsUse = true;
}
if (activeCard == 0) {
activeCard = this.cardList.get(0);
}
if (activeCard % 100 == 1) { if (activeCard % 100 == 1) {
if (tryShunzi1(activeCard, player)) { if (tryShunzi1(activeCard, player)) {
if (tryWin(player)) { if (tryWin(player))
return true; return true;
} rollBack();
this.rollBack(); int huXi = ((Integer) this.stackHuxi.pop()).intValue();
int huXi = this.stackHuxi.pop(); if (huXi > 0)
if (huXi > 0) {
player.huXi -= huXi; player.huXi -= huXi;
}
}
if (tryKezi(activeCard, player)) {
if (tryWin(player)) {
return true;
}
this.rollBack();
int huXi = this.stackHuxi.pop();
if (huXi > 0) {
player.huXi -= huXi;
}
} }
if (player.tiCount + player.kongCount > 0) { if (tryKezi(activeCard, player)) {
if (tryPair(activeCard)) { if (tryWin(player))
if (tryWin(player)) { return true;
return true; rollBack();
} int huXi = ((Integer) this.stackHuxi.pop()).intValue();
this.pair_count = 0; if (huXi > 0)
this.rollBack(); player.huXi -= huXi;
this.stackHuxi.pop(); }
} if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
if (tryWin(player))
return true;
this.pair_count = 0;
rollBack();
this.stackHuxi.pop();
} }
if (tryShunzi2(activeCard)) { if (tryShunzi2(activeCard)) {
if (tryWin(player)) { if (tryWin(player))
return true; return true;
} rollBack();
this.rollBack();
this.stackHuxi.pop(); this.stackHuxi.pop();
} }
} else if (activeCard % 100 == 2) { } else if (activeCard % 100 == 2) {
// logger.info("当前剩余牌----"+this.cardList);
// logger.info("当前行动的牌----"+activeCard);
if (tryShunzi3(activeCard, player)) { if (tryShunzi3(activeCard, player)) {
// logger.info("吃牌后当前剩余牌----"+this.cardList); if (tryWin(player))
if (tryWin(player)) {
return true; return true;
} rollBack();
this.rollBack(); int huXi = ((Integer) this.stackHuxi.pop()).intValue();
int huXi = this.stackHuxi.pop(); if (huXi > 0)
if (huXi > 0) {
player.huXi -= huXi; player.huXi -= huXi;
}
} }
if (tryKezi(activeCard, player)) { if (tryKezi(activeCard, player)) {
if (tryWin(player)) { if (tryWin(player))
return true; return true;
} rollBack();
this.rollBack(); int huXi = ((Integer) this.stackHuxi.pop()).intValue();
int huXi = this.stackHuxi.pop(); if (huXi > 0)
if (huXi > 0) {
player.huXi -= huXi; player.huXi -= huXi;
}
} }
if (player.tiCount + player.kongCount > 0) { if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
if (tryPair(activeCard)) { if (tryWin(player))
if (tryWin(player)) { return true;
return true; this.pair_count = 0;
} rollBack();
this.pair_count = 0; this.stackHuxi.pop();
this.rollBack();
this.stackHuxi.pop();
}
} }
if (tryShunzi1(activeCard, player)) { if (tryShunzi1(activeCard, player)) {
if (tryWin(player)) { if (tryWin(player))
return true; return true;
} rollBack();
this.rollBack(); int huXi = ((Integer) this.stackHuxi.pop()).intValue();
int huXi = this.stackHuxi.pop(); if (huXi > 0)
if (huXi > 0) {
player.huXi -= huXi; player.huXi -= huXi;
}
} }
if (tryShunzi2(activeCard)) { if (tryShunzi2(activeCard)) {
if (tryWin(player)) { if (tryWin(player))
return true; return true;
} rollBack();
this.rollBack();
this.stackHuxi.pop(); this.stackHuxi.pop();
} }
} else { } else {
if (tryKezi(activeCard, player)) { if (tryKezi(activeCard, player)) {
boolean canWin = tryWin(player); boolean canWin = tryWin(player);
if (canWin) { if (canWin)
return true; return true;
} rollBack();
this.rollBack(); int huXi = ((Integer) this.stackHuxi.pop()).intValue();
int huXi = this.stackHuxi.pop(); if (huXi > 0)
if (huXi > 0) {
player.huXi -= huXi; player.huXi -= huXi;
}
} }
if (player.tiCount + player.kongCount > 0) { if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
if (tryPair(activeCard)) { if (tryWin(player))
if (tryWin(player)) { return true;
return true; this.pair_count = 0;
} rollBack();
this.pair_count = 0; this.stackHuxi.pop();
this.rollBack();
this.stackHuxi.pop();
}
} }
if (tryShunzi1(activeCard, player)) { if (tryShunzi1(activeCard, player)) {
if (tryWin(player)) { if (tryWin(player))
return true; return true;
} rollBack();
this.rollBack(); int huXi = ((Integer) this.stackHuxi.pop()).intValue();
int huXi = this.stackHuxi.pop(); if (huXi > 0)
if (huXi > 0) {
player.huXi -= huXi; player.huXi -= huXi;
}
} }
if (tryShunzi2(activeCard)) { if (tryShunzi2(activeCard)) {
if (tryWin(player)) { if (tryWin(player))
return true; return true;
} rollBack();
this.rollBack();
this.stackHuxi.pop(); this.stackHuxi.pop();
} }
} }
return false; return false;
} }
public WinCard(List<Integer> cardInhand, int addCard) { public WinCard(List<Integer> cardInhand, int addCard) {
this.stack = new Stack<List<Integer>>(); this.stack = new Stack<>();
this.stackHuxi = new Stack<Integer>(); this.stackHuxi = new Stack<>();
this.cardList = new ArrayList<Integer>(); this.cardList = new ArrayList<>();
this.cardList.addAll(cardInhand); this.cardList.addAll(cardInhand);
if (addCard > 0) { if (addCard > 0)
this.cardList.add(addCard); this.cardList.add(Integer.valueOf(addCard));
}
Collections.sort(this.cardList); Collections.sort(this.cardList);
} }
public static void main(String[] args) throws ClassNotFoundException, IOException { public static void main(String[] args) throws ClassNotFoundException, IOException {
Map<String, String> redis_room_map = new HashMap<>(); Map<String, String> redis_room_map = new HashMap<>();
redis_room_map.put("id", "749322"); redis_room_map.put("id", "749322");
redis_room_map.put("game", "17"); redis_room_map.put("game", "17");
redis_room_map.put("maxPlayers", "2"); redis_room_map.put("maxPlayers", "2");
@ -381,19 +340,14 @@ public class WinCard {
redis_room_map.put("open", "0"); redis_room_map.put("open", "0");
redis_room_map.put("kick_time", "30"); redis_room_map.put("kick_time", "30");
redis_room_map.put("seats", "[1,2]"); redis_room_map.put("seats", "[1,2]");
;
EXRoom room = new EXRoom("749322", redis_room_map); EXRoom room = new EXRoom("749322", redis_room_map);
EXPlayer player = new EXPlayer(168168, room, "ddddddd"); EXPlayer player = new EXPlayer(168168, (Room) room, "ddddddd");
List<Integer> list = new ArrayList<>(); List<Integer> list = new ArrayList<>();
String str = "106"; String str = "106";
for (String card : str.split(", ")) { for (String card : str.split(", "))
list.add(Integer.parseInt(card)); list.add(Integer.valueOf(Integer.parseInt(card)));
}
player.cardInhand = list; player.cardInhand = list;
List<OpCard> op = new ArrayList<>();
List<OpCard> op = new ArrayList<OpCard>();
OpCard opCard = new OpCard(3, 102, 102, 102, 9); OpCard opCard = new OpCard(3, 102, 102, 102, 9);
op.add(opCard); op.add(opCard);
WinCard win = new WinCard(list, 106); WinCard win = new WinCard(list, 106);
@ -402,16 +356,13 @@ public class WinCard {
int tryKeziBefore(int card, EXPlayer player) { int tryKeziBefore(int card, EXPlayer player) {
int huXi = 0; int huXi = 0;
if (CardUtil.cardNum(card, this.cardList) >= 3) { if (CardUtil.cardNum(card, this.cardList) >= 3)
if (player.getRoom().isTianHu && card == player.getRoom().drawCard if ((player.getRoom()).isTianHu && card == (player.getRoom()).drawCard
&& player.getRoom().bankerSeat == player.seat) { && (player.getRoom()).bankerSeat == player.seat) {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, card); huXi = Paixing.caclHuxi(3, card);
} else { } else {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_PONG, card); huXi = Paixing.caclHuxi(2, card);
} }
}
return huXi; return huXi;
} }
} }

View File

@ -227,6 +227,7 @@ public class EXRoom extends Room {
else else
{ {
List<IRuleBase> paoList = new ArrayList<IRuleBase>(); List<IRuleBase> paoList = new ArrayList<IRuleBase>();
paoList.add(new RuleWin());
EXMainServer.playerRuleMgr.ruleMap.put(PlayerRuleManager.TI_RULE, paoList); EXMainServer.playerRuleMgr.ruleMap.put(PlayerRuleManager.TI_RULE, paoList);
List<IRuleBase> drawRuleList = new ArrayList<IRuleBase>(); List<IRuleBase> drawRuleList = new ArrayList<IRuleBase>();