master
fpgajie 2026-01-07 20:07:36 +08:00
parent 34b8efc4f8
commit 08d8666e50
30 changed files with 504 additions and 274 deletions

Binary file not shown.

View File

@ -1604,48 +1604,61 @@ public class HuNanChangSha {
ITObject params = TObject.newInstance();
TaurusClient tc = new TaurusClient("127.0.0.1","10", TaurusClient.ConnectionProtocol.Tcp);
List<Integer> hands1 = new ArrayList<>();
hands1.add(209);
hands1.add(209);
hands1.add(207);
hands1.add(207);
hands1.add(202);
hands1.add(202);
hands1.add(206);
hands1.add(202);
hands1.add(205);
hands1.add(109);
hands1.add(109);
hands1.add(109);
hands1.add(102);
hands1.add(104);
hands1.add(107);
hands1.add(106);
hands1.add(105);
hands1.add(104);
hands1.add(102);
hands1.add(102);
hands1.add(203);
hands1.add(202);
hands1.add(201);
int card= 109;
huNanChangSha.changShaCardInhand.addAll(hands1);
TArray tiplist= new TArray();
ITArray opcard = TArray.newInstance();
opcard.addInt(109);
opcard.addInt(207);
opcard.addInt(206);
// opcard.addInt(203);
TObject tob = new TObject();
tob.putInt("weight",1);
tob.putInt("id",1);
tob.putInt("type",2);
tob.putInt("type",1);
tob.putInt("card",card);
tob.putTArray("opcard", opcard);
tiplist.addTObject(tob);
//tiplist.addTObject(tob);
ITArray opcard2 = TArray.newInstance();
opcard2.addInt(109);
// opcard2.addInt(206);
TObject tob2 = new TObject();
tob2.putInt("weight",4);
tob2.putInt("id",2);
tob2.putInt("type",3);
tob2.putInt("weight",1);
tob2.putInt("id",1);
tob2.putInt("type",2);
tob2.putInt("card",card);
tob2.putTArray("opcard", opcard2);
tiplist.addTObject(tob2);
ITArray opcard3 = TArray.newInstance();
opcard2.addInt(202);
// opcard2.addInt(206);
TObject tob3 = new TObject();
tob3.putInt("weight",3);
tob3.putInt("id",2);
tob3.putInt("type",3);
tob3.putInt("card",card);
tob3.putTArray("opcard", opcard2);
// tiplist.addTObject(tob3);
params.putTArray("tip_list",tiplist);
System.out.println(params);
//已经吃掉数据

View File

@ -1296,6 +1296,21 @@ public class JiQiRens {
} else {
//
//重连
if ("22".equalsIgnoreCase(wanfaId)) { //湖南红中麻将
client = new TaurusClient("8.138.242.190:6421", "game", TaurusClient.ConnectionProtocol.Tcp);
}
if ("10".equalsIgnoreCase(wanfaId)) {
client = new TaurusClient("127.0.0.1:6311", "game", TaurusClient.ConnectionProtocol.Tcp);
}
//
if ("66".equalsIgnoreCase(wanfaId)) {
client = new TaurusClient("8.138.242.190:6841", "game", TaurusClient.ConnectionProtocol.Tcp);
}
client.connect();
}
}
});

View File

@ -508,6 +508,11 @@ public class ChangShaSuanFaTest {
}
//先拆对子
//再拆门子
ai ai1 = new ai();
// ChangshaMahjongAI ai = new ChangshaMahjongAI();
PlayerState playerState = new PlayerState();
@ -532,17 +537,17 @@ public class ChangShaSuanFaTest {
}
int bestDiscard = ai1.findBestDiscard(playerState);
//int bestDiscard = ai1.findBestDiscard(playerState);
// System.out.println("bestDiscard:"+bestDiscard);
if (bestDiscard != 0) {
/* if (bestDiscard != 0) {
if (ai1.isTinAi) {
isTin = true;
}
System.out.println("Ai出牌长麻 ++++++++++++++++++++++++++++++++++++++");
log.info("Ai出牌长麻===============================");
return String.valueOf(bestDiscard);
}
}*/
@ -3833,15 +3838,15 @@ public class ChangShaSuanFaTest {
}
boolean pph = false;
//3、碰碰胡
if (pengGrop.size()==3){
if (pengGrop.size()==3&&chowGrop.size()==0){
if (cpairs>3){
return 3;
}
}else if (pengGrop.size()==6){
}else if (pengGrop.size()==6&&chowGrop.size()==0){
if (cpairs>2){
return 3;
}
}else if (pengGrop.size()==9){
}else if (pengGrop.size()==9&&chowGrop.size()==0){
if (cpairs>1){
return 3;
}
@ -3989,8 +3994,10 @@ public class ChangShaSuanFaTest {
if (entry.getValue().getInt("guzhang")>0){
tmp= tmp+entry.getValue().getInt("guzhang")*2;
}
System.out.println("tmp:"+tmp);
fell.put(entry.getKey(), tmp);
}
//找分数最高的id
int dangqianfen = 0;
int dangqianid = 0;
@ -4141,7 +4148,15 @@ public class ChangShaSuanFaTest {
Map<String, Object> map2 = new HashMap<>();
System.out.println(checkCards);
Map<Integer,List<Integer>> xiatingList = new HashMap<>();
pengGrop.add(card);
pengGrop.add(card);
pengGrop.add(card);
map2 = quyizhangChayou(checkCards,chowGroup,pengGrop,gangGrop,xiatingList);
Util.removeCard(pengGrop,card,3);
pengGrop.add(card);
pengGrop.add(card);
System.out.println("map2:"+map2);
System.out.println("xiatingList:"+xiatingList);
//比对
@ -4221,6 +4236,19 @@ public class ChangShaSuanFaTest {
chiob.putInt("teshu",5);
}
}
//检测是否有4对
int duizi = countPairs(yupanhandcard);
if (duizi>=4&&pengGrop.size()==0){
chiob.putInt("teshu",5);
}
if (duizi>=3&&pengGrop.size()==1){
chiob.putInt("teshu",8);
}
if (duizi>=2&&pengGrop.size()==2){
chiob.putInt("teshu",10);
}
System.out.println("peng:"+chiob);
return chiob;
}
@ -4328,7 +4356,18 @@ public class ChangShaSuanFaTest {
Map<String, Object> map2 = new HashMap<>();
System.out.println(checkCards);
Map<Integer,List<Integer>> xiatingList = new HashMap<>();
chowGroup.add(card);
for (int i=0;i<opcard.size();i++){
chowGroup.add(opcard.getInt(i));
}
map2 = quyizhangChayou(checkCards,chowGroup,pengGrop,gangGrop,xiatingList);
Util.removeCard(chowGroup,card,1);
for (int i=0;i<opcard.size();i++){
Util.removeCard(chowGroup,opcard.getInt(i),1);
}
System.out.println("map2:"+map2);
System.out.println("xiatingList:"+xiatingList);
//比对
@ -4390,7 +4429,8 @@ public class ChangShaSuanFaTest {
*/
public static List<Integer> handscardshifoutingpai(List<Integer> cardhand,List<Integer>chowGroup,List<Integer> pongGroup,List<Integer> gangdepai) {
List<Integer> tpcards = new ArrayList<>();
List<Integer> tmphc = cardhand;
List<Integer> tmphc = new ArrayList<>();
tmphc.addAll(cardhand);
for (int j = 101; j <= 109; j++) {
WinCard win = new WinCard(tmphc, j);
if (win.tryWin()) {
@ -4398,8 +4438,9 @@ public class ChangShaSuanFaTest {
tpcards.add(j);
}
}
Paixing px = new Paixing();
if(px.tingCheck(cardhand,chowGroup,pongGroup,gangdepai)){
if(px.tingCheck(tmphc,chowGroup,pongGroup,gangdepai)){
if (!tpcards.contains(j)) {
tpcards.add(j);
}
@ -4413,15 +4454,13 @@ public class ChangShaSuanFaTest {
tpcards.add(k);
}
}
if(px.tingCheck(cardhand,chowGroup,pongGroup,gangdepai)){
if(px.tingCheck(tmphc,chowGroup,pongGroup,gangdepai)){
if (!tpcards.contains(k)) {
tpcards.add(k);
}
}
}
//如果没有则检测大胡
return tpcards;
}
@ -4465,7 +4504,9 @@ public class ChangShaSuanFaTest {
Map<String, Object> map = new HashMap<>();
Map<Integer,Map<String, Object>> bigMap = new HashMap<>();
List<Integer> tmphc = cardhand;
List<Integer> tmphc = new ArrayList<>();
tmphc.addAll(cardhand);
System.out.println("tmphc1:"+tmphc);
for (int i = 0; i < cardhand.size(); i++) {
int tmpcard = tmphc.get(0);
tmphc.remove(0);
@ -4476,18 +4517,22 @@ public class ChangShaSuanFaTest {
//检查是否能下听
List<Integer> tmxt = new ArrayList<>();
tmxt =handscardshifoutingpai(tmphc,chowGroup,pongGroup,gangdepai);
tmxt = handscardshifoutingpai(tmphc,chowGroup,pongGroup,gangdepai);
if (tmxt.size()>0){
xiatingList.put(tmpcard,tmxt);
}
tmphc.add(tmpcard);
}
System.out.println(bigMap);
System.out.println("吃之后");
//遍历找最优解
if (bigMap.size()==0){
return map;
}
Map<String, Object> bestmap = gaiBestCardInMap(bigMap);
return bestmap;
}
private static Map<String, Object> gaiBestCardInMap(Map<Integer,Map<String, Object>> map){
@ -4505,6 +4550,7 @@ public class ChangShaSuanFaTest {
}else if (tmpr==entr){
List<Integer> tl = (List<Integer>)tmpmap.get("cardResiue");
List<Integer> enl = (List<Integer>)entry.getValue().get("cardResiue");
if (tl.size()>enl.size()){
tmpmap = entry.getValue();
}
@ -4521,6 +4567,7 @@ public class ChangShaSuanFaTest {
}
}
}
return tmpmap;
}
@ -4528,20 +4575,20 @@ public class ChangShaSuanFaTest {
// 测试用例没有258将牌的情况
List<Integer> test1 = new ArrayList<Integer>();
test1.add(109);
test1.add(109);
test1.add(208);
test1.add(208);
test1.add(208);
test1.add(201);
test1.add(201);
test1.add(108);
test1.add(107);
test1.add(107);
test1.add(107);
test1.add(104);
test1.add(102);
test1.add(103);
test1.add(102);
test1.add(103);
test1.add(102);
test1.add(101);
test1.add(101);
test1.add(101);
@ -4574,7 +4621,7 @@ public class ChangShaSuanFaTest {
//gangguopai.add(206);
//gangguopai.add(206);
int card = 105;
int card = 202;
List<Integer>pengCard = new ArrayList<>();
// pengCard.add(102);
//出牌求优

View File

@ -2,10 +2,82 @@ package taurus.util;
import com.game.Util;
import java.sql.Array;
import java.util.*;
import java.util.stream.Collectors;
public class ChangshaWinSplitCard {
// 获取数值
// 获取数值
public static int GetCardValue(int cbCardData) {
return cbCardData % 100;
}
// 获取花色
public static int GetCardColor(int cbCardData) {
return cbCardData / 100;
}
// 扑克转换
public static int SwitchToCardData(int cbCardIndex) {
int cbCardColor = cbCardIndex / 10;
int cbCardValue = cbCardIndex % 10;
if (cbCardIndex < 27) { // 9 -> 200 + 1 //10 -> 202 //11 -> 203 // 17 -> 209 // 18 -> 301 19->302 20 ->
// 303 26->309
if (cbCardValue + (cbCardColor + 1) >= 10) {
return (cbCardColor + 2) * 100 + (cbCardValue + (cbCardColor + 1)) % 10 + 1;
} else {
return (cbCardColor + 1) * 100 + cbCardValue + (cbCardColor + 1);
}
} else { // 27 -> 400 //28 -> 403 // 29 -> 406 // 30 -> 409 //31 -> 412 // 32 -> 415 //
// 33 -> 418
if (cbCardValue + (cbCardColor + 1) >= 10) {
return (cbCardColor + 2) * 100 + (cbCardValue + (cbCardColor + 1)) % 10 * 3;
} else {
return (cbCardColor + 1) * 100 + (cbCardValue + cbCardColor) * 3;
}
}
}
// 扑克转换
public static int SwitchToCardIndex(int cbCardData) {
// 扑克属性
int cbCardColor = GetCardColor(cbCardData);
int cbCardValue = GetCardValue(cbCardData);
if (cbCardColor <= 3) {
return (cbCardColor - 1) * 10 + cbCardValue - cbCardColor;
} else {
return (cbCardColor - 1) * 10 + cbCardValue / 3 - cbCardColor + 1;
}
}
// 扑克转换
public static int[] SwitchToCardData(List<Integer> cardInhand) {
int[] cardIndex = new int[34];
for (int i = 0; i < cardIndex.length; i++) {
cardIndex[i] = 0;
}
for (int i = 0; i < cardInhand.size(); i++) {
int pos = SwitchToCardIndex(cardInhand.get(i));
cardIndex[pos]++;
}
return cardIndex;
}
// 扑克转换
public static List<Integer> SwitchToCardIndex(int[] cardIndex) {
List<Integer> cardIndexList = new ArrayList<Integer>();
for (int i = 0; i < cardIndex.length; i++) {
for (int j = 0; j < cardIndex[i]; j++) {
int card = SwitchToCardData(i);
cardIndexList.add(card);
}
}
return cardIndexList;
}
// 统计牌数
public static int[][] countTiles(List<Integer> cardInHand) {
@ -20,7 +92,6 @@ public class ChangshaWinSplitCard {
return counts;
}
// 检测不带精湖
public static int checkNormalHu(List<Integer> cardInHand, Map<String, Object> map) {
String info = "";
@ -53,7 +124,8 @@ public class ChangshaWinSplitCard {
List<Integer> cardResiue = (List<Integer>) map.get("cardResiue");
for (int i = 0; i < cardResiue.size() - 1; i++) {
if (cardResiue.get(i).equals(cardResiue.get(i + 1)) && (cardResiue.get(i) % 100 == 2 || cardResiue.get(i) % 100 == 5 || cardResiue.get(i) % 100 == 8)) {
if (cardResiue.get(i).equals(cardResiue.get(i + 1))
&& (cardResiue.get(i) % 100 == 2 || cardResiue.get(i) % 100 == 5 || cardResiue.get(i) % 100 == 8)) {
cardResiue.remove(i);
cardResiue.remove(i);
break;
@ -68,40 +140,6 @@ public class ChangshaWinSplitCard {
return group;
}
public static void haveBetween(List<Integer> cards, List<Integer> cardInHand) {
if (cards.size() <= 1 || cardInHand.size() <= 1) {
return;
}
// 创建要删除的牌列表
Set<Integer> toRemove = new HashSet<>();
// 遍历手牌中的每一张牌
for (int handCard : cardInHand) {
// 检查cards中是否有与手牌形成靠章的牌
for (int card : cards) {
// 定义靠章规则:相同、相邻或隔一张
int diff = Math.abs(card - handCard);
if (diff == 1 || diff == 2) {
toRemove.add(card);
}
}
}
// 只有当cards中还有多于1张牌时才执行删除
//if (toRemove.size()- cards.size() > 1){
if(cards.size()-toRemove.size()>0){
cards.removeAll(toRemove);
}
// 可选:打印信息
if (!toRemove.isEmpty()) {
System.out.println("删除的牌: " + toRemove);
System.out.println("cards剩余: " + cards);
}
}
// 递归检查是否可以组成顺子或刻子
public static int checkMelds(int[][] counts, int remainingMelds, Map<String, Object> map) {
if (remainingMelds == 0) {
@ -150,24 +188,24 @@ public class ChangshaWinSplitCard {
// 判断孤章
List<Integer> cardResiue = convertCountToCards(counts);
// System.out.println("只差几手牌" + remainingMelds + "," + cardResiue);
if (cardResiue.size()!=0) {
//优先保留连续张
// System.out.println("只差几手牌" + remainingMelds + "," + cardResiue);
if (cardResiue.size() != 0) {
// 优先保留连续张
removeConsecutivePairs1(cardResiue);
}
if (cardResiue.size()!=0) {
//第二优先保留对子
if (cardResiue.size() != 0) {
// 第二优先保留对子
removeConsecutivePairsTwo(cardResiue);
}
//最后保留坎张
//如果坎张,为空则取边张
if (cardResiue.size()!=0) {
// 最后保留坎张
// 如果坎张,为空则取边张
if (cardResiue.size() != 0) {
List<Integer> tmp3 = new ArrayList<>();
tmp3.addAll(cardResiue);
removeConsecutivePairs2(cardResiue);
if (cardResiue.size() == 0) {
//取边站
// 取边站
cardResiue = qubianzhang(tmp3);
}
}
@ -185,7 +223,8 @@ public class ChangshaWinSplitCard {
map.put("cardResiue", cardResiue);
}
for (int i = 0; i < cardResiue.size() - 1; i++) {
if (cardResiue.get(i).equals(cardResiue.get(i + 1)) && (cardResiue.get(i) % 100 == 2 || cardResiue.get(i) % 100 == 5 || cardResiue.get(i) % 100 == 8)) {
if (cardResiue.get(i).equals(cardResiue.get(i + 1))
&& (cardResiue.get(i) % 100 == 2 || cardResiue.get(i) % 100 == 5 || cardResiue.get(i) % 100 == 8)) {
cardResiue.remove(i);
cardResiue.remove(i);
if (remainingMelds >= 2) {
@ -196,14 +235,20 @@ public class ChangshaWinSplitCard {
}
if (Integer.parseInt(map.get("remainingMelds").toString()) >= remainingMelds && cardResiue.size() > 0) {
// 如果没有258做将则需要进入这里判断
if (remainingMelds == 1 && cardResiue.size() == 2) {
for (int i = 0; i < cardResiue.size(); i++) {
int diff = Math.abs(cardResiue.get(0) - cardResiue.get(1));
if (diff>1) {
map.put("remainingMelds", remainingMelds + 1);// 删除符合258做将的牌if (cardResiue.size() > 1) {cardResiue.remove(i);}map.put("cardResiue", cardResiue);
if (diff > 1) {
map.put("remainingMelds", remainingMelds + 1);// 删除符合258做将的牌
if (cardResiue.size() > 1) {
cardResiue.remove(i);
}
map.put("cardResiue", cardResiue);
}else {
if (cardResiue.get(i) % 100 == 2 || cardResiue.get(i) % 100 == 5 || cardResiue.get(i) % 100 == 8) {
} else {
if (cardResiue.get(i) % 100 == 2 || cardResiue.get(i) % 100 == 5
|| cardResiue.get(i) % 100 == 8) {
// 删除符合258做将的牌
if (cardResiue.size() > 1) {
cardResiue.remove(i);
@ -219,7 +264,7 @@ public class ChangshaWinSplitCard {
}
}
} else if (remainingMelds == 1) {
} else {
map.put("remainingMelds", remainingMelds);
map.put("cardResiue", cardResiue);
}
@ -241,7 +286,7 @@ public class ChangshaWinSplitCard {
int i = 0;
while (i < sorted.size()) {
// boolean isleft = sorted.get(i) % 100 == 1 || sorted.get(i) % 100 == 8;
// boolean isleft = sorted.get(i) % 100 == 1 || sorted.get(i) % 100 == 8;
if (i < sorted.size() - 1 && sorted.get(i + 1) - sorted.get(i) == 0) {
// 跳过对子
i += 2;
@ -256,7 +301,6 @@ public class ChangshaWinSplitCard {
cards.addAll(result);
}
// 辅助方法
public static void removeConsecutivePairs1(List<Integer> cards) {
if (cards == null || cards.size() < 2) {
@ -287,9 +331,9 @@ public class ChangshaWinSplitCard {
}
public static List<Integer> qubianzhang(List<Integer> cards) {
List<Integer> result = new ArrayList<>();
List<Integer> result = new ArrayList<>();
for (int i = 0; i < cards.size(); i++) {
if (cards.get(i)%100 == 1||cards.get(i)%100 == 9) {
if (cards.get(i) % 100 == 1 || cards.get(i) % 100 == 9) {
result.add(cards.get(i));
}
}
@ -315,7 +359,7 @@ public class ChangshaWinSplitCard {
if (!toRemove[j]) { // 如果这张牌还没被标记删除
int diff = sorted.get(j) - sorted.get(i);
if (diff == 2 && sorted.size()>2) {
if (diff == 2 && sorted.size() > 2) {
// 找到隔张,标记删除
toRemove[i] = true;
toRemove[j] = true;
@ -351,12 +395,49 @@ public class ChangshaWinSplitCard {
cards.addAll(result);
}
public static void haveBetween(List<Integer> cards, List<Integer> cardInHand) {
if (cards.size() <= 1 || cardInHand.size() <= 1) {
return;
}
// 创建要删除的牌列表
Set<Integer> toRemove = new HashSet<>();
// 遍历手牌中的每一张牌
for (int handCard : cardInHand) {
// 检查cards中是否有与手牌形成靠章的牌
for (int card : cards) {
// 定义靠章规则:相同、相邻或隔一张
int diff = Math.abs(card - handCard);
if (diff == 1 || diff == 2) {
toRemove.add(card);
}
}
}
// 只有当cards中还有多于1张牌时才执行删除
if (cards.size() - toRemove.size() > 0) {
cards.removeAll(toRemove);
}
// 可选:打印信息
if (!toRemove.isEmpty()) {
System.out.println("删除的牌: " + toRemove);
System.out.println("cards剩余: " + cards);
}
}
// 从二维数组counts还原到手牌列表
private static List<Integer> convertCountToCards(int[][] counts) {
List<Integer> cardInHand = new ArrayList<>();
// counts数组结构[类型索引][牌值]
// 类型索引: 0=万, 1=筒, 2=条, 3=风, 4=箭 (根据您的编码规则)
// 牌值: 1-9表示牌面值
for (int suitIdx = 0; suitIdx < counts.length; suitIdx++) {
int suit = suitIdx + 1;
int suit = suitIdx + 1; // 还原百位数 (1,2,3,4,5)
for (int value = 1; value < counts[suitIdx].length; value++) {
int count = counts[suitIdx][value];
@ -371,6 +452,16 @@ public class ChangshaWinSplitCard {
return cardInHand;
}
public static int ckeckOutCard(List<Integer> cardInhand) {
int card = 0;
Collections.sort(cardInhand);
System.out.println("手牌:" + cardInhand);
Map<String, Object> map = new HashMap<String, Object>();
checkNormalHu(cardInhand, map);
return card;
}
public static List<Integer> checktingpai(List<Integer> cardhand) {
List<Integer> tpcards = new ArrayList<>();
List<Integer> tmphc = cardhand;
@ -382,7 +473,7 @@ public class ChangshaWinSplitCard {
WinCard win = new WinCard(tmphc, j);
if (win.tryWin()) {
if (!tpcards.contains(tmpcard)) {
tpcards.add(tmpcard);
tpcards.add(tmpcard);
}
}
}
@ -390,7 +481,7 @@ public class ChangshaWinSplitCard {
WinCard win = new WinCard(tmphc, j);
if (win.tryWin()) {
if (!tpcards.contains(tmpcard)) {
tpcards.add(tmpcard);
tpcards.add(tmpcard);
}
}
}
@ -399,22 +490,21 @@ public class ChangshaWinSplitCard {
return tpcards;
}
public static boolean isJiangPai(int card){
if (card%100==2||card%100==5||card%100==8){
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<Integer> cardInHand,Map<String,List<Integer>> map) {
public static int checkduijiang(List<Integer> cardInHand, Map<String, List<Integer>> map) {
Map<Integer, Integer> 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){
if (isJiangPai(key) && countMap.get(key) >= 2) {
jiangnum++;
List<Integer> tmpI = new ArrayList<>();
tmpI.add(key);
@ -427,48 +517,43 @@ public class ChangshaWinSplitCard {
// 分析最优出牌
public static List<Integer> analyzeBestDiscard(List<Integer> cardInHand) {
//听牌
//返回要打的牌,打后可以听牌
// 听牌
// 返回要打的牌,打后可以听牌
List<Integer> checktingpai = checktingpai(cardInHand);
System.out.println("打出这种牌后可以听牌 " + checktingpai);
Map<String, Object> map = new HashMap<>();
Map<String, List<Integer>> jmap = new HashMap<>();//对将map
//先定将,再做分析
/* int jiangnum = checkduijiang(cardInHand,jmap);
System.out.println(jmap.get("jiangcard").get(0));
if (jiangnum==1){
//如果只有一对将
//去将 后判断方案
List<Integer> tmphc = new ArrayList<>();
tmphc.addAll(cardInHand);
Util.removeCard(tmphc,jmap.get("jiangcard").get(0),2);
Map<String, Object> tmap = new HashMap<>();
checkNormalHu(tmphc, tmap);
//不去将 判断
Map<String, Object> tmap2 = new HashMap<>();
System.out.println(cardInHand);
checkNormalHu(cardInHand, tmap2);
System.out.println(tmap2);
}else if(jiangnum>1){
}else{
}*/
Map<String, List<Integer>> jmap = new HashMap<>();// 对将map
// 先定将,再做分析
/*
* int jiangnum = checkduijiang(cardInHand,jmap);
* System.out.println(jmap.get("jiangcard").get(0)); if (jiangnum==1){ //如果只有一对将
* //去将 后判断方案 List<Integer> tmphc = new ArrayList<>(); tmphc.addAll(cardInHand);
* Util.removeCard(tmphc,jmap.get("jiangcard").get(0),2); Map<String, Object>
* tmap = new HashMap<>(); checkNormalHu(tmphc, tmap);
*
* //不去将 判断
*
* Map<String, Object> tmap2 = new HashMap<>(); System.out.println(cardInHand);
* checkNormalHu(cardInHand, tmap2); System.out.println(tmap2);
*
*
*
*
*
* }else if(jiangnum>1){
*
* }else{
*
* }
*/
checkNormalHu(cardInHand, map);
List<Integer> suggested = (List<Integer>) map.get("cardResiue");
//返回要打的牌,打后可以听牌
// 返回要打的牌,打后可以听牌
List<Integer> zuizhongchupai = new ArrayList<>();
//如果打出然后可以听牌,跟递归判断出来的牌一样,优先打出这张
// 如果打出然后可以听牌,跟递归判断出来的牌一样,优先打出这张
if (checktingpai.size() > 0) {
for (Integer integer : checktingpai) {
for (Integer integer1 : suggested) {
@ -479,19 +564,17 @@ public class ChangshaWinSplitCard {
}
}
//推荐打几个牌都能听牌,需要判断打哪个听的牌更多
// 推荐打几个牌都能听牌,需要判断打哪个听的牌更多
if (checktingpai.size() > 1 && zuizhongchupai.size() == 0) {
zuizhongchupai.addAll(checktingpai);
}
//如果判断听牌和递归出来的牌不一样 优先以听牌为准
// 如果判断听牌和递归出来的牌不一样 优先以听牌为准
if (zuizhongchupai.size() == 0) {
zuizhongchupai.addAll(checktingpai);
}
//如果判断最后打出牌还未听牌,就用递归判断的牌
// 如果判断最后打出牌还未听牌,就用递归判断的牌
if (zuizhongchupai.size() == 0) {
zuizhongchupai.addAll(suggested);
}
@ -628,11 +711,15 @@ public class ChangshaWinSplitCard {
// 牌的优先级(数字越小优先级越高)
private static int getCardPriority(int value) {
if (value == 9) return 1;
if (value == 1) return 2;
if (value == 2 || value == 8) return 3; // 靠近边张
if (value >= 3 && value <= 7) return 4; // 中间牌
return 5; // 其他
if (value == 9)
return 1;
if (value == 1)
return 2;
if (value == 2 || value == 8)
return 3; // 靠近边张
if (value >= 3 && value <= 7)
return 4; // 中间牌
return 5; // 其他
}
public static Integer selectBestCardRemove258(List<Integer> cards) {
@ -677,14 +764,14 @@ public class ChangshaWinSplitCard {
// 检测是否满足258做将的条件
private static boolean is258Jiang(int card) {
// 提取牌的类型和值
int type = card / 100; // 百位数1-万2-筒3-条4-风5-箭
int type = card / 100; // 百位数1-万2-筒3-条4-风5-箭
int value = card % 100; // 个位数:牌面值
// 只有万、筒、条有258做将的限制
if (type >= 1 && type <= 3) {
// 258做将二万(102)、五万(105)、八万(108)
// 二筒(202)、五筒(205)、八筒(208)
// 二条(302)、五条(305)、八条(308)
// 二筒(202)、五筒(205)、八筒(208)
// 二条(302)、五条(305)、八条(308)
return value == 2 || value == 5 || value == 8;
}
return false;
@ -712,7 +799,6 @@ public class ChangshaWinSplitCard {
}
}
// 都没有,返回第一张
return cards.get(0);
}
@ -734,7 +820,6 @@ public class ChangshaWinSplitCard {
// test1.add(101);
// test1.add(101);
// test1.add(208);
// test1.add(207);
// test1.add(205);
@ -747,8 +832,6 @@ public class ChangshaWinSplitCard {
// test1.add(106);
// test1.add(205);
// test1.add(205);
// test1.add(203);
// test1.add(202);
@ -758,7 +841,6 @@ public class ChangshaWinSplitCard {
// test1.add(106);
// test1.add(105);
// test1.add(201);
// test1.add(107);
// test1.add(107);
@ -779,37 +861,37 @@ public class ChangshaWinSplitCard {
// test1.add(209);
// test1.add(209);
//
//
test1.add(206);
test1.add(205);
test1.add(204);
test1.add(203);
test1.add(202);
test1.add(209);
test1.add(201);
test1.add(108);
test1.add(208);
test1.add(208);
test1.add(207);
test1.add(205);
test1.add(107);
test1.add(106);
test1.add(107);
test1.add(105);
test1.add(104);
test1.add(103);
test1.add(103);
test1.add(103);
test1.add(102);
test1.add(101);
test1.add(104);
// test1.add(103);
// test1.add(102);
System.out.println("手牌:" + test1);
List<Integer> bestDiscard = analyzeBestDiscard(test1);
// Integer integer = selectBestCardByPriority(bestDiscard);
Integer integer1 = selectBestCardRemove258(bestDiscard);
System.out.println("ww" +integer1);
Map<String, Object> mapSS = new HashMap<>();
checkNormalHu(test1, mapSS);
System.out.println("map:" + mapSS);
System.out.println("ww" + integer1);
// if (!bestDiscard.isEmpty()) {
// System.out.println("建议出牌:" + bestDiscard.get(0));
// } else {

View File

@ -37,23 +37,28 @@ public class Paixing {
List<Integer> opCards = new java.util.ArrayList<>();
//opCards.add(new OpCard(RuleWeight.TYPE_PONG, 109));
//opCards.add(new OpCard(RuleWeight.TYPE_PONG, 209));
cardInhand.add(207);
cardInhand.add(207);
cardInhand.add(202);
cardInhand.add(202);
cardInhand.add(202);
cardInhand.add(109);
cardInhand.add(206);
cardInhand.add(206);
cardInhand.add(206);
cardInhand.add(205);
cardInhand.add(101);
//cardInhand.add(204);
cardInhand.add(109);
cardInhand.add(109);
cardInhand.add(107);
cardInhand.add(107);
cardInhand.add(104);
cardInhand.add(104);
cardInhand.add(102);
cardInhand.add(102);
cardInhand.add(101);
cardInhand.add(101);
cardInhand.add(102);
cardInhand.add(101);
//System.out.println(tingKongCheck( opCards,cardInhand,109,false));
List<Integer> chi = new ArrayList<>();
List<Integer> peng = new ArrayList<>();
List<Integer> gang = new ArrayList<>();
System.out.println(tingCheck( cardInhand,chi,peng,gang));
}
private final static boolean quanqiuren(List<Integer> opCards,List<Integer> cardInhand, int drawCard) {

View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="game_mj_changsha" />
</profile>
</annotationProcessing>
</component>
</project>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
</component>
</project>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<gameSetting>
<host>192.168.14.1</host>
<intranet>192.168.14.1</intranet>
<port>8842</port>
<serverId>8841</serverId>
<host>192.168.0.18</host>
<intranet>192.168.0.18</intranet>
<port>6311</port>
<serverId>8840</serverId>
<gameId>10</gameId>
<loggerDebug>true</loggerDebug>
</gameSetting>

View File

@ -38,13 +38,13 @@
</poolConfig>
<infos>
<info name="group1_db0" host="47.112.97.12" password="cssq@2020" port="6379" database="0" timeout="5000"/>
<info name="group1_db1" host="47.112.97.12" password="cssq@2020" port="6379" database="1" timeout="5000"/>
<info name="group1_db5" host="47.112.97.12" password="cssq@2020" port="6379" database="5" timeout="5000"/>
<info name="group1_db8" host="47.112.97.12" password="cssq@2020" port="6379" database="8" timeout="5000"/>
<info name="group1_db9" host="47.112.97.12" password="cssq@2020" port="6379" database="9" timeout="5000"/>
<info name="group1_db10" host="47.112.97.12" password="cssq@2020" port="6379" database="10" timeout="5000"/>
<info name="group1_db11" host="47.112.97.12" password="cssq@2020" port="6379" database="11" timeout="5000"/>
<info name="group1_db0" host="8.138.242.190" password="cssq@2020" port="6379" database="0" timeout="5000"/>
<info name="group1_db1" host="8.138.242.190" password="cssq@2020" port="6379" database="1" timeout="5000"/>
<info name="group1_db5" host="8.138.242.190" password="cssq@2020" port="6379" database="5" timeout="5000"/>
<info name="group1_db8" host="8.138.242.190" password="cssq@2020" port="6379" database="8" timeout="5000"/>
<info name="group1_db9" host="8.138.242.190" password="cssq@2020" port="6379" database="9" timeout="5000"/>
<info name="group1_db10" host="8.138.242.190" password="cssq@2020" port="6379" database="10" timeout="5000"/>
<info name="group1_db11" host="8.138.242.190" password="cssq@2020" port="6379" database="11" timeout="5000"/>
</infos>
</plugin>
</serivce-core>

View File

@ -28,7 +28,7 @@
<!-- Bind socket addresses -->
<socketAddresses>
<socket address="0.0.0.0" port="8842" type="TCP" />
<socket address="0.0.0.0" port="6311" type="TCP" />
</socketAddresses>
<!-- Ip addresses filter-->

View File

@ -20,15 +20,15 @@ public class RoomCard {
public void init() {
this.cardList.clear();
this.subCardList.clear();
this.initCard();
this.shuffle();
//this.initCard2();
//this.initCard();
//this.shuffle();
this.initCard2();
}
private void initCard2() {
List list = Arrays.asList(109, 109, 109, 207, 207, 207, 105, 106, 107, 202, 202, 203, 204);
List list2 = Arrays.asList(209, 209, 209, 206, 206, 203, 203, 208, 208, 208, 202, 202, 202);
List list3 = Arrays.asList(208, 201, 202, 103, 107, 107, 205, 208, 209, 207, 109, 203, 208, 104, 210, 106, 104, 107, 202, 105, 206, 206, 109, 202, 209, 210, 104, 206, 107, 101, 108, 210, 203, 101, 102, 106, 209);
List list = Arrays.asList(207, 208, 207, 207, 207, 107, 107, 107, 104, 104, 202, 203, 204,202);
List list2 = Arrays.asList(103, 103, 103, 104, 107, 107, 202, 107, 206, 206, 202, 202, 202);
List list3 = Arrays.asList(207, 207, 104, 103, 107, 107, 205, 208, 209, 207, 109, 203, 208, 104, 210, 106, 104, 107, 202, 105, 206, 206, 109, 104, 209, 210, 104, 206, 107, 101, 108, 104, 203, 101, 104, 106, 209);
this.cardList.addAll(list);
this.cardList.addAll(list2);
@ -150,7 +150,7 @@ public class RoomCard {
// 发牌
public List<Integer> deal(EXPlayer owner, int num) {
List<Integer> dealCards = new ArrayList<>();
shuffle();
// shuffle();
for (int index = 0; index < num ; index++) {
double rand = Math.random() % 100 * 100;

View File

@ -41,7 +41,7 @@ public class RuleOtherWin implements IRuleBase {
HashMap<Integer, WinCardType> map = new HashMap<Integer, WinCardType>();
if (ok != null) {
for (int card : ok.drawList) {
if (Paixing.checkWin(map, player.opCardList, player.cardInhand, card,!no_jiang, room.difen_score)) {
if (Paixing.checkWin(map, player.opCardList, player.cardInhand, card,true, room.difen_score)) {
Paixing.putWinCardType(map, WinCardType.GANGSHANGPAO, 1,WinCardType.WIN_TYPE_SCORE);
map.remove(WinCardType.XIAOHU);
result = true;

View File

@ -38,7 +38,8 @@ public class RuleSelfWin implements IRuleBase {
HashMap<Integer, WinCardType> map = new HashMap<Integer, WinCardType>();
if (ok != null) {
for (int card : ok.drawList) {
if (Paixing.checkWin(map, player.opCardList, player.cardInhand, card,!no_jiang, room.difen_score)) {
//jefe 杠上开花
if (Paixing.checkWin(map, player.opCardList, player.cardInhand, card,true, room.difen_score)) {
Paixing.putWinCardType(map, WinCardType.GANGSHANGHUA, 1,WinCardType.WIN_TYPE_SCORE);
map.remove(WinCardType.XIAOHU);
result = true;

View File

@ -406,6 +406,9 @@ public class Paixing {
} else {
WinCard win = new WinCard(cardInhand, drawCard);
win.jiang = jiang;
System.out.println("jiang"+jiang);
if (win.tryWin()) {
putWinCardType(map, WinCardType.XIAOHU, 1, difen);
return true;

View File

@ -7,10 +7,10 @@ import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
//// TPServer.me().start();
TPServer.me().start();
// // 统计每张牌出现的次数
//
List<Integer> handCards = new ArrayList<>();
/* List<Integer> handCards = new ArrayList<>();
List<Integer> resultList = new ArrayList<>();
handCards.add(103);
handCards.add(103);
@ -161,7 +161,7 @@ public class Main {
// return String.valueOf(maxCard);
}
*/
}

View File

@ -1,5 +1,3 @@
#Generated by Maven
#Sat Dec 20 22:45:11 CST 2025
version=1.0.0
groupId=com.game
artifactId=game_mj_changsha
groupId=com.game
version=1.0.0

View File

@ -1,64 +1,64 @@
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleSelfOpenKong.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\PlayerRuleManager.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRPongState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRPongOpenKongState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\WinCardType.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PROtherKongState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PROtherWinState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RulePongOpenKong.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleSelfWin.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerKongWinState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerQSWinTipState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RulePong.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\RoomCard.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXScore.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\QSLog.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXGameController.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleOtherKong.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleZTWin.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\room\state\EXRoomStartGameState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerTianTingTipState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\SettleLog.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerDiscardState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerTipState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RulePongKong.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PROtherOpenKongState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\Config.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRSelfOpenKongState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleOtherWin.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\CardNiao.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\OpenKong.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerWaitKongWinState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleHaidi.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\uitl\Paixing.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\room\state\EXRoomSetpState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\RuleWeight.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerZTWinTipState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\tip\Action.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleQSWin.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleSelfKong.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerDrawTipState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerDisCardTipState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRChowState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerOpenKongState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerDrawState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXRoom.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXPlayer.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleOtherOpenKong.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerPiaoNiaoTipState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\uitl\WinCard.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRSelfWinState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\room\state\EXRoomDealState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXPlayBack.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerWaitState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerHaidiTipState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRPongKongState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXActionEvent.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\uitl\CardUtil.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXMainServer.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\tip\IRuleBase.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleChow.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRSelfKongState.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\tip\TipManager.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\tip\Tip.java
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\OpCard.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleHaidi.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleQSWin.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PROtherOpenKongState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\uitl\Paixing.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleChow.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerQSWinTipState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRSelfKongState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\SettleLog.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RulePong.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RulePongKong.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXMainServer.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXPlayBack.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\room\state\EXRoomStartGameState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\tip\Tip.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerDisCardTipState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleSelfKong.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRChowState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerDrawState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\CardNiao.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PROtherWinState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\OpenKong.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerHaidiTipState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerKongWinState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerTipState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXPlayer.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRSelfOpenKongState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerTianTingTipState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\tip\TipManager.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\OpCard.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerDiscardState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleOtherWin.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleSelfWin.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRSelfWinState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\PlayerRuleManager.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\uitl\WinCard.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleZTWin.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRPongState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRPongOpenKongState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RulePongOpenKong.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleSelfOpenKong.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\room\state\EXRoomSetpState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\uitl\CardUtil.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerZTWinTipState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerOpenKongState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\QSLog.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PRPongKongState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\RoomCard.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXRoom.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXActionEvent.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleOtherOpenKong.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXScore.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rule\RuleOtherKong.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerPiaoNiaoTipState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerWaitState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\RuleWeight.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\room\state\EXRoomDealState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\tip\IRuleBase.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\Config.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\WinCardType.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\tip\Action.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerDrawTipState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\state\EXPlayerWaitKongWinState.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\EXGameController.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\player\rulestate\PROtherKongState.java

View File

@ -1 +1 @@
D:\aga\ceshi\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\test\java\game_mj_changsha\Main.java
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\test\java\game_mj_changsha\Main.java