package hunan; import com.game.Global; import com.game.Util; 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.plugin.database.DataBase; import com.taurus.core.util.Logger; import com.taurus.core.util.StringUtil; import taurus.client.Message; import taurus.client.TaurusClient; import taurus.util.*; import java.sql.SQLException; import java.util.*; public class HuNanChangSha { public static int changShaCard = 0; public static boolean isTinChi = false; public static boolean isTinPeng = false; private static final Logger log = Logger.getLogger(DoTest.class); //湖南长沙麻将手牌 private List changShaCardInhand = new ArrayList<>(); private List changShaCardInhandgang = new ArrayList<>(); //长沙麻将出过的牌 private List changShachuguopai = new ArrayList<>(); private Map chuGuoPainum = new HashMap<>(); //杠的牌 private List gangdepai = new ArrayList<>(); //碰牌 private List pongGroup = new ArrayList<>(); //吃牌 private List chowGroup = new ArrayList<>(); // 玩家座位号 public static int seat = 0; public static int playerId = 0; public static int cardToOut1 = 0; // 会话标识 public static String session = ""; // 访问令牌 public static String token = ""; //红中麻将算法 // private static HongZhongSuanFa hongZhongSuanFa = new HongZhongSuanFa(); private static ChangShaSuanFaTest changShaSuanFaTest = new ChangShaSuanFaTest(); // 公共的getter和setter方法 public List getChangShaCardInhand() { return changShaCardInhand; } public List getgangdepai() { return gangdepai; } public List getchangShaCardInhandgang() { return changShaCardInhandgang; } // 公共的getter和setter方法 public List getpongGroup() { return pongGroup; } public List getchowGroup() { return chowGroup; } public List getChuGuoCardInhand() { return changShachuguopai; } public Map getChuGuoPainum() { return chuGuoPainum; } /** * 出牌广播协议 812 * * @param command 协议号 * @param message 消息对象 * @return */ public static String drawCard(String command, Message message) { if (command.equalsIgnoreCase("812")) { ITObject param = message.param; if (param == null) { return null; } changShaCard = param.getInt("card"); } return null; } /** * 摸牌协议 819 * * @param command 协议号 * @param message 消息对象 * @return */ public String getCard(String command, Message message) { if (command.equalsIgnoreCase("819")) { ITObject param = message.param; if (param == null) { return null; } if (param.getInt("player") != null) { int drawnCard = param.getInt("card"); changShaSuanFaTest.drawnCards = drawnCard;//存储摸到的牌 changShaCardInhand.add(drawnCard); changShaSuanFaTest.analyzeHand(changShaCardInhand); } } return null; } /** * 判断是否应该碰牌 * * @param proposedCard 提议碰的牌 * @return 是否应该碰牌 */ public boolean shouldPong(int proposedCard) { // 直接调用hongZhongSuanFaTest中的shouldPong方法,它已经包含了所有需要的规则 return changShaSuanFaTest.shouldPong(proposedCard, changShaCardInhand); // return hongZhongSuanFaTest.shouldPong(proposedCard, Arrays.asList(305,304,303,207,207,204,204,208,208,201,201,412,412)); } public boolean shouldChow(int proposedCard) { return changShaSuanFaTest.shouldChow(proposedCard, changShaCardInhand); } /** * 初始化手牌协议 811 * * @param command 协议号 * @param message 消息对象 * @return */ public String cardInHead(String command, Message message, TaurusClient client) { if (command.equalsIgnoreCase("811")) { ITObject param = message.param; if (param == null) { return null; } // {bank_seat=1, laiziCard=0, laiziCard2=0, laiziCard2Before=0, jing=0, laiziCardBefore=0, card_list=[101, 103, 104, 201, 204, 207, 208, 209, 307, 309, 501, 502, 503]} ITArray cardList = param.getTArray("card_list"); for (int i = 0; i < cardList.size(); i++) { changShaCardInhand.add(cardList.getInt(i)); } // if (changShaCardInhand.size() > 13) { // outCard(client); // } } return null; } public static int[][] countTiles(List cardInHand) { int[][] counts = new int[5][10]; // 类型×值 for (Integer card : cardInHand) { if (card == 0) { continue; } counts[card / 100 - 1][card % 100]++; } return counts; } public static boolean isJiangPai(int card) { if (card % 100 == 2 || card % 100 == 5 || card % 100 == 8) { return true; } return false; } public static int checkduijiang(List cardInHand) { Map countMap = new HashMap<>(); for (Integer item : cardInHand) { countMap.put(item, countMap.getOrDefault(item, 0) + 1); } int jiangnum = 0; for (int key : countMap.keySet()) { if (isJiangPai(key) && countMap.get(key) >= 2) { jiangnum++; } } return jiangnum; } /** * 处理 吃,碰,杠,补,胡 * @param param * @param client * @return 吃 [TCP->814] data:{"tip_list":[{"type":1,"id":1,"opcard":[108,109],"weight":1,"card":107}]} 吃 碰 {"tip_list":[{"type":1,"id":1,"opcard":[206,205],"weight":1,"card":207},{"type":2,"id":2,"opcard":[207],"weight":2,"card":207}]} 碰补 {"tip_list":[{"type":2,"id":1,"opcard":[101],"weight":2,"card":101},{"type":3,"id":2,"opcard":[101],"weight":3,"card":101}]} 补 [TCP->814] data:{"tip_list":[{"type":5,"id":1,"opcard":[101],"weight":3,"card":101}]} 吃,碰,补,杠, {"tip_list":[{"type":1,"id":1,"opcard":[206,204],"weight":1,"card":205},{"type":1,"id":2,"opcard":[206,207],"weight":1,"card":205},{"type":2,"id":3,"opcard":[205],"weight":2,"card":205},{"type":3,"id":4,"opcard":[205],"weight":3,"card":205},{"type":3,"id":5,"opcard":[205],"weight":4,"card":205}]} 碰 {"tip_list":[{"type":2,"id":1,"opcard":[207],"weight":2,"card":207}]} 补,杠 {"tip_list":[{"type":5,"id":1,"opcard":[207],"weight":3,"card":207},{"type":5,"id":2,"opcard":[207],"weight":4,"card":207}]} //拟定: 1、对应的提示事件遍历 实行假设做了处理之后的结果 对应结果的对象 boolean isTing 是否听牌 boolean canTing 能否听牌 int tingNum 听多少张 int isDaHu 是否大胡 int guzhang 有多少孤章 int lastHands 差多少手 int id tiplist id List opcard int weight tiplist weight int card tiplist card int type tiplist type 2、通过遍历后的结果进行打分 打分系统: 已经听牌: ---> 40 操作后能听 ---> 20 操作之后散听 ---> -50 听多张,每一张:---> 3 孤章,每一张:----> -3 差手数:每一手 ----> -5 操作之前是否大胡 ----> 10 去掉大胡 -----> -10 先碰107,后补: {"tip_list":[{"type":5,"id":1,"opcard":[107],"weight":3,"card":107},{"type":5,"id":2,"opcard":[107],"weight":4,"card":107}]} 手上有3个摸一个204:开补 {"tip_list":[{"type":4,"id":1,"opcard":[204],"weight":3,"card":204},{"type":4,"id":2,"opcard":[204],"weight":4,"card":204}]} 手上有3个,对家打一个206:开补 {"tip_list":[{"type":3,"id":1,"opcard":[206],"weight":3,"card":206}]} */ public String actionCard(ITObject param, TaurusClient client){ ITArray tipList = param.getTArray("tip_list"); log.info("tipList" +tipList); ITObject params = TObject.newInstance(); int card = 0; //循环 List yupanhandcard = new ArrayList<>(); yupanhandcard.addAll(changShaCardInhand); //进行操作之前能否下听 List shifoutingpai = changShaSuanFaTest.handscardshifoutingpai(changShaCardInhand,chowGroup,pongGroup,gangdepai); boolean beforelisten = false;//记录操作之前的下听状态 System.out.println("shifoutingpai"+shifoutingpai); if (shifoutingpai.size() > 0) { beforelisten = true; } System.out.println("beforelisten"+beforelisten); //如果杠了之后还能继续听牌则杠 //优先处理胡牌 for(int i=0;i { }); return "胡牌"; } } //如果下听了,可以杠 for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); int type = firstTip.getInt("type"); int id = firstTip.getInt("id"); int weight = firstTip.getInt("weight"); card = firstTip.getInt("card"); if ((type == 5 || type == 3 || type==4)&&weight==4) { //判断开杠后是否能下听 List gangusecars = new ArrayList<>(); gangusecars.addAll(changShaCardInhand); if (type == 3) { Util.removeCard(gangusecars,card,3); List shifoutingpai3 = changShaSuanFaTest.handscardshifoutingpai(gangusecars,chowGroup,pongGroup,gangdepai); System.out.println(shifoutingpai3); if (shifoutingpai3.size() > 0) { //开杠 //判断是否杠了之后没有牌可以听 List allList = new ArrayList<>(); allList.addAll(changShaCardInhand); allList.addAll(changShachuguopai); int jutingnum = changShaSuanFaTest.getTingPainum(shifoutingpai3,allList); if (jutingnum==0){ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return "不开杠"; } Util.removeCard(changShaCardInhand,card,3); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); client.send("612", params, response -> { }); return "开杠"; }else{ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return "不开杠"; } } if (type == 4) { // Util.removeCard(changShaCardInhand,card,4); Util.removeCard(gangusecars,card,4); List shifoutingpai4 = changShaSuanFaTest.handscardshifoutingpai(gangusecars,chowGroup,pongGroup,gangdepai); if (shifoutingpai4.size() > 0) { //开杠 //判断是否杠了之后没有牌可以听 List allList = new ArrayList<>(); allList.addAll(changShaCardInhand); allList.addAll(changShachuguopai); int jutingnum = changShaSuanFaTest.getTingPainum(shifoutingpai4,allList); if (jutingnum==0){ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return "不开杠"; } Util.removeCard(changShaCardInhand,card,4); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); client.send("612", params, response -> { }); return "开杠"; }else{ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return "不开杠"; } } if (type == 5) { //Util.removeCard(changShaCardInhand,card,1); Util.removeCard(gangusecars,card,1); List shifoutingpai5 = changShaSuanFaTest.handscardshifoutingpai(gangusecars,chowGroup,pongGroup,gangdepai); if (shifoutingpai5.size() > 0) { //开杠 //判断是否杠了之后没有牌可以听 List allList = new ArrayList<>(); allList.addAll(changShaCardInhand); allList.addAll(changShachuguopai); int jutingnum = changShaSuanFaTest.getTingPainum(shifoutingpai5,allList); if (jutingnum==0){ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return "不开杠"; } Util.removeCard(changShaCardInhand,card,1); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); client.send("612", params, response -> { }); return "开杠"; }else{ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return "不开杠"; } } } } //判断是否是大胡 int beforeIsDahu = 0; beforeIsDahu = changShaSuanFaTest.checkDahu(yupanhandcard,chowGroup,pongGroup,gangdepai); System.out.println("bef:"+beforeIsDahu); //5、门清 if (yupanhandcard.size()==13&&beforelisten){ beforeIsDahu = 5;//门清 } //操作之前出现的牌 List allSeeCard = new ArrayList<>(); Map pingfenResult = new HashMap<>(); Map idObject = new HashMap<>(); //int bupaiid = 0;//补牌id for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); int type = firstTip.getInt("type"); int id = firstTip.getInt("id"); int weight = firstTip.getInt("weight"); card = firstTip.getInt("card"); ITArray opcard = TArray.newInstance(); opcard = firstTip.getTArray("opcard"); if (type == 6){ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); client.send("612", params, response -> { }); return "胡牌"; } //if((type==4||type==5||type==6)&&weight==3){ // bupaiid = id; // } //对应的数据 ITObject tmp = new TObject(); //处理听的结果 switch (type) { case 1: //吃 tmp = changShaSuanFaTest.pingguChi( beforelisten,card,opcard,yupanhandcard,beforeIsDahu,allSeeCard,chowGroup,pongGroup,gangdepai,changShachuguopai); break; case 2: //碰 tmp = changShaSuanFaTest.pingguPeng(beforelisten,card,opcard,yupanhandcard,beforeIsDahu,allSeeCard,chowGroup,pongGroup,gangdepai,changShachuguopai); break; default: break; } //记录下来事件 if(tmp.size()>0){ pingfenResult.put(id,tmp); } ITObject sj = new TObject(); sj.putInt("weight", weight); sj.putInt("type", type); sj.putTArray("opcard", opcard); idObject.put(id,sj); } //计算分数 System.out.println(pingfenResult); if(pingfenResult.size()>0){ int changeid=changShaSuanFaTest.suanfen(pingfenResult); System.out.println("changeid:"+changeid); //选择最优的分数 if (changeid==0){ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return null; }else { //获取 for(Map.Entry entry : idObject.entrySet()){ if(entry.getKey()==changeid){ ITObject tmp = entry.getValue(); System.out.println("tmp ++++++++++= " + tmp); if (tmp.getInt("type")==2){ //碰 ITArray outcards = tmp.getTArray("opcard"); for (int i = 0; i < outcards.size(); i++) { Util.removeCard(changShaCardInhand,outcards.getInt(0),2); } pongGroup.add(outcards.getInt(0)); pongGroup.add(outcards.getInt(0)); pongGroup.add(outcards.getInt(0)); }else if (tmp.getInt("type")==1){ //吃 ITArray outcards = tmp.getTArray("opcard"); for (int i = 0; i < outcards.size(); i++) { Util.removeCard(changShaCardInhand,outcards.getInt(i),1); } System.out.println("判断吃 +++++++++" + card); System.out.println("判断吃 ==========" + outcards); chowGroup.add(card); chowGroup.add(outcards.getInt(0)); chowGroup.add(outcards.getInt(1)); } } } params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", changeid); client.send("612", params, response -> { }); return null; } } //计算牌数 //如果 不吃,不碰,而且差三手牌情况,则补 //if (bupaiid>0) { for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); int type = firstTip.getInt("type"); int id = firstTip.getInt("id"); int weight = firstTip.getInt("weight"); card = firstTip.getInt("card"); Map map = new HashMap<>(); List tmpChangSch = new ArrayList<>(); tmpChangSch.addAll(yupanhandcard); ChangshaWinSplitCard.checkNormalHu(tmpChangSch, map); System.out.println("要不要补map:" + map); Map map2 = new HashMap<>(); List tmpChangSch2 = new ArrayList<>(); tmpChangSch2.addAll(yupanhandcard); if (type == 3) { Util.removeCard(tmpChangSch2,card,3); }else if(type==4){ Util.removeCard(tmpChangSch2,card,3); }else if(type==5){ Util.removeCard(tmpChangSch2,card,4); } ChangshaWinSplitCard.checkNormalHu(tmpChangSch2, map2); System.out.println("要不要补map2:" + map2); System.out.println(yupanhandcard); //假设补牌 //如果下听不能不能补牌 if(beforelisten){ System.out.println("b补"); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return null; } //去一张下听? Map> afterDahuOpbg = changShaSuanFaTest.quyizhangDahuTingPai(yupanhandcard,chowGroup,pongGroup,gangdepai); Map> afterOpbg = changShaSuanFaTest.quyizhangTingPai(yupanhandcard); if(type==4) { if (afterDahuOpbg.size() > 0 || afterOpbg.size() > 0) { System.out.println("bs补"); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return null; } } if (map.size() > 0 && weight==3) { if (map2.size() > 0) { //判断补牌后 if (Integer.parseInt(map2.get("remainingMelds").toString())>Integer.parseInt(map.get("remainingMelds").toString())&&Integer.parseInt(map.get("remainingMelds").toString())<=2){ System.out.println("b补"); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return null; }else{ //判断七对 int dh = changShaSuanFaTest.checkDahu(yupanhandcard,chowGroup,pongGroup,gangdepai); if (dh>0){ System.out.println("不补"); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return null; } System.out.println("补"); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); if (type == 3) { Util.removeCard(changShaCardInhand, card, 3); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } if (type == 4) { Util.removeCard(changShaCardInhand, card, 4); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } if (type == 5) { Util.removeCard(changShaCardInhand, card, 1); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } client.send("612", params, response -> { }); return null; } /*if (Integer.parseInt(map.get("remainingMelds").toString()) > 2) { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); if (type == 3) { Util.removeCard(changShaCardInhand, card, 3); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } if (type == 4) { Util.removeCard(changShaCardInhand, card, 4); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } if (type == 5) { Util.removeCard(changShaCardInhand, card, 1); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } client.send("612", params, response -> { }); return null; } else { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return null; } */ }else{ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); if (type == 3) { Util.removeCard(changShaCardInhand, card, 3); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } if (type == 4) { Util.removeCard(changShaCardInhand, card, 4); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } if (type == 5) { Util.removeCard(changShaCardInhand, card, 1); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); gangdepai.add(card); } client.send("612", params, response -> { }); return null; } } } params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); return null; } public String actionCardBak2(ITObject param, TaurusClient client) { ITArray tipList = param.getTArray("tip_list"); log.info("tipList" +tipList); //tipList[{opcard=[207, 208], weight=1, id=1, type=1, card=206}] boolean chiflag = false;//吃 boolean pengflag = false; //碰 boolean bupai = false; //补 boolean minggang = false; //杠 boolean angang = false; //暗杠 boolean penggang = false; //开杠 int card = 0;//当前 消息的牌 ITObject params = TObject.newInstance(); for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); int type = firstTip.getInt("type"); int id = firstTip.getInt("id"); int weight = firstTip.getInt("weight"); card = firstTip.getInt("card"); if (type == 6){ params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); client.send("612", params, response -> { }); return "胡牌"; } if (type == 1){ chiflag = true; } if (type == 2){ pengflag = true; } if (type == 3 && weight ==3){ //补 bupai = true; } if (type == 3 && weight ==4){ //杠 minggang = true; } if (type == 5){ penggang = true; } } /* //如果吃,没有碰 if (chiflag&&!pengflag){ chiNoPeng(tipList,card,client); } //如果有吃有碰 if (chiflag&&pengflag&&!minggang&&!penggang){ chiOrPeng(tipList,card,client); } //没有吃,有碰 if (!chiflag&&penggang&&!minggang&&!angang){ pengNoChi(tipList,card,client); } if (bupai&&!penggang&&!angang){ //补 } //杠 if (minggang||bupai||penggang){ gangNoChiPeng(tipList,card,client); }*/ return null; } /** * 处理吃 问题 * @param tipList * @param client */ /* public int chiNoPeng(ITArray tipList,int card,TaurusClient client){ ITObject params = TObject.newInstance(); params.putString("session", session + "," + token); //判断是否能吃 //1、吃之后能否下听 List shifoutingpai = TinHuChi.shifoutingpai(changShaCardInhand); if (shifoutingpai.size() == 0) { //没下听 //如果吃了可以立马下听,则吃 int chitingpaiid = changShaSuanFaTest.checkChiTingAction(card,changShaCardInhand); if (chitingpaiid>0){ //处理吃后的数据 params.putInt("qi", 0); params.putInt("id", chitingpaiid-1); //记录吃掉的牌 List> lists = new ArrayList<>(); lists.addAll(TinHuChi.checkChi(changShaCardInhand, card)); List integers = lists.get(chitingpaiid-1); List result1 = getOtherCards1(integers, card); chowGroup.add(card); chowGroup.add(result1.get(0)); chowGroup.add(result1.get(1)); changShaCardInhand.add(card); Util.removeCard(changShaCardInhand,result1.get(0),1); Util.removeCard(changShaCardInhand,result1.get(1),1); Util.removeCard(changShaCardInhand,card,1); client.send("612", params, response -> {}); return chitingpaiid; } //2、吃之后是否没了大胡 //判断是否满足7对 int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand); if (pisCardsCount>=4){ params.putInt("qi", 0); params.putInt("id", 0); }else{ //判断是否可以执行 清一色操作 boolean isChow = changShaSuanFaTest.checkAllSameSuitAll(card,changShaCardInhand,pongGroup,chowGroup,gangdepai); if (isChow){ //判断是否可以吃 //判断吃之后是否会破坏下听 //3、吃之后是否破坏牌型 int canchiId = changShaSuanFaTest.checkCanChiAction(card,changShaCardInhand); if (canchiId>0){ params.putInt("qi", 0); params.putInt("id", canchiId-1); //记录吃掉的牌 List> lists = new ArrayList<>(); lists.addAll(TinHuChi.checkChi(changShaCardInhand, card)); List integers2 = lists.get(canchiId-1); List result2 = getOtherCards1(integers2, card); chowGroup.add(card); chowGroup.add(result2.get(0)); chowGroup.add(result2.get(1)); changShaCardInhand.add(card); Util.removeCard(changShaCardInhand,result2.get(0),1); Util.removeCard(changShaCardInhand,result2.get(1),1); Util.removeCard(changShaCardInhand,card,1); client.send("612", params, response -> {}); return chitingpaiid; }else{ params.putInt("qi", 0); params.putInt("id", 0); } }else{ //不可以吃 params.putInt("qi", 0); params.putInt("id", 0); } } }else{ //不吃 //吃之后没有下听 params.putInt("qi", 0); params.putInt("id", 0); } client.send("612", params, response -> {}); return 0; } */ /** * 同时有吃有碰 * @param tipList * @param client */ /* public void chiOrPeng(ITArray tipList,int card,TaurusClient client){ ITObject params = TObject.newInstance(); //判断碰和吃 //判断牌型是否下听 params.putString("session", session + "," + token); List shifoutingpai = TinHuChi.shifoutingpai(changShaCardInhand); if (shifoutingpai.size() == 0) { //1、先判断是否碰之后破坏听牌 //2、如果能碰,则进入判断吃逻辑,对比吃、碰那个会更优 //3、判断吃或者碰之后都会破坏听牌,不能吃和碰 }else{ //有下听 先不做操作,后续判断换牌 params.putInt("qi", 0); params.putInt("id", 0); } client.send("612", params, response -> {}); } /** * 没吃,有碰 * @param tipList * @param client */ /* public void pengNoChi(ITArray tipList,int card,TaurusClient client){ ITObject params = TObject.newInstance(); client.send("612", params, response -> {}); }*/ /** * 杠没有吃,没有碰 * @param tipList * @param client */ /* public void gangNoChiPeng(ITArray tipList,int card,TaurusClient client){ ITObject params = TObject.newInstance(); client.send("612", params, response -> {}); } */ /** * 处理杠碰胡操作 * * @param param 消息参数 * @return */ /* public String actionCardbak(ITObject param, TaurusClient client) { TinHuPeng tinHuPeng = new TinHuPeng(); //获取碰杠胡参数 type 和id 后续算法接入,是否能让碰和杠 ITArray tipList = param.getTArray("tip_list"); int id = 0; int type = 0; int opcard = 0; int opcard1 = 0; int card = 0; //胡牌 ITObject params = TObject.newInstance(); for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); id = firstTip.getInt("id"); type = firstTip.getInt("type"); ITArray opcard2 = firstTip.getTArray("opcard"); if (type == 6) { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id); client.send("612", params, response -> { }); return "胡牌"; } } //吃杠 int type2 = 0; int opcard3 = 0; int id3 = 0; List gangCardInhand = new ArrayList<>(); gangCardInhand.addAll(changShaCardInhand); gangCardInhand.addAll(chowGroup); gangCardInhand.addAll(pongGroup); TingPaiChecker.TingResult tingResult = TingPaiChecker.checkTingPai(gangCardInhand); if (tingResult.isTingPai()) { //听牌状态 for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); type2 = firstTip.getInt("type"); opcard3 = firstTip.getTArray("opcard").getInt(0); id3 = firstTip.getInt("id"); boolean b = TinHuGang.canGang(gangCardInhand, opcard3, true); //杠牌后是否还能听牌 if (type2 == 3) { // int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand); // boolean gang = isAllSameSuitgang(changShaCardInhand, opcard3); if (b) { System.out.println("听牌 +++进入吃杠===============================------------------------------------------------"); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id3); Util.removeCard(changShaCardInhand, opcard3, 3); client.send("612", params, response -> { }); return "吃杠"; } else { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); } } } } else { for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); type2 = firstTip.getInt("type"); opcard3 = firstTip.getTArray("opcard").getInt(0); id3 = firstTip.getInt("id"); if (type2 == 3) { // int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand); // boolean gang = isAllSameSuitgang(changShaCardInhand, opcard3); // if (pisCardsCount < 5 && gang) { //不是七小对和清一色的情况下 才允许杠 // System.out.println("没有 +++ 听牌 +++进入吃杠===============================------------------------------------------------"); // // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", id3); // Util.removeCard(changShaCardInhand, opcard3, 3); // // client.send("612", params, response -> { // // }); // return "吃杠"; // } else { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); } } } TingPaiChecker.TingResult tingResult1 = TingPaiChecker.checkTingPai(gangCardInhand); if (tingResult1.isTingPai()) { for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); type2 = firstTip.getInt("type"); opcard3 = firstTip.getTArray("opcard").getInt(0); id3 = firstTip.getInt("id"); boolean c = TinHuGang.canGang(gangCardInhand, opcard3, false); //杠牌后是否还能听牌 if (type2 == 4) { System.out.println("最新自杠 还没进入下面,但是类型为4自杠了==========================="); if (c) { System.out.println("听牌 +++进入自杠===============================------------------------------------------------"); System.out.println("opcard3 ++++++++++++++++++ ++++++++++888 " + opcard3); System.out.println("id3 ++++++++++++++++++ ++++++++++7777 " + id3); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id3); Util.removeCard(changShaCardInhand, opcard3, 4); client.send("612", params, response -> { }); return "自杠"; } else { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); } } } } else { for (int i = 0; i < tipList.size(); i++) { TObject firstTip = (TObject) tipList.get(i).getObject(); type2 = firstTip.getInt("type"); if (type2 == 4) { System.out.println("放弃自杠111======================================="); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); client.send("612", params, response -> { }); } } } // for (int i = 0; i < tipList.size(); i++) { // TObject firstTip = (TObject) tipList.get(i).getObject(); // type2 = firstTip.getInt("type"); // opcard3 = firstTip.getTArray("opcard").getInt(0); // id3 = firstTip.getInt("id"); // // if (type2 == 3) { // int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand); // boolean gang = isAllSameSuitgang(changShaCardInhand, opcard3); // if (pisCardsCount < 5 && gang) { //不是七小对和清一色的情况下 才允许杠 // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", id3); // Util.removeCard(changShaCardInhand, opcard3, 3); // // client.send("612", params, response -> { // // }); // return "吃杠"; // } else { // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", 0); // client.send("612", params, response -> { // // }); // // } // } // } int id1 = 0; int type1 = 0; //吃牌判断 boolean b = false; //碰牌判断 boolean a = false; if (tipList.size() > 0) { TObject firstTip = (TObject) tipList.get(0).getObject(); id1 = firstTip.getInt("id"); type1 = firstTip.getInt("type"); ITArray opcard2 = firstTip.getTArray("opcard"); card = firstTip.getInt("card"); b = TinHuChi.canChi(changShaCardInhand, card); List> lists = TinHuChi.checkChi(changShaCardInhand, card); opcard = firstTip.getTArray("opcard").getInt(0); if (type1 == 1) { opcard1 = firstTip.getTArray("opcard").getInt(1); } } System.out.println("进入吃type:" + type1); if (type1 == 2) { boolean isChow = changShaSuanFaTest.isAllSameSuit1(changShaCardInhand); if (isChow) { params.putString("session", session + "," + token); params.putInt("qi", 1); params.putInt("id", 0); } else { List shifoutingpai = TinHuChi.shifoutingpai(changShaCardInhand); //目前手牌没有听牌 if (shifoutingpai.size() == 0) { //判断是否满足7对 int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand); if (pisCardsCount >= 5) { params.putString("session", session + "," + token); params.putInt("qi", 1); params.putInt("id", 0); } else { List temphand = new ArrayList<>(); temphand.addAll(changShaCardInhand); temphand.add(opcard); Util.removeCard(temphand, opcard, 3); List checktingpai1 = TinHuChi.checktingpai(temphand); System.out.println("checktingpai1 碰牌" + checktingpai1); //碰完牌后打牌后可以听牌 if (checktingpai1.size() > 0) { System.out.println("===============进入听胡碰牌================== ++++ "); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id1); pongGroup.add(opcard); pongGroup.add(opcard); pongGroup.add(opcard); Util.removeCard(changShaCardInhand, opcard, 2); } else { //碰之前的map Map map = new HashMap<>(); //碰之后的map Map map2 = new HashMap<>(); //先判断碰之前还需要几手牌,以及孤章 // int jiangnum = checkduijiang(changShaCardInhand); List tmpChangSch = new ArrayList<>(); tmpChangSch.addAll(changShaCardInhand); tmpChangSch.add(opcard); ChangshaWinSplitCard.checkNormalHu(tmpChangSch, map); //碰之后 List pengtemphand = new ArrayList<>(); pengtemphand.addAll(tmpChangSch); Util.removeCard(pengtemphand, opcard, 3); ChangshaWinSplitCard.checkNormalHu(pengtemphand, map2); //判断两个map是否找到更优 System.out.println("碰之前 map1:" + Integer.parseInt(map.get("remainingMelds").toString())); System.out.println("碰之后 map2:" + Integer.parseInt(map2.get("remainingMelds").toString())); //碰之后的手数小于碰之前的手数,可以碰 if (Integer.parseInt(map2.get("remainingMelds").toString()) < Integer.parseInt(map.get("remainingMelds").toString())) { System.out.println("===============碰之后的手数小于碰之前的手数,可以碰 决定碰牌================== ++++ "); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id1); pongGroup.add(opcard); pongGroup.add(opcard); pongGroup.add(opcard); Util.removeCard(changShaCardInhand, opcard, 2); } else if (Integer.parseInt(map2.get("remainingMelds").toString()) == Integer.parseInt(map.get("remainingMelds").toString())) { //碰完后和碰之前手数相等,需要判断孤章数量 //碰之后的数量 int size2 = ((List) map2.get("cardResiue")).size(); System.out.println("碰之后的孤章数量 size" + size2); int size1 = ((List) map.get("cardResiue")).size(); System.out.println("碰之前的孤章数量 size" + size1); if (size2 < size1) { System.out.println("===============碰之后的孤章数量 小于 碰之前的孤章数量可以碰 ================== ++++ "); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id1); pongGroup.add(opcard); pongGroup.add(opcard); pongGroup.add(opcard); Util.removeCard(changShaCardInhand, opcard, 2); } //碰之后的手数大于碰之前的手数,或者碰之后的孤章数量大于碰之前的孤章数量不能碰 } else if (Integer.parseInt(map2.get("remainingMelds").toString()) > Integer.parseInt(map.get("remainingMelds").toString()) || ((List) map2.get("cardResiue")).size() > ((List) map.get("cardResiue")).size()) { params.putString("session", session + "," + token); params.putInt("qi", 1); params.putInt("id", 0); } } } } //听牌的时候先不碰 if (shifoutingpai.size() > 0) { System.out.println("听牌的时候先不碰++++++++++++++++++++++++++++++++"); params.putString("session", session + "," + token); params.putInt("qi", 1); params.putInt("id", 0); } } // a = tinHuPeng.canPeng(changShaCardInhand, opcard); // ChangShaSuanFaTest changShaSuanFaTest = new ChangShaSuanFaTest(); // int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand);//分析七小对 // boolean peng = changShaSuanFaTest.isAllSameSuit1(changShaCardInhand); // if (a && !ChangShaSuanFaTest.isTin) { // System.out.println("===============进入听胡碰牌==============================="); // // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", id1); // pongGroup.add(opcard); // pongGroup.add(opcard); // pongGroup.add(opcard); // Util.removeCard(changShaCardInhand, opcard, 2); // // } else { // // 根据规则判断是否应该碰牌 // if (shouldPong(opcard) && pisCardsCount < 5 && !peng && !isTinPeng) { // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", id1); // pongGroup.add(opcard); // pongGroup.add(opcard); // pongGroup.add(opcard); // Util.removeCard(changShaCardInhand, opcard, 2); // } else { // params.putString("session", session + "," + token); // params.putInt("qi", 1); // 放弃碰牌 // params.putInt("id", 0); // // } // } } else if (type1 == 3) { int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand);//分析七小对 boolean gang = changShaSuanFaTest.isAllSameSuit1(changShaCardInhand); if (pisCardsCount < 5 && !gang) { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", id1); Util.removeCard(changShaCardInhand, opcard, 3); } else { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); } } else if (type1 == 1) { // int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand);//分析七小对 boolean isChow = changShaSuanFaTest.isAllSameSuit1(changShaCardInhand); if (isChow) { params.putString("session", session + "," + token); params.putInt("qi", 1); params.putInt("id", 0); } else { //判断当前手牌是否已经听牌 已经听牌了就不要再吃牌了 List shifoutingpai = TinHuChi.shifoutingpai(changShaCardInhand); //目前手牌没有听牌 if (shifoutingpai.size() == 0) { //判断是否满足7对 int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand); if (pisCardsCount >= 5) { params.putString("session", session + "," + token); params.putInt("qi", 1); params.putInt("id", 0); } else { List> lists = new ArrayList<>(); lists.addAll(TinHuChi.checkChi(changShaCardInhand, card)); int index = 0; int flag = 0; for (List list : lists) { List temphand = new ArrayList<>(); temphand.addAll(changShaCardInhand); temphand.add(card); Util.removeCard(temphand, list.get(0), 1); Util.removeCard(temphand, list.get(1), 1); Util.removeCard(temphand, list.get(2), 1); List checktingpai1 = TinHuChi.checktingpai(temphand); if (checktingpai1.size() > 0) { flag = index + 1; } index++; System.out.println("checktingpai1 吃牌 " + checktingpai1); } // TODO: 2026/1/1 // 1.需要补充 没听牌也可以吃 但是吃之后要比吃之前的手牌强 也就是可听数量变多 // 2.听牌后也能吃牌,要比吃之前的牌强 // 3.碰也一样要加 if (flag > 0) { System.out.println("===============进入听胡吃牌================== ++++ " + flag); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", flag); int index1 = flag - 1; List integers = lists.get(index1); List result1 = getOtherCards1(integers, card); chowGroup.add(card); chowGroup.add(result1.get(0)); chowGroup.add(result1.get(1)); changShaCardInhand.add(card); Util.removeCard(changShaCardInhand, integers.get(0), 1); Util.removeCard(changShaCardInhand, integers.get(1), 1); Util.removeCard(changShaCardInhand, integers.get(2), 1); } else { Map map = new HashMap<>(); Map map2 = new HashMap<>(); //吃之前的逻辑 List> lists1 = TinHuChi.checkChi(changShaCardInhand, card); int jiangnum = checkduijiang(changShaCardInhand); List tmpChangSch = new ArrayList<>(); tmpChangSch.addAll(changShaCardInhand); tmpChangSch.add(card); ChangshaWinSplitCard.checkNormalHu(tmpChangSch, map); System.out.println("checkNormalHu" + map.get("cardResiue")); System.out.println("checktingpai1" + lists1); int index1 = 0; int flag1 = 0; for (List list : lists1) { List temphand = new ArrayList<>(); temphand.addAll(tmpChangSch); Util.removeCard(temphand, list.get(0), 1); Util.removeCard(temphand, list.get(1), 1); Util.removeCard(temphand, list.get(2), 1); ChangshaWinSplitCard.checkNormalHu(temphand, map2); //判断两个map是否找到更优 System.out.println("map1:" + Integer.parseInt(map.get("remainingMelds").toString())); System.out.println("map2:" + Integer.parseInt(map2.get("remainingMelds").toString())); if (Integer.parseInt(map2.get("remainingMelds").toString()) < Integer.parseInt(map.get("remainingMelds").toString())) { flag1 = index1 + 1; } else if (Integer.parseInt(map2.get("remainingMelds").toString()) == Integer.parseInt(map.get("remainingMelds").toString())) { int size2 = ((List) map2.get("cardResiue")).size(); System.out.println("size2" + size2); int size1 = ((List) map.get("cardResiue")).size(); System.out.println("size1" + size1); if (size2 < size1) { flag1 = index1 + 1; } //如果手里没有将,则可以吃 if (jiangnum > 0) { int chihoujiangnum = checkduijiang(temphand); if (chihoujiangnum > 0) { //吃之后还有将 flag1 = index1 + 1; } } else { System.out.println("没队将"); //孤章1张 差一手 不是将 而且card不是将 if (Integer.parseInt(map.get("remainingMelds").toString()) == 1 && size1 == 1 && !isJiangPai(((List) map.get("cardResiue")).get(0)) && !isJiangPai(card)) { //吃 break; } flag1 = index1 + 1; // break; } } index1++; } if (flag1 > 0) { System.out.println("flag1:" + flag1); params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", flag1); int index2 = flag1 - 1; if (index2 >= lists.size()) { index2 = 0; } System.out.println("index2:" + index2); System.out.println("lists:" + lists); List integers = new ArrayList<>(); integers.addAll(lists.get(index2)); List result2 = getOtherCards1(integers, card); chowGroup.add(card); chowGroup.add(result2.get(0)); chowGroup.add(result2.get(1)); changShaCardInhand.add(card); Util.removeCard(changShaCardInhand, integers.get(0), 1); Util.removeCard(changShaCardInhand, integers.get(1), 1); Util.removeCard(changShaCardInhand, integers.get(2), 1); } else { params.putString("session", session + "," + token); params.putInt("qi", 1); params.putInt("id", 0); } } } } //听牌的时候先不吃 if (shifoutingpai.size() > 0) { System.out.println("听牌的时候先不吃++++++++++++++++++++++++++++++++"); params.putString("session", session + "," + token); params.putInt("qi", 1); params.putInt("id", 0); } // if (b && TinHuChi.isMoreThanLast() && !ChangShaSuanFaTest.isTin) { // // System.out.println("===============进入听胡吃牌=================="); // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", 1); // // chowGroup.add(card); // chowGroup.add(opcard); // chowGroup.add(opcard1); //// changShachuguopai.add(card); // Util.removeCard(changShaCardInhand, opcard, 1); // Util.removeCard(changShaCardInhand, opcard1, 1); //// }else { //// params.putString("session", session + "," + token); //// params.putInt("qi", 1); //// params.putInt("id", 0); //// } // } else { // System.out.println("isTin ++++++++++++++++++++++++++++++++++++" + isTinChi); // if (shouldChow(card) && pisCardsCount < 5 && !isChow && !isTinChi) { // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", 1); // chowGroup.add(card); // chowGroup.add(opcard); // chowGroup.add(opcard1); // // Util.removeCard(changShaCardInhand, opcard, 1); // Util.removeCard(changShaCardInhand, opcard1, 1); // } else { // params.putString("session", session + "," + token); // params.putInt("qi", 1); // params.putInt("id", 0); // } // } //自杠 // } else if (type1 == 4) { //// TingPaiChecker.TingResult tingResult1 = TingPaiChecker.checkTingPai(gangCardInhand); // // if (tingResult1.isTingPai()) { // boolean c = TinHuGang.canGang(gangCardInhand, opcard, false); //杠牌后是否还能听牌 // if (c) { // System.out.println("听牌 +++进入自杠===============================------------------------------------------------"); // // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", 1); // Util.removeCard(changShaCardInhand, opcard, 4); // // } else { // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", 0); // } // } else { //// int pisCardsCount = changShaSuanFaTest.countPairs(changShaCardInhand);//分析七小对 //// boolean gang = changShaSuanFaTest.isAllSameSuit1(changShaCardInhand); //// if (pisCardsCount < 5 && !gang) { // System.out.println("没有 +++ 听牌 +++进入自杠===============================------------------------------------------------"); //// //// params.putString("session", session + "," + token); //// params.putInt("qi", 0); //// params.putInt("id", 1); //// Util.removeCard(changShaCardInhand, opcard, 4); //// } else { // params.putString("session", session + "," + token); // params.putInt("qi", 0); // params.putInt("id", 0); //// } // // } // // // // 碰后补杠 // } } } else if (type1 == 5) { params.putString("session", session + "," + token); params.putInt("qi", 0); params.putInt("id", 0); // Util.removeCard(changShaCardInhand, opcard, 1); // } } client.send("612", params, response -> { }); return null; } */ public static List getOtherCards1(List integers, int card) { List result = new ArrayList<>(); for (Integer num : integers) { if (num != card) { result.add(num); } } return result; } public static boolean isAllSameSuitgang(List handCards, int opcard3) { // 统计各花色的牌数量 Map suitCountMap = new HashMap<>(); for (Integer card : handCards) { int suit = card / 100; // 获取花色,100=万,200=筒,300=条 suitCountMap.put(suit, suitCountMap.getOrDefault(suit, 0) + 1); } // 检查是否有花色的牌数量超过8张 for (Map.Entry entry : suitCountMap.entrySet()) { int suit = entry.getKey(); int count = entry.getValue(); if (count >= 9) { // 检查杠牌的花色是否与当前花色一致 int gangSuit = opcard3 / 100; if (suit == gangSuit) { return true; } else { return false; } } } return true; } public static String changePlayer(String command, Message message) { if (command.equalsIgnoreCase("820")) { ITObject param = message.param; if (param == null) { return null; } } return null; } /** * 出牌方法 */ // public String outCard(TaurusClient client, List list) { public String outCard(TaurusClient client, Map> playerOutcardsMap, Map> playerchisMap, Map> playerpengsMap, Map> playermingsMap, Map> playerzisMap) { // playerOutcardsMap + playerchisMap 传到 outCardSuanFa //对出牌进行整合 List resultList = new ArrayList<>(); for (List cards : playerOutcardsMap.values()) { resultList.addAll(cards); } for (List chis : playerchisMap.values()) { resultList.addAll(chis); } for (List pengs : playerpengsMap.values()) { resultList.addAll(pengs); } for (List minggangs : playermingsMap.values()) { resultList.addAll(minggangs); } for (List zigang : playerzisMap.values()) { resultList.addAll(zigang); } // 长沙麻将出牌 String changShaOutCard = changShaSuanFaTest.outCardSuanFa(changShaCardInhand, pongGroup, chowGroup, gangdepai, resultList); // String changShaOutCard = changShaSuanFaTest.outCardSuanFa(list, changShaCard,pongGroup); ITObject params = TObject.newInstance(); int cardToOut; if (StringUtil.isNotEmpty(changShaOutCard)) { cardToOut = Integer.parseInt(changShaOutCard); } else { cardToOut = changShaCardInhand.get(0); } params.putInt("card", cardToOut); int outCountBefore = changShachuguopai.size(); // 当前历史出牌数量 // 第n次出牌时,发送前n-1张出牌 if (outCountBefore >= 1) { // 发送前n-1张(所有历史出牌) List cardsToSend = changShachuguopai.subList(0, outCountBefore); params.putTArray("outcard_list", CardUtil.maJiangToTArray(cardsToSend)); } params.putTArray("card_list", CardUtil.maJiangToTArray(changShaCardInhand)); // 将当前出的牌添加到历史出牌列表 changShachuguopai.add(cardToOut); // 从手牌中移除 changShaCardInhand.remove(Integer.valueOf(cardToOut)); params.putString("session", session + "," + token); client.send("611", params, response -> { }); return null; } /** * 删除出过的牌组 * * @param param * @return */ public String shanchuchuguopai(ITObject param) { if (param == null) { return null; } Integer card = param.getInt("card"); // 操作牌值 Integer type = param.getInt("type"); // 操作类型 Integer from_seat = param.getInt("from_seat"); // 牌来源座位 Integer playerid = param.getInt("playerid"); String sql2 = String.format("SELECT id FROM `account` WHERE jiqiren=9998"); try { ITArray robotId2 = DataBase.use().executeQueryByTArray(sql2); List robotIdsList = new ArrayList<>(); for (int j = 0; j < robotId2.size(); j++) { robotIdsList.add(robotId2.getTObject(j).getInt("id")); } if (!robotIdsList.contains(playerid)) { if (type == 2 || type == 3 || type == 5 || type == 1) { // 碰,杠 getChuGuoCardInhand().remove(Integer.valueOf(card)); } } } catch (SQLException e) { e.printStackTrace(); } return null; } public static void main(String[] args) { HuNanChangSha huNanChangSha = new HuNanChangSha(); ITObject params = TObject.newInstance(); TaurusClient tc = new TaurusClient("127.0.0.1","10", TaurusClient.ConnectionProtocol.Tcp); List hands1 = new ArrayList<>(); hands1.add(209); hands1.add(209); hands1.add(209); hands1.add(208); hands1.add(208); hands1.add(207); hands1.add(207); hands1.add(206); hands1.add(205); hands1.add(104); hands1.add(104); // hands1.add(105); //hands1.add(103); //hands1.add(102); int card= 203; huNanChangSha.changShaCardInhand.addAll(hands1); TArray tiplist= new TArray(); ITArray opcard = TArray.newInstance(); opcard.addInt(102); // opcard.addInt(205); // opcard.addInt(203); TObject tob = new TObject(); tob.putInt("weight",3); tob.putInt("id",1); tob.putInt("type",4); tob.putInt("card",card); tob.putTArray("opcard", opcard); //tiplist.addTObject(tob); ITArray opcard2 = TArray.newInstance(); // opcard2.addInt(106); opcard2.addInt(107); TObject tob2 = new TObject(); tob2.putInt("weight",5); tob2.putInt("id",2); tob2.putInt("type",5); tob2.putInt("card",card); tob2.putTArray("opcard", opcard2); // tiplist.addTObject(tob2); ITArray opcard3 = TArray.newInstance(); opcard3.addInt(204); opcard3.addInt(205); TObject tob3 = new TObject(); tob3.putInt("weight",1); tob3.putInt("id",1); tob3.putInt("type",1); tob3.putInt("card",card); tob3.putTArray("opcard", opcard3); tiplist.addTObject(tob3); params.putTArray("tip_list",tiplist); System.out.println(params); //已经吃掉数据 // huNanChangSha.chowGroup.add(205); //huNanChangSha.chowGroup.add(204); // huNanChangSha.chowGroup.add(206); //huNanChangSha.chowGroup.add(201); // huNanChangSha.chowGroup.add(202); // huNanChangSha.chowGroup.add(203); // huNanChangSha.chowGroup.add(206); //huNanChangSha.chowGroup.add(204); //huNanChangSha.chowGroup.add(205); String res = huNanChangSha.actionCard(params,tc); System.out.println(res); } }