李泽帆 2026-07-17 21:21:15 +08:00
parent 050a629d63
commit 5ae4bcdc6d
6 changed files with 85 additions and 52 deletions

View File

@ -59,12 +59,25 @@ public class RoomCard {
}
public void sanlong() {
List list2 = Arrays.asList(103, 104, 104, 105, 106, 107, 108, 108, 108, 109, 110, 110, 201, 203, 204, 204, 207,
208, 209, 210);
List list = Arrays.asList(101, 102, 103, 104, 105, 105, 107, 107, 107, 108, 110, 110, 201, 201, 202, 202, 204,
205, 207, 210);
List list3 = Arrays.asList(207, 106, 205, 206, 202, 202, 108, 104, 202, 109, 208, 206, 106, 209, 102, 210, 205,
202, 209);
// //不够胡息
List list2 = Arrays.asList(101, 102, 103, 104, 105, 105, 107, 108, 108, 109, 204, 204, 205, 205, 205, 206, 206, 207, 209, 210);
List list = Arrays.asList(101, 102, 103, 104, 105, 108, 109, 109, 201, 202, 203, 203, 203, 204, 206, 207, 207, 208, 208, 209);
List list3 = Arrays.asList(102, 107, 204, 209, 208, 107, 110, 103, 106, 205, 105, 207, 210, 108, 103, 201, 110, 110, 104, 202);
// List list2 = Arrays.asList(101, 103, 103, 105, 106, 108, 109, 109, 110, 201, 202, 203, 204, 204, 205, 205, 208, 208, 210, 210);
// List list = Arrays.asList(101, 102, 103, 104, 104, 104, 105, 105, 107, 107, 107, 107, 108, 110, 201, 202, 207, 209, 210, 210);
// List list3 = Arrays.asList(102, 209, 109, 203, 101, 110, 101, 205, 108, 201, 206, 203, 202, 106, 104, 209, 209, 205, 204, 109);
//
// //够胡息
// List list2 = Arrays.asList(103, 104, 104, 105, 106, 107, 108, 108, 108, 109, 110, 110, 201, 203, 204, 204, 207,
// 208, 209, 210);
// List list = Arrays.asList(101, 102, 103, 104, 105, 105, 107, 107, 107, 108, 110, 110, 201, 201, 202, 202, 204,
// 205, 207, 210);
// List list3 = Arrays.asList(207, 106, 205, 206, 202, 202, 108, 104, 202, 109, 208, 206, 106, 209, 102, 210, 205,
// 202, 209);
// List list2 = Arrays.asList(102, 104, 107, 107, 108, 108, 109, 109, 110, 203, 204, 204, 205, 207, 207, 208, 208, 208, 208, 209);
// List list = Arrays.asList(103, 103, 103, 104, 106, 109, 110, 201, 202, 202, 202, 202, 203, 206, 206, 206, 207, 209, 210, 210);
// List list3 = Arrays.asList(108, 210, 207, 105, 105, 105, 103, 204, 203, 209, 106, 106, 107, 107, 102, 203, 110, 110, 106, 201);

View File

@ -49,6 +49,7 @@ public class PRDrawPaoState extends StateBase<EXPlayer> {
opcard.addInt(card);
EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_PAO, fromseat, opcard);
owner.getRoom().activeCard=0;
int count = owner.tiCount + owner.kongCount;
if (count<2&&!owner.guohupao){
EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);

View File

@ -38,6 +38,7 @@ public class PRTiState extends StateBase<EXPlayer> {
opcard.addInt(card);
opcard.addInt(card);
owner.tipai_count = owner.tipai_count + 1;
owner.getRoom().activeCard=0;
EXMainServer.gameCtr.actionCard(owner, card, card, RuleWeight.TYPE_TI, owner.seat, opcard);
EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
}

View File

@ -52,7 +52,8 @@ public class PRWeiState extends StateBase<EXPlayer> {
ITArray opcard = TArray.newInstance();
opcard.addInt(card);
opcard.addInt(card);
owner.getRoom().activeCard=0;
EXMainServer.gameCtr.actionCard(owner, card, card, type, owner.seat, opcard);
EXMainServer.playerRuleMgr.condition(PlayerRuleManager.HU_RULE, owner);
}

View File

@ -23,14 +23,17 @@ public class Paixing {
haveCardCount++;
}
}
if (haveCardCount >= 2) {
player.huXi+=win.tryKeziBefore(room.activeCard, player);
logger.info("当前胡息:"+player.huXi);
}
logger.info("当前行动的牌:" + room.activeCard);
// int lastHuxi = 0;
// if (haveCardCount >= 2) {
// lastHuxi=win.tryKeziBefore(room.activeCard, player);
//
// logger.info("当前胡息:"+player.huXi+",最后胡牌胡息:"+lastHuxi);
// }
// logger.info("当前行动的牌:" + room.activeCard);
// 原始算法计算
if (win.tryWin(player) && !isWin) {
boolean canWin = win.tryWin(player);
if (canWin && !isWin) {
if (player.huXi >= 15) {
isWin = true;
}

View File

@ -3,17 +3,21 @@ package extend.zp.uitl;
import java.io.IOException;
import java.util.*;
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;
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 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);
private void push(List<Integer> cardGroup) {
this.stack.push(cardGroup);
@ -28,6 +32,10 @@ public class WinCard {
}
boolean tryKezi(int card, EXPlayer player) {
if(player.getRoom().activeCard!=0) {
card = player.getRoom().activeCard;
}
// logger.info("当前牌数量:" + CardUtil.cardNum(card, this.cardList) + "--" + card);
if (CardUtil.cardNum(card, this.cardList) >= 3) {
CardUtil.removeCard(this.cardList, card, CardUtil.cardNum(card, this.cardList));
List<Integer> cardGroup = new ArrayList<Integer>();
@ -36,12 +44,17 @@ public class WinCard {
cardGroup.add(card);
this.push(cardGroup);
int huXi = 0;
if (player.getRoom().isTianHu && card == player.getRoom().drawCard && player.getRoom().bankerSeat == player.seat) {
if (player.getRoom().isTianHu && card == player.getRoom().drawCard
&& player.getRoom().bankerSeat == player.seat) {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, card);
} else {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_PONG, card);
}
// logger.info("计算胡息:" + huXi + "--" + card);
player.huXi += huXi;
logger.info("总胡息:" + player.huXi);
this.stackHuxi.push(huXi);
return true;
}
@ -163,6 +176,7 @@ public class WinCard {
}
public boolean tryWin(EXPlayer player) {
if (this.cardList.size() == 0) {
if (player.tiCount + player.kongCount > 0) {
if (this.pair_count == 1) {
@ -185,11 +199,9 @@ public class WinCard {
}
}
if (activeCard == 0) {
activeCard = this.cardList.get(0);
}
if (activeCard % 100 == 1) {
if (tryShunzi1(activeCard, player)) {
if (tryWin(player)) {
@ -279,7 +291,9 @@ public class WinCard {
}
} else {
if (tryKezi(activeCard, player)) {
if (tryWin(player)) {
boolean canWin = tryWin(player);
if (canWin) {
return true;
}
this.rollBack();
@ -334,33 +348,33 @@ public class WinCard {
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]");
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,room,"ddddddd");
EXRoom room = new EXRoom("749322", redis_room_map);
EXPlayer player = new EXPlayer(168168, room, "ddddddd");
List<Integer> list = new ArrayList<>();
String str = "106";
@ -369,18 +383,18 @@ public class WinCard {
}
player.cardInhand = list;
List<OpCard> op = new ArrayList<OpCard>();
OpCard opCard=new OpCard(3, 102, 102, 102, 9);
OpCard opCard = new OpCard(3, 102, 102, 102, 9);
op.add(opCard);
WinCard win = new WinCard(list, 106);
boolean res = win.tryWin(player);
}
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) {
if (player.getRoom().isTianHu && card == player.getRoom().drawCard
&& player.getRoom().bankerSeat == player.seat) {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_KAN, card);
} else {
huXi = Paixing.caclHuxi(RuleWeight.TYPE_PONG, card);