放炮罚增加名堂优先判断
parent
fb14f9bb51
commit
9693851bd2
|
|
@ -303,6 +303,7 @@ public class GameController implements IController {
|
|||
}
|
||||
}
|
||||
player = MainServer.instance.newPlayer(playerid, owner, session_key);
|
||||
//这里判断了加入房间后的最高限制分,需要调整代码
|
||||
if (player.room.upper_limit_hp == 0 || player.room.upper_limit_hp > cur_hp) {
|
||||
player.room.upper_limit_hp = cur_hp;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,8 +170,11 @@ public class RoomCard {
|
|||
int indexhh = this.cardList.indexOf(Config.HONGZHONG);
|
||||
// Global.logger.info("hongzhongid:"+indexhh+"card"+this.cardList);
|
||||
dealCards.add(Config.HONGZHONG);
|
||||
if(indexhh!=0) {
|
||||
this.cardList.remove(indexhh);
|
||||
Collections.shuffle(this.cardList);
|
||||
|
||||
}
|
||||
}
|
||||
for (int index = 0; index < 13 - flag; index++) {
|
||||
dealCards.add(this.pop());
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ public class EXRoomStartGameState extends StateBase<EXRoom> {
|
|||
// player.initSeat();
|
||||
// }
|
||||
owner.startGame();
|
||||
|
||||
//游戏开始前重新计算最高限制分------------------------
|
||||
this.toNextState(owner);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,10 @@ public class EXRoom extends Room {
|
|||
public RoomCard card;
|
||||
|
||||
public int activeCard;
|
||||
public int checkPaoActiveCard;
|
||||
public int checkPaoActiveSeat;
|
||||
|
||||
|
||||
public int drawCard;
|
||||
public int currenDiscardSeat;
|
||||
public int lastDiscardSeat;
|
||||
|
|
@ -86,6 +90,8 @@ public class EXRoom extends Room {
|
|||
|
||||
public boolean jiesanflag = false;
|
||||
|
||||
public Set<Integer> broadCard =new HashSet<Integer>();
|
||||
|
||||
public EXRoom(String roomid, Map<String, String> redis_room_map) {
|
||||
super(roomid, redis_room_map);
|
||||
card = new RoomCard(this);
|
||||
|
|
@ -492,7 +498,7 @@ public class EXRoom extends Room {
|
|||
player.mingtangList.clear();
|
||||
player.winFan = 1;
|
||||
int score = 0;
|
||||
|
||||
// logger.info("是否听胡:"+this.isTianHu+"---"+player.playerid);
|
||||
if (this.isTianHu) {
|
||||
// 天胡
|
||||
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().activeCard == player.getRoom().roomoutcardlist.get(0)) {
|
||||
if (player.getRoom().roomoutcardlist.size() == 1 && player.outcardList.size() == 0 && player.getRoom().card.cardList.size() >=19) {
|
||||
// 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;
|
||||
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) {
|
||||
player.winFan = player.winFan * 2;
|
||||
player.mingtangList.add(new MingTang(RuleWeight.ZI_MO, 2, 2));
|
||||
|
|
@ -1342,7 +1358,7 @@ public class EXRoom extends Room {
|
|||
public void endGame() {
|
||||
// this.endflag = this.entrustTotal();
|
||||
// 如果是流局则:给庄家-10
|
||||
if (this.liuju) {
|
||||
if (this.liuju && this.card.cardList.size()==0) {
|
||||
for (Entry<Integer, Player> entry : this.playerMapById.entrySet()) {
|
||||
EXPlayer player = (EXPlayer) entry.getValue();
|
||||
if (player.seat == this.bankerSeat) {
|
||||
|
|
@ -1458,10 +1474,13 @@ public class EXRoom extends Room {
|
|||
this.weiRoomGroup.clear();
|
||||
this.roomoutcardlist.clear();
|
||||
this.paochucardlist.clear();
|
||||
this.card=new RoomCard(this);
|
||||
|
||||
this.isFanPao = false;
|
||||
this.endflag = false;
|
||||
this.fangpaosubvalue = 0;
|
||||
this.yikuaibianflag = false;
|
||||
this.broadCard.clear();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,10 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
|
||||
import com.game.Global;
|
||||
import com.taurus.core.util.Logger;
|
||||
|
||||
import extend.zp.player.rule.*;
|
||||
import extend.zp.player.rulestate.PRDiscardPaoState;
|
||||
import extend.zp.player.state.EXPlayerDisCardTipState;
|
||||
import extend.zp.player.state.EXPlayerDrawTipState;
|
||||
import extend.zp.player.state.EXPlayerTipState;
|
||||
|
|
@ -26,6 +28,7 @@ public class PlayerRuleManager {
|
|||
|
||||
public HashMap<Integer, List<IRuleBase>> ruleMap = null;
|
||||
public HashMap<Integer, EXPlayerTipState> tipMap = null;
|
||||
public static final Logger logger = Logger.getLogger(PlayerRuleManager.class);
|
||||
|
||||
public PlayerRuleManager() {
|
||||
ruleMap = new HashMap<Integer, List<IRuleBase>>();
|
||||
|
|
@ -71,15 +74,21 @@ public class PlayerRuleManager {
|
|||
ruleMap.put(PlayerRuleManager.DRAW_PAO_RULE, drawPaoList);
|
||||
|
||||
List<IRuleBase> otherDiscardList = new ArrayList<IRuleBase>();
|
||||
otherDiscardList.add(new RuleDrawWin());//放炮
|
||||
|
||||
otherDiscardList.add(new RuleDiscardPao());
|
||||
otherDiscardList.add(new RulePaoWin());
|
||||
otherDiscardList.add(new RuleDrawWin());//放炮
|
||||
|
||||
otherDiscardList.add(new RulePong());
|
||||
otherDiscardList.add(new RuleChi());
|
||||
|
||||
ruleMap.put(PlayerRuleManager.DISCARD_RULE, otherDiscardList);
|
||||
|
||||
List<IRuleBase> huList = new ArrayList<IRuleBase>();
|
||||
huList.add(new RuleWin());
|
||||
huList.add(new RuleWei());
|
||||
huList.add(new RuleWin());
|
||||
// huList.add(new RulePaoWin());
|
||||
|
||||
ruleMap.put(PlayerRuleManager.HU_RULE, huList);
|
||||
|
||||
List<IRuleBase> otherHuList = new ArrayList<IRuleBase>();
|
||||
|
|
|
|||
|
|
@ -28,12 +28,12 @@ public class RoomCard {
|
|||
public void init() {
|
||||
// this.cardList.clear();
|
||||
// this.subCardList.clear();
|
||||
// this.sanlong();
|
||||
this.sanlong();
|
||||
|
||||
this.initCard();
|
||||
this.shuffle();
|
||||
this.subCard(); //抽牌
|
||||
this.shuffle();
|
||||
// this.initCard();
|
||||
// this.shuffle();
|
||||
// this.subCard(); //抽牌
|
||||
// this.shuffle();
|
||||
|
||||
// this.testhuxi();
|
||||
|
||||
|
|
@ -63,11 +63,164 @@ public class RoomCard {
|
|||
}
|
||||
|
||||
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 list = Arrays.asList(101, 101, 103, 104, 105, 108, 109, 109, 110, 110, 202, 202, 203, 203, 205, 206, 208, 209, 209, 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 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, 104, 104, 109, 109, 110, 110, 110, 201, 201, 202, 203, 204, 204, 205, 205, 207, 208, 210);
|
||||
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 list = Arrays.asList(102, 103, 104, 105, 107, 110, 202, 202, 202, 202, 203, 203, 205, 205, 206, 206, 206, 208, 209, 210);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -14,7 +14,10 @@ public class RuleWei implements IRuleBase {
|
|||
@Override
|
||||
public boolean condition(EXPlayer player) {
|
||||
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){
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,11 +24,11 @@ public class RuleWin implements IRuleBase {
|
|||
|
||||
|
||||
EXPlayer activePlayer = (EXPlayer) player.room.playerMapBySeat.get(player.room.activeSeat);
|
||||
|
||||
if (player.getRoom().roomoutcardlist.size()==0&&player.seat!=activePlayer.seat){
|
||||
if (activePlayer == null) {
|
||||
return false;
|
||||
}
|
||||
if (activePlayer == null) {
|
||||
|
||||
if (player.getRoom().roomoutcardlist.size()==0&&player.seat!=activePlayer.seat){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,21 +1,31 @@
|
|||
package extend.zp.player.rulestate;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.game.Global;
|
||||
import com.game.data.Player;
|
||||
import com.game.player.state.PlayerWaitState;
|
||||
import com.game.state.StateBase;
|
||||
import com.taurus.core.entity.ITArray;
|
||||
import com.taurus.core.entity.TArray;
|
||||
import com.taurus.core.util.Logger;
|
||||
import com.taurus.permanent.TPServer;
|
||||
|
||||
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.EXPlayerDrawTipState;
|
||||
import extend.zp.player.state.EXPlayerTipState;
|
||||
import extend.zp.room.state.EXRoomSetpState;
|
||||
import extend.zp.tip.Tip;
|
||||
import extend.zp.uitl.Paixing;
|
||||
|
||||
import extend.zp.uitl.WinCard;
|
||||
|
||||
public class PRDiscardPaoState extends StateBase<EXPlayer> {
|
||||
public static final Logger logger = Logger.getLogger(PRDiscardPaoState.class);
|
||||
|
||||
@Override
|
||||
public void enter(EXPlayer owner) {
|
||||
owner.kongCount++;
|
||||
|
|
@ -29,8 +39,13 @@ public class PRDiscardPaoState extends StateBase<EXPlayer> {
|
|||
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];
|
||||
paoGroup[0] = card;
|
||||
paoGroup[1] = card;
|
||||
|
|
@ -38,24 +53,48 @@ public class PRDiscardPaoState extends StateBase<EXPlayer> {
|
|||
paoGroup[3] = card;
|
||||
|
||||
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();
|
||||
opcard.addInt(card);
|
||||
opcard.addInt(card);
|
||||
opcard.addInt(card);
|
||||
owner.paopai_count = owner.paopai_count + 1;
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toNextState(EXPlayer owner) {
|
||||
owner.isTingHu = false;
|
||||
// owner.isTingHu = false;
|
||||
int count = owner.tiCount + owner.kongCount;
|
||||
logger.info("跑牌次数count:" + count);
|
||||
logger.info("跑牌次数count:" + owner.playerid);
|
||||
|
||||
if (count == 1) {
|
||||
// EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
|
||||
|
|
@ -66,8 +105,20 @@ public class PRDiscardPaoState extends StateBase<EXPlayer> {
|
|||
// //owner.stateMachine.changeState(Global.getState(EXPlayerDiscardState.class));
|
||||
// } else {
|
||||
timer(owner);
|
||||
// if(owner.seat==owner.room.activeSeat) {
|
||||
// owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
|
||||
// owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
|
||||
//
|
||||
// }
|
||||
|
||||
// }
|
||||
} else {
|
||||
// if(owner.seat==owner.room.activeSeat) {
|
||||
// owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
|
||||
// owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
|
||||
//
|
||||
// }
|
||||
|
||||
timer(owner);
|
||||
}
|
||||
}
|
||||
|
|
@ -81,8 +132,12 @@ public class PRDiscardPaoState extends StateBase<EXPlayer> {
|
|||
owner.room.enqueueRunnable(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(owner.seat==owner.room.activeSeat) {
|
||||
owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
|
||||
owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.game.player.state.PlayerWaitState;
|
|||
import com.game.state.StateBase;
|
||||
import com.taurus.core.entity.ITArray;
|
||||
import com.taurus.core.entity.TArray;
|
||||
import com.taurus.core.util.Logger;
|
||||
import com.taurus.permanent.TPServer;
|
||||
|
||||
import extend.zp.EXMainServer;
|
||||
|
|
@ -21,6 +22,8 @@ import extend.zp.uitl.Paixing;
|
|||
|
||||
|
||||
public class PRDrawPaoState extends StateBase<EXPlayer> {
|
||||
public static final Logger logger = Logger.getLogger(PRDrawPaoState.class);
|
||||
|
||||
@Override
|
||||
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);
|
||||
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;
|
||||
if (count<2&&!owner.guohupao){
|
||||
EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
|
||||
|
|
@ -79,8 +90,17 @@ public class PRDrawPaoState extends StateBase<EXPlayer> {
|
|||
} else if (count == 2) {
|
||||
//二跑 不出牌
|
||||
timer(owner);
|
||||
// logger.info("来到这里自动出牌----"+owner.playerid);
|
||||
// owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
|
||||
// owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
|
||||
|
||||
} else {
|
||||
timer(owner);
|
||||
// logger.info("来到这里是干啥的----"+owner.playerid);
|
||||
|
||||
// owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
|
||||
// owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,10 +7,12 @@ import com.game.player.state.PlayerWaitState;
|
|||
import com.game.state.StateBase;
|
||||
import com.taurus.core.entity.ITArray;
|
||||
import com.taurus.core.entity.TArray;
|
||||
import com.taurus.core.util.Logger;
|
||||
import com.taurus.permanent.TPServer;
|
||||
|
||||
import extend.zp.EXMainServer;
|
||||
import extend.zp.EXPlayer;
|
||||
import extend.zp.MingTang;
|
||||
import extend.zp.OpCard;
|
||||
import extend.zp.PlayerRuleManager;
|
||||
import extend.zp.RuleWeight;
|
||||
|
|
@ -18,8 +20,9 @@ import extend.zp.player.state.EXPlayerDiscardState;
|
|||
import extend.zp.room.state.EXRoomSetpState;
|
||||
import extend.zp.uitl.Paixing;
|
||||
|
||||
|
||||
public class PRTiState extends StateBase<EXPlayer> {
|
||||
public static final Logger logger = Logger.getLogger(PRTiState.class);
|
||||
|
||||
@Override
|
||||
public void enter(EXPlayer owner) {
|
||||
owner.kongCount++;
|
||||
|
|
@ -31,7 +34,8 @@ public class PRTiState extends StateBase<EXPlayer> {
|
|||
tiGroup[3] = card;
|
||||
|
||||
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();
|
||||
opcard.addInt(card);
|
||||
|
|
@ -39,6 +43,13 @@ public class PRTiState extends StateBase<EXPlayer> {
|
|||
opcard.addInt(card);
|
||||
owner.tipai_count = owner.tipai_count + 1;
|
||||
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.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
|
||||
}
|
||||
|
|
@ -76,11 +87,14 @@ public class PRTiState extends StateBase<EXPlayer> {
|
|||
owner.room.enqueueRunnable(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(owner.seat==owner.room.activeSeat) {
|
||||
owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
|
||||
owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}, 2, TimeUnit.SECONDS);
|
||||
}, 1, TimeUnit.SECONDS);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,12 @@ public class PRWeiState extends StateBase<EXPlayer> {
|
|||
ITArray opcard = TArray.newInstance();
|
||||
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.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
package extend.zp.player.rulestate;
|
||||
|
||||
import com.game.state.StateBase;
|
||||
import com.taurus.core.util.Logger;
|
||||
|
||||
import extend.zp.EXPlayer;
|
||||
import extend.zp.EXRoom;
|
||||
|
||||
|
||||
public class PRWinState extends StateBase<EXPlayer> {
|
||||
public static final Logger logger = Logger.getLogger(PRTiState.class);
|
||||
|
||||
@Override
|
||||
public void enter(EXPlayer owner) {
|
||||
|
||||
EXRoom room = owner.getRoom();
|
||||
|
||||
if (!room.isplaying) {
|
||||
logger.info("当前房间状态异常:---"+owner.stateMachine.lastState);
|
||||
owner.stateMachine.curState = owner.stateMachine.lastState;
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import java.util.Map.Entry;
|
|||
import com.game.ActionEvent;
|
||||
import com.taurus.core.entity.ITArray;
|
||||
import com.taurus.core.entity.ITObject;
|
||||
import com.taurus.core.util.Logger;
|
||||
|
||||
import extend.zp.EXActionEvent;
|
||||
import extend.zp.EXPlayer;
|
||||
|
|
@ -13,8 +14,11 @@ import extend.zp.tip.Tip;
|
|||
|
||||
|
||||
public class EXPlayerDisCardTipState extends EXPlayerTipState {
|
||||
public static final Logger logger = Logger.getLogger(EXPlayerDisCardTipState.class);
|
||||
|
||||
@Override
|
||||
public void enter(EXPlayer owner) {
|
||||
|
||||
// TODO Auto-generated method stub
|
||||
super.enter(owner);
|
||||
owner.getRoom().tipMap.put(owner.playerid, owner.tipMgr);
|
||||
|
|
@ -26,6 +30,7 @@ public class EXPlayerDisCardTipState extends EXPlayerTipState {
|
|||
// TODO Auto-generated method stub
|
||||
super.exit(owner);
|
||||
owner.getRoom().tipMap.remove(owner.playerid);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -49,7 +54,9 @@ public class EXPlayerDisCardTipState extends EXPlayerTipState {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
owner.tipMgr.choicAction(id,null);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import java.util.concurrent.TimeUnit;
|
|||
|
||||
import com.game.Global;
|
||||
import com.game.data.Player;
|
||||
import com.game.player.state.PlayerEndState;
|
||||
import com.game.player.state.PlayerPauseState;
|
||||
import com.game.player.state.PlayerWaitState;
|
||||
import com.game.state.StateBase;
|
||||
|
|
@ -25,11 +26,22 @@ import extend.zp.room.state.EXRoomSetpState;
|
|||
import extend.zp.uitl.CardUtil;
|
||||
import extend.zp.uitl.Paixing;
|
||||
|
||||
|
||||
public class EXPlayerDrawState extends StateBase<EXPlayer> {
|
||||
Logger logger = Logger.getLogger(getClass());
|
||||
|
||||
@Override
|
||||
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();
|
||||
if (owner.getRoom().card.getCount() == 0) {
|
||||
owner.getRoom().liuju = true;
|
||||
|
|
@ -38,6 +50,7 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
|
|||
return;
|
||||
}
|
||||
room.isAllPass = false;
|
||||
// room.isFanPao = false;
|
||||
owner.getRoom().tipMap.clear();
|
||||
|
||||
if (owner.seat == room.adminSeat) {
|
||||
|
|
@ -71,15 +84,15 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
|
|||
|
||||
owner.drawCard = drawCard;
|
||||
break;
|
||||
}
|
||||
while (true);
|
||||
} 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);
|
||||
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>();
|
||||
|
|
@ -125,133 +138,87 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
|
|||
|
||||
owner.drawCard = drawCard;
|
||||
break;
|
||||
}
|
||||
while (true);
|
||||
} while (true);
|
||||
room.card.cardList.addAll(tempCardList);
|
||||
} else {
|
||||
owner.drawCard = room.card.pop();
|
||||
}
|
||||
} else {
|
||||
if (owner.black_white_status == 2) {
|
||||
Global.logger.info("dealcards playerid:" + owner.playerid + " white player:" + owner.black_white_rate);
|
||||
/*double rand = Math.random() % 100 * 100;
|
||||
if (rand <= owner.black_white_rate) {
|
||||
ArrayList<Integer> tempCardList = new ArrayList<Integer>();
|
||||
int count = 0;
|
||||
do {
|
||||
int drawCard = room.card.pop();
|
||||
|
||||
boolean flag = false;
|
||||
if (IsGoodCard((EXPlayer) owner, drawCard)) {
|
||||
flag = true;
|
||||
}
|
||||
|
||||
if (!flag) {
|
||||
if (room.card.cardList.size() > 0 && count++ <= room.card.cardList.size()) {
|
||||
tempCardList.add(drawCard);
|
||||
//Global.logger.info("not good card:" + drawCard + " for white player");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
owner.drawCard = drawCard;
|
||||
break;
|
||||
}
|
||||
while (true);
|
||||
room.card.cardList.addAll(tempCardList);
|
||||
} else {
|
||||
owner.drawCard = room.card.pop();
|
||||
}*/
|
||||
Global.logger
|
||||
.info("dealcards playerid:" + owner.playerid + " white player:" + owner.black_white_rate);
|
||||
/*
|
||||
* double rand = Math.random() % 100 * 100; if (rand <= owner.black_white_rate)
|
||||
* { ArrayList<Integer> tempCardList = new ArrayList<Integer>(); int count = 0;
|
||||
* do { int drawCard = room.card.pop();
|
||||
*
|
||||
* boolean flag = false; if (IsGoodCard((EXPlayer) owner, drawCard)) { flag =
|
||||
* true; }
|
||||
*
|
||||
* if (!flag) { if (room.card.cardList.size() > 0 && count++ <=
|
||||
* room.card.cardList.size()) { tempCardList.add(drawCard);
|
||||
* //Global.logger.info("not good card:" + drawCard + " for white player");
|
||||
* continue; } }
|
||||
*
|
||||
* owner.drawCard = drawCard; break; } while (true);
|
||||
* room.card.cardList.addAll(tempCardList); } else { owner.drawCard =
|
||||
* room.card.pop(); }
|
||||
*/
|
||||
owner.drawCard = room.card.pop();
|
||||
} 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();
|
||||
}*/
|
||||
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();
|
||||
}
|
||||
/*
|
||||
* 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++;
|
||||
int tempStep = room.step;
|
||||
// if (owner.seat == 2) {
|
||||
|
|
@ -266,21 +233,12 @@ public class EXPlayerDrawState extends StateBase<EXPlayer> {
|
|||
|
||||
int card = owner.drawCard;
|
||||
/*
|
||||
for (int i = 0; i < owner.kanGroup.size(); i++) {
|
||||
if (owner.drawCard == owner.kanGroup.get(i)[0]) {
|
||||
card = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}*/
|
||||
* for (int i = 0; i < owner.kanGroup.size(); i++) { if (owner.drawCard ==
|
||||
* owner.kanGroup.get(i)[0]) { card = 0; break; } } 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();
|
||||
otherParam.putInt("card", card);
|
||||
otherParam.putInt("seat", owner.room.activeSeat);
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,18 +5,23 @@ import java.util.Map.Entry;
|
|||
import com.game.ActionEvent;
|
||||
import com.taurus.core.entity.ITArray;
|
||||
import com.taurus.core.entity.ITObject;
|
||||
import com.taurus.core.util.Logger;
|
||||
|
||||
import extend.zp.EXActionEvent;
|
||||
import extend.zp.EXPlayer;
|
||||
import extend.zp.RuleWeight;
|
||||
import extend.zp.player.rulestate.PRDiscardPaoState;
|
||||
import extend.zp.tip.Tip;
|
||||
|
||||
|
||||
public class EXPlayerDrawTipState extends EXPlayerTipState {
|
||||
public static final Logger logger = Logger.getLogger(EXPlayerDrawTipState.class);
|
||||
|
||||
public void enter(EXPlayer owner) {
|
||||
super.enter(owner);
|
||||
////System.out.println("outs DI enter");
|
||||
owner.getRoom().tipMap.put(owner.playerid, owner.tipMgr);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -25,6 +30,7 @@ public class EXPlayerDrawTipState extends EXPlayerTipState {
|
|||
super.exit(owner);
|
||||
////System.out.println("outs DI exit");
|
||||
owner.getRoom().tipMap.remove(owner.playerid);
|
||||
|
||||
}
|
||||
|
||||
public void reload(EXPlayer owner) {
|
||||
|
|
@ -42,6 +48,8 @@ public class EXPlayerDrawTipState extends EXPlayerTipState {
|
|||
int id = netParam.getInt("id");
|
||||
ITArray biid = netParam.containsKey("biid")?netParam.getTArray("biid"):null;
|
||||
owner.tipMgr.doAction(id,biid);
|
||||
|
||||
|
||||
}else if (ActionEvent.EVENT_TIMER_AUTO.equals(cmd)) {
|
||||
int id = owner.tipMgr.getUid();
|
||||
for (Entry<Integer, Tip> entry : owner.tipMgr.tipMap.entrySet()) {
|
||||
|
|
@ -53,6 +61,7 @@ public class EXPlayerDrawTipState extends EXPlayerTipState {
|
|||
|
||||
}
|
||||
owner.tipMgr.doAction(id,null);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import com.game.player.state.PlayerPauseState;
|
|||
import com.game.state.StateBase;
|
||||
import com.taurus.core.entity.ITObject;
|
||||
import com.taurus.core.entity.TObject;
|
||||
import com.taurus.core.util.Logger;
|
||||
import com.taurus.permanent.TPServer;
|
||||
|
||||
import extend.zp.Config;
|
||||
|
|
@ -19,10 +20,13 @@ import extend.zp.EXMainServer;
|
|||
import extend.zp.EXPlayer;
|
||||
import extend.zp.EXRoom;
|
||||
import extend.zp.PlayerRuleManager;
|
||||
import extend.zp.player.rulestate.PRDiscardPaoState;
|
||||
import extend.zp.uitl.Paixing;
|
||||
|
||||
|
||||
public class EXPlayerPreDrawState extends StateBase<EXPlayer> {
|
||||
public static final Logger logger = Logger.getLogger(EXPlayerPreDrawState.class);
|
||||
|
||||
@Override
|
||||
public void enter(EXPlayer owner) {
|
||||
EXRoom room = owner.getRoom();
|
||||
|
|
|
|||
|
|
@ -1,15 +1,29 @@
|
|||
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.taurus.core.util.Logger;
|
||||
|
||||
import extend.zp.EXActionEvent;
|
||||
import extend.zp.EXMainServer;
|
||||
import extend.zp.EXPlayer;
|
||||
import extend.zp.PlayerRuleManager;
|
||||
import extend.zp.player.rulestate.PRTiState;
|
||||
|
||||
public class EXPlayerWaitState extends StateBase<EXPlayer> {
|
||||
public static final Logger logger = Logger.getLogger(EXPlayerWaitState.class);
|
||||
|
||||
@Override
|
||||
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
|
||||
switch (cmd) {
|
||||
case EXActionEvent.EVENT_OTHER_DISCARD:
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ public class EXRoomDealState extends StateBase<EXRoom> {
|
|||
}
|
||||
});
|
||||
}
|
||||
}, 500, TimeUnit.MILLISECONDS);
|
||||
}, 5000, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,15 +2,28 @@ package extend.zp.room.state;
|
|||
|
||||
import com.game.Global;
|
||||
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.taurus.core.util.Logger;
|
||||
|
||||
import extend.zp.EXMainServer;
|
||||
import extend.zp.EXRoom;
|
||||
import extend.zp.player.state.EXPlayerDrawState;
|
||||
import extend.zp.player.state.EXPlayerWaitState;
|
||||
|
||||
public class EXRoomSetpState extends StateBase<EXRoom> {
|
||||
public static final Logger logger = Logger.getLogger(EXRoomSetpState.class);
|
||||
|
||||
@Override
|
||||
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;
|
||||
// TODO Auto-generated method stub
|
||||
if (owner.activeSeat == 0) {
|
||||
|
|
|
|||
|
|
@ -11,8 +11,10 @@ import com.taurus.core.entity.ITArray;
|
|||
import com.taurus.core.entity.ITObject;
|
||||
import com.taurus.core.entity.TArray;
|
||||
import com.taurus.core.entity.TObject;
|
||||
import com.taurus.core.util.Logger;
|
||||
|
||||
import extend.zp.*;
|
||||
import extend.zp.player.rule.RuleDiscardPao;
|
||||
import extend.zp.player.rulestate.PRDrawPaoState;
|
||||
import extend.zp.player.state.EXPlayerDiscardState;
|
||||
import extend.zp.room.state.EXRoomSetpState;
|
||||
|
|
@ -20,6 +22,7 @@ import extend.zp.uitl.CardUtil;
|
|||
|
||||
|
||||
public class TipManager {
|
||||
public static final Logger logger = Logger.getLogger(TipManager.class);
|
||||
|
||||
private int id = 0;
|
||||
private int uid = 100;
|
||||
|
|
@ -45,7 +48,9 @@ public class TipManager {
|
|||
return this.uid;
|
||||
}
|
||||
public void choicAction(int id,ITArray biid) {
|
||||
|
||||
if (id == this.uid) {
|
||||
|
||||
//
|
||||
Iterator<Entry<Integer, Tip>> it = this.tipMap.entrySet().iterator();
|
||||
int card = 0;
|
||||
|
|
@ -101,6 +106,7 @@ public class TipManager {
|
|||
owner.stateMachine.changeState(Global.getState(PlayerWaitState.class));
|
||||
////System.out.println("typesttteee");
|
||||
owner.getRoom().addAction(new Action(tip, owner));
|
||||
|
||||
} else {
|
||||
//异常下轮
|
||||
//owner.room.stateMachine.changeState(Global.getState(EXRoomSetpState.class));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,8 @@
|
|||
package extend.zp.uitl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.taurus.core.util.Logger;
|
||||
import extend.zp.EXPlayer;
|
||||
import extend.zp.EXRoom;
|
||||
|
|
@ -31,13 +34,101 @@ public class Paixing {
|
|||
// }
|
||||
// logger.info("当前行动的牌:" + room.activeCard);
|
||||
// logger.info("用户的牌:" + player.cardInhand);
|
||||
// logger.info("用户当前胡息:" + player.huXi);
|
||||
|
||||
// if(room.activeCard!=0) {
|
||||
// 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);
|
||||
// logger.info("canWin:" + canWin);
|
||||
// logger.info("isWin:" + isWin);
|
||||
// logger.info("player.huXi:" + player.huXi);
|
||||
|
||||
if (canWin && !isWin) {
|
||||
|
||||
// 新增代码1111111111
|
||||
if (player.huXi >= 15) {
|
||||
isWin = true;
|
||||
}
|
||||
|
|
@ -132,6 +223,7 @@ public class Paixing {
|
|||
}
|
||||
|
||||
}
|
||||
logger.info("最后胡息:" + player.huXi);
|
||||
return isWin;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,24 +1,31 @@
|
|||
package extend.zp.uitl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
import com.game.data.Room;
|
||||
import com.taurus.core.util.Logger;
|
||||
|
||||
import extend.zp.EXPlayer;
|
||||
import extend.zp.EXRoom;
|
||||
import extend.zp.OpCard;
|
||||
import extend.zp.RuleWeight;
|
||||
import extend.zp.player.rulestate.PRChi;
|
||||
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;
|
||||
|
||||
public class WinCard {
|
||||
public int pair_count;
|
||||
|
||||
public int long_count;
|
||||
|
||||
public Stack<List<Integer>> stack;
|
||||
|
||||
public Stack<Integer> stackHuxi;
|
||||
|
||||
public List<Integer> cardList;
|
||||
|
||||
public static final Logger logger = Logger.getLogger(WinCard.class);
|
||||
public boolean activeCardIsUse = false;
|
||||
|
||||
private void push(List<Integer> cardGroup) {
|
||||
this.stack.push(cardGroup);
|
||||
|
|
@ -26,112 +33,103 @@ public class WinCard {
|
|||
|
||||
private void rollBack() {
|
||||
List<Integer> cardGroup = this.stack.pop();
|
||||
for (Integer card : cardGroup) {
|
||||
for (Integer card : cardGroup)
|
||||
this.cardList.add(card);
|
||||
}
|
||||
Collections.sort(this.cardList);
|
||||
}
|
||||
|
||||
boolean tryKezi(int card, EXPlayer player) {
|
||||
if (player.getRoom().activeCard != 0) {
|
||||
card = player.getRoom().activeCard;
|
||||
}
|
||||
// logger.info("当前牌数量:" + CardUtil.cardNum(card, this.cardList) + "--" + card);
|
||||
if ((player.getRoom()).activeCard != 0)
|
||||
card = (player.getRoom()).activeCard;
|
||||
if (CardUtil.cardNum(card, this.cardList) >= 3) {
|
||||
CardUtil.removeCard(this.cardList, card, CardUtil.cardNum(card, this.cardList));
|
||||
List<Integer> cardGroup = new ArrayList<Integer>();
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card);
|
||||
this.push(cardGroup);
|
||||
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().isTianHu && card == player.getRoom().drawCard
|
||||
&& player.getRoom().bankerSeat == player.seat) {
|
||||
huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, card);
|
||||
if ((player.getRoom()).isTianHu && card == (player.getRoom()).drawCard
|
||||
&& (player.getRoom()).bankerSeat == player.seat) {
|
||||
huXi = Paixing.caclHuxi(3, card);
|
||||
} else {
|
||||
huXi = Paixing.caclHuxi(RuleWeight.TYPE_PONG, card);
|
||||
huXi = Paixing.caclHuxi(2, card);
|
||||
}
|
||||
// logger.info("计算胡息:" + huXi + "--" + card);
|
||||
|
||||
player.huXi += huXi;
|
||||
logger.info("总胡息:" + player.huXi);
|
||||
|
||||
this.stackHuxi.push(huXi);
|
||||
this.stackHuxi.push(Integer.valueOf(huXi));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean tryShunzi1(int card, EXPlayer player) {
|
||||
if (card < 200 && card % 100 > 8) {
|
||||
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<Integer>();
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card + 1);
|
||||
cardGroup.add(card + 2);
|
||||
this.push(cardGroup);
|
||||
|
||||
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) {
|
||||
huXi = Paixing.caclHuxi(RuleWeight.TYPE_CHOW, card);
|
||||
huXi = Paixing.caclHuxi(14, card);
|
||||
player.huXi += huXi;
|
||||
}
|
||||
this.stackHuxi.push(huXi);
|
||||
this.stackHuxi.push(Integer.valueOf(huXi));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
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) {
|
||||
CardUtil.removeCard(this.cardList, card, 2);
|
||||
CardUtil.removeCard(this.cardList, card + 100, 1);
|
||||
List<Integer> cardGroup = new ArrayList<Integer>();
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card + 100);
|
||||
this.push(cardGroup);
|
||||
this.stackHuxi.push(0);
|
||||
List<Integer> cardGroup = new ArrayList<>();
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
cardGroup.add(Integer.valueOf(card + 100));
|
||||
push(cardGroup);
|
||||
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<Integer>();
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card + 100);
|
||||
cardGroup.add(card + 100);
|
||||
this.push(cardGroup);
|
||||
this.stackHuxi.push(0);
|
||||
List<Integer> cardGroup = new ArrayList<>();
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
cardGroup.add(Integer.valueOf(card + 100));
|
||||
cardGroup.add(Integer.valueOf(card + 100));
|
||||
push(cardGroup);
|
||||
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, 2);
|
||||
CardUtil.removeCard(this.cardList, card - 100, 1);
|
||||
List<Integer> cardGroup = new ArrayList<Integer>();
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card - 100);
|
||||
this.push(cardGroup);
|
||||
this.stackHuxi.push(0);
|
||||
List<Integer> cardGroup = new ArrayList<>();
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
cardGroup.add(Integer.valueOf(card - 100));
|
||||
push(cardGroup);
|
||||
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<Integer>();
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card - 100);
|
||||
cardGroup.add(card - 100);
|
||||
this.push(cardGroup);
|
||||
this.stackHuxi.push(0);
|
||||
List<Integer> cardGroup = new ArrayList<>();
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
cardGroup.add(Integer.valueOf(card - 100));
|
||||
cardGroup.add(Integer.valueOf(card - 100));
|
||||
push(cardGroup);
|
||||
this.stackHuxi.push(Integer.valueOf(0));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -139,225 +137,186 @@ public class WinCard {
|
|||
}
|
||||
|
||||
private boolean tryShunzi3(int card, EXPlayer player) {
|
||||
if (card % 100 == 2) {
|
||||
if (CardUtil.cardNum(card + 5, this.cardList) > 0 && CardUtil.cardNum(card + 8, this.cardList) > 0) {
|
||||
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<Integer>();
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card + 5);
|
||||
cardGroup.add(card + 8);
|
||||
this.push(cardGroup);
|
||||
|
||||
int huXi = Paixing.caclHuxi(RuleWeight.TYPE_CHOW, card);
|
||||
List<Integer> cardGroup = new ArrayList<>();
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
cardGroup.add(Integer.valueOf(card + 5));
|
||||
cardGroup.add(Integer.valueOf(card + 8));
|
||||
push(cardGroup);
|
||||
int huXi = Paixing.caclHuxi(14, card);
|
||||
player.huXi += huXi;
|
||||
this.stackHuxi.push(huXi);
|
||||
this.stackHuxi.push(Integer.valueOf(huXi));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean tryPair(int card) {
|
||||
if (this.pair_count > 0) {
|
||||
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<Integer>();
|
||||
cardGroup.add(card);
|
||||
cardGroup.add(card);
|
||||
this.push(cardGroup);
|
||||
List<Integer> cardGroup = new ArrayList<>();
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
cardGroup.add(Integer.valueOf(card));
|
||||
push(cardGroup);
|
||||
this.pair_count = 1;
|
||||
this.stackHuxi.push(0);
|
||||
this.stackHuxi.push(Integer.valueOf(0));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean tryWin(EXPlayer player) {
|
||||
|
||||
if (this.cardList.size() == 0) {
|
||||
if (player.tiCount + player.kongCount > 0) {
|
||||
if (this.pair_count == 1) {
|
||||
return true;
|
||||
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
if (this.pair_count > 0) {
|
||||
return false;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
activeCard = card;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (activeCardIsUse == false && player.seat!=player.getRoom().activeSeat) {
|
||||
activeCard = player.getRoom().activeCard;
|
||||
activeCardIsUse = true;
|
||||
}
|
||||
|
||||
if (activeCard == 0) {
|
||||
activeCard = this.cardList.get(0);
|
||||
}
|
||||
if (activeCard == 0)
|
||||
activeCard = ((Integer) this.cardList.get(0)).intValue();
|
||||
if (activeCard % 100 == 1) {
|
||||
if (tryShunzi1(activeCard, player)) {
|
||||
if (tryWin(player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
int huXi = this.stackHuxi.pop();
|
||||
if (huXi > 0) {
|
||||
rollBack();
|
||||
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
|
||||
if (huXi > 0)
|
||||
player.huXi -= huXi;
|
||||
}
|
||||
}
|
||||
|
||||
if (tryKezi(activeCard, player)) {
|
||||
if (tryWin(player)) {
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
int huXi = this.stackHuxi.pop();
|
||||
if (huXi > 0) {
|
||||
if (tryKezi(activeCard, player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
rollBack();
|
||||
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
|
||||
if (huXi > 0)
|
||||
player.huXi -= huXi;
|
||||
}
|
||||
}
|
||||
if (player.tiCount + player.kongCount > 0) {
|
||||
if (tryPair(activeCard)) {
|
||||
if (tryWin(player)) {
|
||||
if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.pair_count = 0;
|
||||
this.rollBack();
|
||||
rollBack();
|
||||
this.stackHuxi.pop();
|
||||
}
|
||||
}
|
||||
if (tryShunzi2(activeCard)) {
|
||||
if (tryWin(player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
rollBack();
|
||||
this.stackHuxi.pop();
|
||||
}
|
||||
} else if (activeCard % 100 == 2) {
|
||||
// logger.info("当前剩余牌----"+this.cardList);
|
||||
// logger.info("当前行动的牌----"+activeCard);
|
||||
|
||||
if (tryShunzi3(activeCard, player)) {
|
||||
// logger.info("吃牌后当前剩余牌----"+this.cardList);
|
||||
|
||||
if (tryWin(player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
int huXi = this.stackHuxi.pop();
|
||||
if (huXi > 0) {
|
||||
rollBack();
|
||||
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
|
||||
if (huXi > 0)
|
||||
player.huXi -= huXi;
|
||||
}
|
||||
}
|
||||
if (tryKezi(activeCard, player)) {
|
||||
if (tryWin(player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
int huXi = this.stackHuxi.pop();
|
||||
if (huXi > 0) {
|
||||
rollBack();
|
||||
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
|
||||
if (huXi > 0)
|
||||
|
||||
player.huXi -= huXi;
|
||||
}
|
||||
}
|
||||
if (player.tiCount + player.kongCount > 0) {
|
||||
if (tryPair(activeCard)) {
|
||||
if (tryWin(player)) {
|
||||
if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.pair_count = 0;
|
||||
this.rollBack();
|
||||
rollBack();
|
||||
this.stackHuxi.pop();
|
||||
}
|
||||
}
|
||||
if (tryShunzi1(activeCard, player)) {
|
||||
if (tryWin(player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
int huXi = this.stackHuxi.pop();
|
||||
if (huXi > 0) {
|
||||
rollBack();
|
||||
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
|
||||
if (huXi > 0)
|
||||
player.huXi -= huXi;
|
||||
}
|
||||
}
|
||||
if (tryShunzi2(activeCard)) {
|
||||
if (tryWin(player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
rollBack();
|
||||
this.stackHuxi.pop();
|
||||
}
|
||||
} else {
|
||||
if (tryKezi(activeCard, player)) {
|
||||
|
||||
boolean canWin = tryWin(player);
|
||||
if (canWin) {
|
||||
if (canWin)
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
int huXi = this.stackHuxi.pop();
|
||||
if (huXi > 0) {
|
||||
rollBack();
|
||||
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
|
||||
if (huXi > 0)
|
||||
|
||||
player.huXi -= huXi;
|
||||
|
||||
}
|
||||
}
|
||||
if (player.tiCount + player.kongCount > 0) {
|
||||
if (tryPair(activeCard)) {
|
||||
if (tryWin(player)) {
|
||||
if (player.tiCount + player.kongCount > 0 && tryPair(activeCard)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.pair_count = 0;
|
||||
this.rollBack();
|
||||
rollBack();
|
||||
this.stackHuxi.pop();
|
||||
}
|
||||
}
|
||||
if (tryShunzi1(activeCard, player)) {
|
||||
if (tryWin(player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
int huXi = this.stackHuxi.pop();
|
||||
if (huXi > 0) {
|
||||
rollBack();
|
||||
int huXi = ((Integer) this.stackHuxi.pop()).intValue();
|
||||
if (huXi > 0)
|
||||
|
||||
player.huXi -= huXi;
|
||||
}
|
||||
|
||||
}
|
||||
if (tryShunzi2(activeCard)) {
|
||||
if (tryWin(player)) {
|
||||
if (tryWin(player))
|
||||
return true;
|
||||
}
|
||||
this.rollBack();
|
||||
rollBack();
|
||||
this.stackHuxi.pop();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public WinCard(List<Integer> cardInhand, int addCard) {
|
||||
this.stack = new Stack<List<Integer>>();
|
||||
this.stackHuxi = new Stack<Integer>();
|
||||
this.cardList = new ArrayList<Integer>();
|
||||
this.stack = new Stack<>();
|
||||
this.stackHuxi = new Stack<>();
|
||||
this.cardList = new ArrayList<>();
|
||||
this.cardList.addAll(cardInhand);
|
||||
if (addCard > 0) {
|
||||
this.cardList.add(addCard);
|
||||
}
|
||||
if (addCard > 0)
|
||||
this.cardList.add(Integer.valueOf(addCard));
|
||||
Collections.sort(this.cardList);
|
||||
}
|
||||
|
||||
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");
|
||||
|
|
@ -381,19 +340,14 @@ public class WinCard {
|
|||
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, room, "ddddddd");
|
||||
|
||||
EXPlayer player = new EXPlayer(168168, (Room) room, "ddddddd");
|
||||
List<Integer> list = new ArrayList<>();
|
||||
String str = "106";
|
||||
for (String card : str.split(", ")) {
|
||||
list.add(Integer.parseInt(card));
|
||||
}
|
||||
for (String card : str.split(", "))
|
||||
list.add(Integer.valueOf(Integer.parseInt(card)));
|
||||
player.cardInhand = list;
|
||||
|
||||
List<OpCard> op = new ArrayList<OpCard>();
|
||||
List<OpCard> op = new ArrayList<>();
|
||||
OpCard opCard = new OpCard(3, 102, 102, 102, 9);
|
||||
op.add(opCard);
|
||||
WinCard win = new WinCard(list, 106);
|
||||
|
|
@ -402,16 +356,13 @@ public class WinCard {
|
|||
|
||||
int tryKeziBefore(int card, EXPlayer player) {
|
||||
int huXi = 0;
|
||||
if (CardUtil.cardNum(card, this.cardList) >= 3) {
|
||||
if (player.getRoom().isTianHu && card == player.getRoom().drawCard
|
||||
&& player.getRoom().bankerSeat == player.seat) {
|
||||
huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, card);
|
||||
if (CardUtil.cardNum(card, this.cardList) >= 3)
|
||||
if ((player.getRoom()).isTianHu && card == (player.getRoom()).drawCard
|
||||
&& (player.getRoom()).bankerSeat == player.seat) {
|
||||
huXi = Paixing.caclHuxi(3, card);
|
||||
} else {
|
||||
huXi = Paixing.caclHuxi(RuleWeight.TYPE_PONG, card);
|
||||
}
|
||||
huXi = Paixing.caclHuxi(2, card);
|
||||
}
|
||||
return huXi;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,6 +227,7 @@ public class EXRoom extends Room {
|
|||
else
|
||||
{
|
||||
List<IRuleBase> paoList = new ArrayList<IRuleBase>();
|
||||
paoList.add(new RuleWin());
|
||||
EXMainServer.playerRuleMgr.ruleMap.put(PlayerRuleManager.TI_RULE, paoList);
|
||||
|
||||
List<IRuleBase> drawRuleList = new ArrayList<IRuleBase>();
|
||||
|
|
|
|||
Loading…
Reference in New Issue