放炮罚机器人

master
miaoqingshuai 2026-06-15 19:14:16 +08:00
parent ed801cebd2
commit 4ea9fea6f0
2 changed files with 63 additions and 63 deletions

View File

@ -520,8 +520,8 @@ public class RobotConnectionManager {
} }
//摸牌 //摸牌
else if ("819".equalsIgnoreCase(command)) { else if ("819".equalsIgnoreCase(command)) {
System.out.println("cliend" + client.getSession()); // System.out.println("cliend" + client.getSession());
System.out.println("819 +++++++" + robotId); // System.out.println("819 +++++++" + robotId);
handler.drawCard(message,robotUser); handler.drawCard(message,robotUser);
//处理完协议后保存到Redis //处理完协议后保存到Redis
FangPaoFaHandler currentInstance = fangpaofaHandlerInstances.get(connecId); FangPaoFaHandler currentInstance = fangpaofaHandlerInstances.get(connecId);
@ -544,12 +544,12 @@ public class RobotConnectionManager {
handler.actionTip(param, client,robotUser); handler.actionTip(param, client,robotUser);
//放跑提示 //放跑提示
} else if ("822".equalsIgnoreCase(command)) { } else if ("822".equalsIgnoreCase(command)) {
System.out.println("放跑提示"); // System.out.println("放跑提示");
FangPaoFaHandler.fangPaoTipEvent(message, client); FangPaoFaHandler.fangPaoTipEvent(message, client);
//打鸟提示 //打鸟提示
}else if ("832".equalsIgnoreCase(command)){ }else if ("832".equalsIgnoreCase(command)){
handler.daniao(param,client); handler.daniao(param,client);
System.out.println("打鸟提示" + param); // System.out.println("打鸟提示" + param);
} }
//飘操作 //飘操作
else if ("1015".equalsIgnoreCase(command)) { else if ("1015".equalsIgnoreCase(command)) {

View File

@ -93,7 +93,7 @@ public class FangPaoFaHandler {
for (int i = 0; i < cardList.size(); i++) { for (int i = 0; i < cardList.size(); i++) {
handCards.add(cardList.getInt(i)); handCards.add(cardList.getInt(i));
} }
System.out.println("放炮罚初始化手牌" + handCards); // System.out.println("放炮罚初始化手牌" + handCards);
log.info("放炮罚初始化手牌:{} 张", handCards.size()); log.info("放炮罚初始化手牌:{} 张", handCards.size());
log.debug("手牌详情:{}", handCards); log.debug("手牌详情:{}", handCards);
} }
@ -112,18 +112,18 @@ public class FangPaoFaHandler {
jiqirenseat = robotUser.getSeat(); jiqirenseat = robotUser.getSeat();
} }
int seat = param.getInt("seat"); int seat = param.getInt("seat");
System.out.println("819 jiqirenseat" + jiqirenseat); // System.out.println("819 jiqirenseat" + jiqirenseat);
System.out.println("819 seat" + seat); // System.out.println("819 seat" + seat);
int drawnCard = param.getInt("card"); int drawnCard = param.getInt("card");
System.out.println("819摸牌 ++++ " + drawnCard); // System.out.println("819摸牌 ++++ " + drawnCard);
if (drawnCard > 0 && seat == jiqirenseat) { if (drawnCard > 0 && seat == jiqirenseat) {
// ✅ 只记录modepai,不加入手牌 // ✅ 只记录modepai,不加入手牌
currentCard = drawnCard; currentCard = drawnCard;
modepai = drawnCard; modepai = drawnCard;
System.out.println("进入摸牌里面" + drawnCard); // System.out.println("进入摸牌里面" + drawnCard);
System.out.println("摸牌下面" + modepai); // System.out.println("摸牌下面" + modepai);
System.out.println("摸完后的手牌(未加入)" + handCards); // System.out.println("摸完后的手牌(未加入)" + handCards);
log.info("放炮罚摸牌:{}", drawnCard); log.info("放炮罚摸牌:{}", drawnCard);
log.debug("当前手牌数量:{}", handCards.size()); log.debug("当前手牌数量:{}", handCards.size());
} }
@ -148,7 +148,7 @@ public class FangPaoFaHandler {
*/ */
public void actionTip(ITObject param, TaurusClient client, RobotUser robotUser) { public void actionTip(ITObject param, TaurusClient client, RobotUser robotUser) {
// robotUser.getSeat() // robotUser.getSeat()
System.out.println("获取后台发给客户端的动作处理的所有参数" + param); // System.out.println("获取后台发给客户端的动作处理的所有参数" + param);
Integer uid = param.getInt("uid"); Integer uid = param.getInt("uid");
ITArray tipList = param.getTArray("tip_list"); ITArray tipList = param.getTArray("tip_list");
if (tipList == null || tipList.size() == 0) { if (tipList == null || tipList.size() == 0) {
@ -162,9 +162,9 @@ public class FangPaoFaHandler {
TObject tip = (TObject) tipList.get(i).getObject(); TObject tip = (TObject) tipList.get(i).getObject();
type = tip.getInt("type"); type = tip.getInt("type");
id = tip.getInt("id"); id = tip.getInt("id");
System.out.println("type+++++++" + type); // System.out.println("type+++++++" + type);
if (type == 8) { // 胡牌 if (type == 8) { // 胡牌
System.out.println("收到胡牌提示"); // System.out.println("收到胡牌提示");
ITObject params = TObject.newInstance(); ITObject params = TObject.newInstance();
params.putString("session", session + "," + token); params.putString("session", session + "," + token);
params.putInt("qi", 0); params.putInt("qi", 0);
@ -182,9 +182,9 @@ public class FangPaoFaHandler {
params.putString("session", session + "," + token); params.putString("session", session + "," + token);
if (result.shouldAct) { if (result.shouldAct) {
System.out.println("执行type" + type); // System.out.println("执行type" + type);
System.out.println("执行吃或碰 id" + result.actionId); // System.out.println("执行吃或碰 id" + result.actionId);
System.out.println("执行吃或碰 具体牌和分数 " + result.reason); // System.out.println("执行吃或碰 具体牌和分数 " + result.reason);
// 从手牌中删除opcard里的牌 // 从手牌中删除opcard里的牌
// removeOpCardsFromHand(tipList, result.actionId); // removeOpCardsFromHand(tipList, result.actionId);
@ -198,10 +198,10 @@ public class FangPaoFaHandler {
delayedAction(client, params, actionName); delayedAction(client, params, actionName);
log.info("吃碰决策: 执行{}", result.reason); log.info("吃碰决策: 执行{}", result.reason);
} else { } else {
System.out.println("跳过吃或碰"); // System.out.println("跳过吃或碰");
params.putInt("id", uid); params.putInt("id", uid);
delayedAction(client, params, "过"); delayedAction(client, params, "过");
System.out.println("吃碰决策: 跳过, 原因: {}" + result.reason); // System.out.println("吃碰决策: 跳过, 原因: {}" + result.reason);
log.info("吃碰决策: 跳过, 原因: {}", result.reason); log.info("吃碰决策: 跳过, 原因: {}", result.reason);
} }
} }
@ -222,7 +222,7 @@ public class FangPaoFaHandler {
// ✅ 关键: 执行任何动作前,先将摸的牌加入手牌 // ✅ 关键: 执行任何动作前,先将摸的牌加入手牌
if (modepai > 0) { if (modepai > 0) {
handCards.add(modepai); handCards.add(modepai);
System.out.println("执行动作前将摸的牌加入手牌: " + modepai); // System.out.println("执行动作前将摸的牌加入手牌: " + modepai);
} }
// 找到对应的tip // 找到对应的tip
@ -239,7 +239,7 @@ public class FangPaoFaHandler {
for (int j = 0; j < opcardArray.size(); j++) { for (int j = 0; j < opcardArray.size(); j++) {
int card = opcardArray.getInt(j); int card = opcardArray.getInt(j);
removeCardFromHand(card); removeCardFromHand(card);
System.out.println("删除opcard中的牌: " + card); // System.out.println("删除opcard中的牌: " + card);
} }
} }
@ -249,12 +249,12 @@ public class FangPaoFaHandler {
if (type == 1 && card1 == modepai) { if (type == 1 && card1 == modepai) {
// 吃自己摸的牌,需要删除这张牌 // 吃自己摸的牌,需要删除这张牌
removeCardFromHand(card1); removeCardFromHand(card1);
System.out.println("吃自己摸的牌,删除: " + card1); // System.out.println("吃自己摸的牌,删除: " + card1);
} }
if (type == 2 && card1 == modepai) { if (type == 2 && card1 == modepai) {
removeCardFromHand(card1); removeCardFromHand(card1);
System.out.println("碰自己摸的牌,删除: " + card1); // System.out.println("碰自己摸的牌,删除: " + card1);
} }
// ✅ 执行完动作后,清除modepai // ✅ 执行完动作后,清除modepai
@ -264,7 +264,7 @@ public class FangPaoFaHandler {
// 重新排序手牌 // 重新排序手牌
handCards.sort(Integer::compareTo); handCards.sort(Integer::compareTo);
System.out.println("吃碰后手牌: " + handCards); // System.out.println("吃碰后手牌: " + handCards);
} }
/** /**
@ -275,12 +275,12 @@ public class FangPaoFaHandler {
private void removeCardFromHand(int card) { private void removeCardFromHand(int card) {
Integer cardObj = Integer.valueOf(card); Integer cardObj = Integer.valueOf(card);
System.out.println("从手牌中删除指定的一张牌 hands " + handCards); // System.out.println("从手牌中删除指定的一张牌 hands " + handCards);
int index = handCards.indexOf(cardObj); int index = handCards.indexOf(cardObj);
if (index != -1) { if (index != -1) {
System.out.println("从手牌中删除指定的一张牌 " + index); // System.out.println("从手牌中删除指定的一张牌 " + index);
handCards.remove(index); handCards.remove(index);
System.out.println("从手牌中删除指定的一张牌的手牌" + handCards); // System.out.println("从手牌中删除指定的一张牌的手牌" + handCards);
} else { } else {
log.warn("手牌中找不到要删除的牌: {}", card); log.warn("手牌中找不到要删除的牌: {}", card);
} }
@ -333,14 +333,14 @@ public class FangPaoFaHandler {
// 出牌前,如果modepai有值,先加入手牌 // 出牌前,如果modepai有值,先加入手牌
if (modepai > 0) { if (modepai > 0) {
handCards.add(modepai); handCards.add(modepai);
System.out.println("出牌前将摸的牌加入手牌: " + modepai); // System.out.println("出牌前将摸的牌加入手牌: " + modepai);
modepai = 0; modepai = 0;
} }
System.out.println(robotId + "放炮罚机器人手牌" + handCards); // System.out.println(robotId + "放炮罚机器人手牌" + handCards);
int i = FangPaoFaSuanFa.selectBestCard(handCards, chiCards,pengCards,weiCards,paoCards,tiCards); int i = FangPaoFaSuanFa.selectBestCard(handCards, chiCards,pengCards,weiCards,paoCards,tiCards);
Integer cardToOut = handCards.get(i); Integer cardToOut = handCards.get(i);
System.out.println(robotId + "放炮罚出牌 最新出牌" + cardToOut); // System.out.println(robotId + "放炮罚出牌 最新出牌" + cardToOut);
ITObject params = TObject.newInstance(); ITObject params = TObject.newInstance();
params.putInt("card", cardToOut); params.putInt("card", cardToOut);
@ -359,7 +359,7 @@ public class FangPaoFaHandler {
// 记录出牌 // 记录出牌
handCards.sort(Integer::compareTo); handCards.sort(Integer::compareTo);
System.out.println(robotId + " 最新版本 放炮罚牌 删掉出的牌了" + handCards); // System.out.println(robotId + " 最新版本 放炮罚牌 删掉出的牌了" + handCards);
log.info("放炮罚出牌:{}", cardToOut); log.info("放炮罚出牌:{}", cardToOut);
log.debug("放炮罚剩余手牌:{}", handCards); log.debug("放炮罚剩余手牌:{}", handCards);
@ -435,25 +435,25 @@ public class FangPaoFaHandler {
} }
public void onPlayerAction(ITObject param, RobotUser robotUser) { public void onPlayerAction(ITObject param, RobotUser robotUser) {
System.out.println("815所有参数" + param); // System.out.println("815所有参数" + param);
//机器人id //机器人id
System.out.println("进入815"); // System.out.println("进入815");
System.out.println(robotUser.getRobotId() + " 815下当前机器人手牌 " + handCards); // System.out.println(robotUser.getRobotId() + " 815下当前机器人手牌 " + handCards);
Integer type = param.getInt("type"); Integer type = param.getInt("type");
String robotId = robotUser.getRobotId(); String robotId = robotUser.getRobotId();
Integer playerid = param.getInt("playerid"); Integer playerid = param.getInt("playerid");
Integer from_seat = param.getInt("from_seat"); Integer from_seat = param.getInt("from_seat");
System.out.println("from_seat++++++++ " + from_seat); // System.out.println("from_seat++++++++ " + from_seat);
System.out.println("robotUser.getSeat() " + robotUser.getSeat()); // System.out.println("robotUser.getSeat() " + robotUser.getSeat());
ITArray opcard = param.getTArray("opcard"); ITArray opcard = param.getTArray("opcard");
Integer card = param.getInt("card"); Integer card = param.getInt("card");
System.out.println("815 判断之前 card" + card); // System.out.println("815 判断之前 card" + card);
System.out.println("815 type" + type); // System.out.println("815 type" + type);
//如果是机器人玩家进来的话,就判断删除手牌 //如果是机器人玩家进来的话,就判断删除手牌
System.out.println("机器人id" + robotId); // System.out.println("机器人id" + robotId);
System.out.println("玩家id" + playerid); // System.out.println("玩家id" + playerid);
//单独将吃碰畏提跑的牌存起来 //单独将吃碰畏提跑的牌存起来
if (robotId.equals(playerid.toString())){ if (robotId.equals(playerid.toString())){
@ -465,14 +465,14 @@ public class FangPaoFaHandler {
} }
chiCards.addAll(tem); chiCards.addAll(tem);
chiCards.add(card); chiCards.add(card);
System.out.println("吃的牌组" + chiCards); // System.out.println("吃的牌组" + chiCards);
} }
//碰 //碰
if (type == 2){ if (type == 2){
pengCards.add(card); pengCards.add(card);
pengCards.add(card); pengCards.add(card);
pengCards.add(card); pengCards.add(card);
System.out.println("碰的牌组" + pengCards); // System.out.println("碰的牌组" + pengCards);
} }
@ -487,7 +487,7 @@ public class FangPaoFaHandler {
paoCards.add(card); paoCards.add(card);
paoCards.add(card); paoCards.add(card);
paoCards.add(card); paoCards.add(card);
System.out.println("跑的牌组" + paoCards); // System.out.println("跑的牌组" + paoCards);
} }
//提 //提
@ -523,7 +523,7 @@ public class FangPaoFaHandler {
for (int i = 0; i < opcard.size(); ++i) { for (int i = 0; i < opcard.size(); ++i) {
tem.add(opcard.getInt(i)); tem.add(opcard.getInt(i));
} }
System.out.println("tem.size" + tem.size()); // System.out.println("tem.size" + tem.size());
CardUtilFangpaofa.removeCard(handCards, card, tem.size()); CardUtilFangpaofa.removeCard(handCards, card, tem.size());
modepai = 0; modepai = 0;
} else if (type != 3){ } else if (type != 3){
@ -532,7 +532,7 @@ public class FangPaoFaHandler {
for (int i = 0; i < opcard.size(); ++i) { for (int i = 0; i < opcard.size(); ++i) {
tem.add(opcard.getInt(i)); tem.add(opcard.getInt(i));
} }
System.out.println("tem.size" + tem.size()); // System.out.println("tem.size" + tem.size());
CardUtilFangpaofa.removeCard(handCards, card, tem.size()); CardUtilFangpaofa.removeCard(handCards, card, tem.size());
modepai = 0; modepai = 0;
}else if (type == 3){ }else if (type == 3){
@ -558,7 +558,7 @@ public class FangPaoFaHandler {
// 执行任何动作前,先将摸的牌加入手牌 // 执行任何动作前,先将摸的牌加入手牌
if (modepai > 0) { if (modepai > 0) {
handCards.add(modepai); handCards.add(modepai);
System.out.println("执行动作前将摸的牌加入手牌: " + modepai); // System.out.println("执行动作前将摸的牌加入手牌: " + modepai);
} }
if (opcard.size() > 0) { if (opcard.size() > 0) {
@ -566,7 +566,7 @@ public class FangPaoFaHandler {
for (int j = 0; j < opcard.size(); j++) { for (int j = 0; j < opcard.size(); j++) {
int card2 = opcard.getInt(j); int card2 = opcard.getInt(j);
removeCardFromHand(card2); removeCardFromHand(card2);
System.out.println("删除opcard中的牌: " + card2); // System.out.println("删除opcard中的牌: " + card2);
} }
} }
@ -574,21 +574,21 @@ public class FangPaoFaHandler {
if (type == 1 && card == modepai) { if (type == 1 && card == modepai) {
// 吃自己摸的牌,需要删除这张牌 // 吃自己摸的牌,需要删除这张牌
removeCardFromHand(card); removeCardFromHand(card);
System.out.println("吃自己摸的牌,删除: " + card); // System.out.println("吃自己摸的牌,删除: " + card);
} }
if (type == 2 && card == modepai) { if (type == 2 && card == modepai) {
removeCardFromHand(card); removeCardFromHand(card);
System.out.println("碰自己摸的牌,删除: " + card); // System.out.println("碰自己摸的牌,删除: " + card);
} }
// 执行完动作后,清除modepai // 执行完动作后,清除modepai
modepai = 0; modepai = 0;
System.out.println("吃碰后手牌: " + handCards); // System.out.println("吃碰后手牌: " + handCards);
} }
//如果是真人进入 并且是操作的机器人摸到的牌,进行为提等操作, //如果是真人进入 并且是操作的机器人摸到的牌,进行为提等操作,
} else if (from_seat == robotUser.getSeat()) { } else if (from_seat == robotUser.getSeat()) {
System.out.println("进入真人玩家进入815"); // System.out.println("进入真人玩家进入815");
modepai = 0; modepai = 0;
} }
} }
@ -598,12 +598,12 @@ public class FangPaoFaHandler {
int seat = robotUser.getSeat(); int seat = robotUser.getSeat();
int card = param.getInt("card"); int card = param.getInt("card");
System.out.println("过牌/自动出牌"); // System.out.println("过牌/自动出牌");
System.out.println("过牌删除手牌前" + handCards); // System.out.println("过牌删除手牌前" + handCards);
System.out.println("打印机器人座位号" + seat); // System.out.println("打印机器人座位号" + seat);
System.out.println("后台发过来的座位号" + param.getInt("seat")); // System.out.println("后台发过来的座位号" + param.getInt("seat"));
System.out.println("818中的card=" + card); // System.out.println("818中的card=" + card);
System.out.println("当前modepai=" + modepai); // System.out.println("当前modepai=" + modepai);
if (seat == param.getInt("seat")) { if (seat == param.getInt("seat")) {
// 自己座位的818 // 自己座位的818
@ -613,20 +613,20 @@ public class FangPaoFaHandler {
// 这张牌从未加入手牌,所以不需要删除 // 这张牌从未加入手牌,所以不需要删除
// 只需要清零modepai // 只需要清零modepai
modepai = 0; modepai = 0;
System.out.println("清除modepai"); // System.out.println("清除modepai");
} }
} }
System.out.println("过牌删除手牌删除后" + handCards); // System.out.println("过牌删除手牌删除后" + handCards);
System.out.println("最终modepai=" + modepai); // System.out.println("最终modepai=" + modepai);
} }
// ... ex // ... ex
public void bupai(ITObject param, RobotUser robotUser) { public void bupai(ITObject param, RobotUser robotUser) {
Integer card = param.getInt("card"); Integer card = param.getInt("card");
Integer seat = param.getInt("seat"); Integer seat = param.getInt("seat");
System.out.println("机器人seat" + robotUser.getSeat()); // System.out.println("机器人seat" + robotUser.getSeat());
System.out.println("后台发过来的座位号" + seat); // System.out.println("后台发过来的座位号" + seat);
System.out.println("放炮罚补牌" + card); // System.out.println("放炮罚补牌" + card);
if (seat == robotUser.getSeat() && card != modepai && modepai != 3) { if (seat == robotUser.getSeat() && card != modepai && modepai != 3) {
handCards.add(card); handCards.add(card);
} }