20260107
parent
34b8efc4f8
commit
08d8666e50
Binary file not shown.
Binary file not shown.
|
|
@ -1604,48 +1604,61 @@ public class HuNanChangSha {
|
||||||
ITObject params = TObject.newInstance();
|
ITObject params = TObject.newInstance();
|
||||||
TaurusClient tc = new TaurusClient("127.0.0.1","10", TaurusClient.ConnectionProtocol.Tcp);
|
TaurusClient tc = new TaurusClient("127.0.0.1","10", TaurusClient.ConnectionProtocol.Tcp);
|
||||||
List<Integer> hands1 = new ArrayList<>();
|
List<Integer> hands1 = new ArrayList<>();
|
||||||
|
hands1.add(209);
|
||||||
|
hands1.add(209);
|
||||||
hands1.add(207);
|
hands1.add(207);
|
||||||
hands1.add(207);
|
hands1.add(206);
|
||||||
hands1.add(202);
|
|
||||||
hands1.add(202);
|
|
||||||
|
|
||||||
hands1.add(202);
|
hands1.add(205);
|
||||||
hands1.add(109);
|
hands1.add(109);
|
||||||
hands1.add(109);
|
hands1.add(109);
|
||||||
|
|
||||||
hands1.add(109);
|
hands1.add(107);
|
||||||
hands1.add(102);
|
hands1.add(106);
|
||||||
hands1.add(104);
|
hands1.add(105);
|
||||||
|
|
||||||
hands1.add(104);
|
hands1.add(203);
|
||||||
hands1.add(102);
|
hands1.add(202);
|
||||||
hands1.add(102);
|
hands1.add(201);
|
||||||
|
|
||||||
int card= 109;
|
int card= 109;
|
||||||
huNanChangSha.changShaCardInhand.addAll(hands1);
|
huNanChangSha.changShaCardInhand.addAll(hands1);
|
||||||
TArray tiplist= new TArray();
|
TArray tiplist= new TArray();
|
||||||
ITArray opcard = TArray.newInstance();
|
ITArray opcard = TArray.newInstance();
|
||||||
opcard.addInt(109);
|
opcard.addInt(207);
|
||||||
|
opcard.addInt(206);
|
||||||
|
|
||||||
// opcard.addInt(203);
|
// opcard.addInt(203);
|
||||||
TObject tob = new TObject();
|
TObject tob = new TObject();
|
||||||
tob.putInt("weight",1);
|
tob.putInt("weight",1);
|
||||||
tob.putInt("id",1);
|
tob.putInt("id",1);
|
||||||
tob.putInt("type",2);
|
tob.putInt("type",1);
|
||||||
tob.putInt("card",card);
|
tob.putInt("card",card);
|
||||||
tob.putTArray("opcard", opcard);
|
tob.putTArray("opcard", opcard);
|
||||||
tiplist.addTObject(tob);
|
//tiplist.addTObject(tob);
|
||||||
|
|
||||||
ITArray opcard2 = TArray.newInstance();
|
ITArray opcard2 = TArray.newInstance();
|
||||||
opcard2.addInt(109);
|
opcard2.addInt(109);
|
||||||
// opcard2.addInt(206);
|
// opcard2.addInt(206);
|
||||||
TObject tob2 = new TObject();
|
TObject tob2 = new TObject();
|
||||||
tob2.putInt("weight",4);
|
tob2.putInt("weight",1);
|
||||||
tob2.putInt("id",2);
|
tob2.putInt("id",1);
|
||||||
tob2.putInt("type",3);
|
tob2.putInt("type",2);
|
||||||
tob2.putInt("card",card);
|
tob2.putInt("card",card);
|
||||||
tob2.putTArray("opcard", opcard2);
|
tob2.putTArray("opcard", opcard2);
|
||||||
tiplist.addTObject(tob2);
|
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);
|
params.putTArray("tip_list",tiplist);
|
||||||
System.out.println(params);
|
System.out.println(params);
|
||||||
//已经吃掉数据
|
//已经吃掉数据
|
||||||
|
|
|
||||||
|
|
@ -1296,6 +1296,21 @@ public class JiQiRens {
|
||||||
|
|
||||||
} else {
|
} 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();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -508,6 +508,11 @@ public class ChangShaSuanFaTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//先拆对子
|
||||||
|
|
||||||
|
//再拆门子
|
||||||
|
|
||||||
|
|
||||||
ai ai1 = new ai();
|
ai ai1 = new ai();
|
||||||
// ChangshaMahjongAI ai = new ChangshaMahjongAI();
|
// ChangshaMahjongAI ai = new ChangshaMahjongAI();
|
||||||
PlayerState playerState = new PlayerState();
|
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) {
|
if (ai1.isTinAi) {
|
||||||
isTin = true;
|
isTin = true;
|
||||||
}
|
}
|
||||||
System.out.println("Ai出牌长麻 ++++++++++++++++++++++++++++++++++++++");
|
System.out.println("Ai出牌长麻 ++++++++++++++++++++++++++++++++++++++");
|
||||||
log.info("Ai出牌长麻===============================");
|
log.info("Ai出牌长麻===============================");
|
||||||
return String.valueOf(bestDiscard);
|
return String.valueOf(bestDiscard);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3833,15 +3838,15 @@ public class ChangShaSuanFaTest {
|
||||||
}
|
}
|
||||||
boolean pph = false;
|
boolean pph = false;
|
||||||
//3、碰碰胡
|
//3、碰碰胡
|
||||||
if (pengGrop.size()==3){
|
if (pengGrop.size()==3&&chowGrop.size()==0){
|
||||||
if (cpairs>3){
|
if (cpairs>3){
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
}else if (pengGrop.size()==6){
|
}else if (pengGrop.size()==6&&chowGrop.size()==0){
|
||||||
if (cpairs>2){
|
if (cpairs>2){
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
}else if (pengGrop.size()==9){
|
}else if (pengGrop.size()==9&&chowGrop.size()==0){
|
||||||
if (cpairs>1){
|
if (cpairs>1){
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
@ -3989,8 +3994,10 @@ public class ChangShaSuanFaTest {
|
||||||
if (entry.getValue().getInt("guzhang")>0){
|
if (entry.getValue().getInt("guzhang")>0){
|
||||||
tmp= tmp+entry.getValue().getInt("guzhang")*2;
|
tmp= tmp+entry.getValue().getInt("guzhang")*2;
|
||||||
}
|
}
|
||||||
|
System.out.println("tmp:"+tmp);
|
||||||
fell.put(entry.getKey(), tmp);
|
fell.put(entry.getKey(), tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
//找分数最高的id
|
//找分数最高的id
|
||||||
int dangqianfen = 0;
|
int dangqianfen = 0;
|
||||||
int dangqianid = 0;
|
int dangqianid = 0;
|
||||||
|
|
@ -4141,7 +4148,15 @@ public class ChangShaSuanFaTest {
|
||||||
Map<String, Object> map2 = new HashMap<>();
|
Map<String, Object> map2 = new HashMap<>();
|
||||||
System.out.println(checkCards);
|
System.out.println(checkCards);
|
||||||
Map<Integer,List<Integer>> xiatingList = new HashMap<>();
|
Map<Integer,List<Integer>> xiatingList = new HashMap<>();
|
||||||
|
|
||||||
|
pengGrop.add(card);
|
||||||
|
pengGrop.add(card);
|
||||||
|
pengGrop.add(card);
|
||||||
map2 = quyizhangChayou(checkCards,chowGroup,pengGrop,gangGrop,xiatingList);
|
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("map2:"+map2);
|
||||||
System.out.println("xiatingList:"+xiatingList);
|
System.out.println("xiatingList:"+xiatingList);
|
||||||
//比对
|
//比对
|
||||||
|
|
@ -4221,6 +4236,19 @@ public class ChangShaSuanFaTest {
|
||||||
chiob.putInt("teshu",5);
|
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);
|
System.out.println("peng:"+chiob);
|
||||||
return chiob;
|
return chiob;
|
||||||
}
|
}
|
||||||
|
|
@ -4328,7 +4356,18 @@ public class ChangShaSuanFaTest {
|
||||||
Map<String, Object> map2 = new HashMap<>();
|
Map<String, Object> map2 = new HashMap<>();
|
||||||
System.out.println(checkCards);
|
System.out.println(checkCards);
|
||||||
Map<Integer,List<Integer>> xiatingList = new HashMap<>();
|
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);
|
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("map2:"+map2);
|
||||||
System.out.println("xiatingList:"+xiatingList);
|
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) {
|
public static List<Integer> handscardshifoutingpai(List<Integer> cardhand,List<Integer>chowGroup,List<Integer> pongGroup,List<Integer> gangdepai) {
|
||||||
List<Integer> tpcards = new ArrayList<>();
|
List<Integer> tpcards = new ArrayList<>();
|
||||||
List<Integer> tmphc = cardhand;
|
List<Integer> tmphc = new ArrayList<>();
|
||||||
|
tmphc.addAll(cardhand);
|
||||||
for (int j = 101; j <= 109; j++) {
|
for (int j = 101; j <= 109; j++) {
|
||||||
WinCard win = new WinCard(tmphc, j);
|
WinCard win = new WinCard(tmphc, j);
|
||||||
if (win.tryWin()) {
|
if (win.tryWin()) {
|
||||||
|
|
@ -4398,8 +4438,9 @@ public class ChangShaSuanFaTest {
|
||||||
tpcards.add(j);
|
tpcards.add(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Paixing px = new Paixing();
|
Paixing px = new Paixing();
|
||||||
if(px.tingCheck(cardhand,chowGroup,pongGroup,gangdepai)){
|
if(px.tingCheck(tmphc,chowGroup,pongGroup,gangdepai)){
|
||||||
if (!tpcards.contains(j)) {
|
if (!tpcards.contains(j)) {
|
||||||
tpcards.add(j);
|
tpcards.add(j);
|
||||||
}
|
}
|
||||||
|
|
@ -4413,15 +4454,13 @@ public class ChangShaSuanFaTest {
|
||||||
tpcards.add(k);
|
tpcards.add(k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(px.tingCheck(cardhand,chowGroup,pongGroup,gangdepai)){
|
if(px.tingCheck(tmphc,chowGroup,pongGroup,gangdepai)){
|
||||||
if (!tpcards.contains(k)) {
|
if (!tpcards.contains(k)) {
|
||||||
tpcards.add(k);
|
tpcards.add(k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//如果没有则检测大胡
|
//如果没有则检测大胡
|
||||||
|
|
||||||
|
|
||||||
return tpcards;
|
return tpcards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4465,7 +4504,9 @@ public class ChangShaSuanFaTest {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
Map<Integer,Map<String, Object>> bigMap = 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++) {
|
for (int i = 0; i < cardhand.size(); i++) {
|
||||||
int tmpcard = tmphc.get(0);
|
int tmpcard = tmphc.get(0);
|
||||||
tmphc.remove(0);
|
tmphc.remove(0);
|
||||||
|
|
@ -4476,18 +4517,22 @@ public class ChangShaSuanFaTest {
|
||||||
|
|
||||||
//检查是否能下听
|
//检查是否能下听
|
||||||
List<Integer> tmxt = new ArrayList<>();
|
List<Integer> tmxt = new ArrayList<>();
|
||||||
tmxt =handscardshifoutingpai(tmphc,chowGroup,pongGroup,gangdepai);
|
tmxt = handscardshifoutingpai(tmphc,chowGroup,pongGroup,gangdepai);
|
||||||
if (tmxt.size()>0){
|
if (tmxt.size()>0){
|
||||||
xiatingList.put(tmpcard,tmxt);
|
xiatingList.put(tmpcard,tmxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
tmphc.add(tmpcard);
|
tmphc.add(tmpcard);
|
||||||
}
|
}
|
||||||
|
System.out.println(bigMap);
|
||||||
|
System.out.println("吃之后");
|
||||||
//遍历找最优解
|
//遍历找最优解
|
||||||
if (bigMap.size()==0){
|
if (bigMap.size()==0){
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> bestmap = gaiBestCardInMap(bigMap);
|
Map<String, Object> bestmap = gaiBestCardInMap(bigMap);
|
||||||
|
|
||||||
return bestmap;
|
return bestmap;
|
||||||
}
|
}
|
||||||
private static Map<String, Object> gaiBestCardInMap(Map<Integer,Map<String, Object>> map){
|
private static Map<String, Object> gaiBestCardInMap(Map<Integer,Map<String, Object>> map){
|
||||||
|
|
@ -4505,6 +4550,7 @@ public class ChangShaSuanFaTest {
|
||||||
}else if (tmpr==entr){
|
}else if (tmpr==entr){
|
||||||
List<Integer> tl = (List<Integer>)tmpmap.get("cardResiue");
|
List<Integer> tl = (List<Integer>)tmpmap.get("cardResiue");
|
||||||
List<Integer> enl = (List<Integer>)entry.getValue().get("cardResiue");
|
List<Integer> enl = (List<Integer>)entry.getValue().get("cardResiue");
|
||||||
|
|
||||||
if (tl.size()>enl.size()){
|
if (tl.size()>enl.size()){
|
||||||
tmpmap = entry.getValue();
|
tmpmap = entry.getValue();
|
||||||
}
|
}
|
||||||
|
|
@ -4521,6 +4567,7 @@ public class ChangShaSuanFaTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return tmpmap;
|
return tmpmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4528,20 +4575,20 @@ public class ChangShaSuanFaTest {
|
||||||
// 测试用例:没有258将牌的情况
|
// 测试用例:没有258将牌的情况
|
||||||
List<Integer> test1 = new ArrayList<Integer>();
|
List<Integer> test1 = new ArrayList<Integer>();
|
||||||
|
|
||||||
test1.add(109);
|
test1.add(208);
|
||||||
test1.add(109);
|
test1.add(208);
|
||||||
|
test1.add(208);
|
||||||
|
test1.add(201);
|
||||||
|
|
||||||
|
test1.add(201);
|
||||||
test1.add(108);
|
test1.add(108);
|
||||||
test1.add(107);
|
test1.add(107);
|
||||||
|
|
||||||
test1.add(107);
|
test1.add(107);
|
||||||
test1.add(107);
|
|
||||||
test1.add(104);
|
|
||||||
|
|
||||||
test1.add(102);
|
|
||||||
test1.add(103);
|
test1.add(103);
|
||||||
test1.add(102);
|
test1.add(103);
|
||||||
|
|
||||||
test1.add(102);
|
test1.add(101);
|
||||||
test1.add(101);
|
test1.add(101);
|
||||||
test1.add(101);
|
test1.add(101);
|
||||||
|
|
||||||
|
|
@ -4574,7 +4621,7 @@ public class ChangShaSuanFaTest {
|
||||||
//gangguopai.add(206);
|
//gangguopai.add(206);
|
||||||
//gangguopai.add(206);
|
//gangguopai.add(206);
|
||||||
|
|
||||||
int card = 105;
|
int card = 202;
|
||||||
List<Integer>pengCard = new ArrayList<>();
|
List<Integer>pengCard = new ArrayList<>();
|
||||||
// pengCard.add(102);
|
// pengCard.add(102);
|
||||||
//出牌求优
|
//出牌求优
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,82 @@ package taurus.util;
|
||||||
|
|
||||||
import com.game.Util;
|
import com.game.Util;
|
||||||
|
|
||||||
|
import java.sql.Array;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class ChangshaWinSplitCard {
|
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) {
|
public static int[][] countTiles(List<Integer> cardInHand) {
|
||||||
|
|
@ -20,7 +92,6 @@ public class ChangshaWinSplitCard {
|
||||||
return counts;
|
return counts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 检测不带精湖
|
// 检测不带精湖
|
||||||
public static int checkNormalHu(List<Integer> cardInHand, Map<String, Object> map) {
|
public static int checkNormalHu(List<Integer> cardInHand, Map<String, Object> map) {
|
||||||
String info = "";
|
String info = "";
|
||||||
|
|
@ -53,7 +124,8 @@ public class ChangshaWinSplitCard {
|
||||||
List<Integer> cardResiue = (List<Integer>) map.get("cardResiue");
|
List<Integer> cardResiue = (List<Integer>) map.get("cardResiue");
|
||||||
|
|
||||||
for (int i = 0; i < cardResiue.size() - 1; i++) {
|
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);
|
||||||
cardResiue.remove(i);
|
cardResiue.remove(i);
|
||||||
break;
|
break;
|
||||||
|
|
@ -68,40 +140,6 @@ public class ChangshaWinSplitCard {
|
||||||
return group;
|
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) {
|
public static int checkMelds(int[][] counts, int remainingMelds, Map<String, Object> map) {
|
||||||
if (remainingMelds == 0) {
|
if (remainingMelds == 0) {
|
||||||
|
|
@ -150,24 +188,24 @@ public class ChangshaWinSplitCard {
|
||||||
// 判断孤章
|
// 判断孤章
|
||||||
List<Integer> cardResiue = convertCountToCards(counts);
|
List<Integer> cardResiue = convertCountToCards(counts);
|
||||||
|
|
||||||
// System.out.println("只差几手牌" + remainingMelds + "," + cardResiue);
|
// System.out.println("只差几手牌" + remainingMelds + "," + cardResiue);
|
||||||
if (cardResiue.size()!=0) {
|
if (cardResiue.size() != 0) {
|
||||||
//优先保留连续张
|
// 优先保留连续张
|
||||||
removeConsecutivePairs1(cardResiue);
|
removeConsecutivePairs1(cardResiue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cardResiue.size()!=0) {
|
if (cardResiue.size() != 0) {
|
||||||
//第二优先保留对子
|
// 第二优先保留对子
|
||||||
removeConsecutivePairsTwo(cardResiue);
|
removeConsecutivePairsTwo(cardResiue);
|
||||||
}
|
}
|
||||||
//最后保留坎张
|
// 最后保留坎张
|
||||||
//如果坎张,为空则取边张
|
// 如果坎张,为空则取边张
|
||||||
if (cardResiue.size()!=0) {
|
if (cardResiue.size() != 0) {
|
||||||
List<Integer> tmp3 = new ArrayList<>();
|
List<Integer> tmp3 = new ArrayList<>();
|
||||||
tmp3.addAll(cardResiue);
|
tmp3.addAll(cardResiue);
|
||||||
removeConsecutivePairs2(cardResiue);
|
removeConsecutivePairs2(cardResiue);
|
||||||
if (cardResiue.size() == 0) {
|
if (cardResiue.size() == 0) {
|
||||||
//取边站
|
// 取边站
|
||||||
cardResiue = qubianzhang(tmp3);
|
cardResiue = qubianzhang(tmp3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -185,7 +223,8 @@ public class ChangshaWinSplitCard {
|
||||||
map.put("cardResiue", cardResiue);
|
map.put("cardResiue", cardResiue);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < cardResiue.size() - 1; i++) {
|
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);
|
||||||
cardResiue.remove(i);
|
cardResiue.remove(i);
|
||||||
if (remainingMelds >= 2) {
|
if (remainingMelds >= 2) {
|
||||||
|
|
@ -196,14 +235,20 @@ public class ChangshaWinSplitCard {
|
||||||
}
|
}
|
||||||
if (Integer.parseInt(map.get("remainingMelds").toString()) >= remainingMelds && cardResiue.size() > 0) {
|
if (Integer.parseInt(map.get("remainingMelds").toString()) >= remainingMelds && cardResiue.size() > 0) {
|
||||||
// 如果没有258做将则需要进入这里判断
|
// 如果没有258做将则需要进入这里判断
|
||||||
|
|
||||||
if (remainingMelds == 1 && cardResiue.size() == 2) {
|
if (remainingMelds == 1 && cardResiue.size() == 2) {
|
||||||
for (int i = 0; i < cardResiue.size(); i++) {
|
for (int i = 0; i < cardResiue.size(); i++) {
|
||||||
int diff = Math.abs(cardResiue.get(0) - cardResiue.get(1));
|
int diff = Math.abs(cardResiue.get(0) - cardResiue.get(1));
|
||||||
if (diff>1) {
|
if (diff > 1) {
|
||||||
map.put("remainingMelds", remainingMelds + 1);// 删除符合258做将的牌if (cardResiue.size() > 1) {cardResiue.remove(i);}map.put("cardResiue", cardResiue);
|
map.put("remainingMelds", remainingMelds + 1);// 删除符合258做将的牌
|
||||||
|
if (cardResiue.size() > 1) {
|
||||||
|
cardResiue.remove(i);
|
||||||
|
}
|
||||||
|
map.put("cardResiue", cardResiue);
|
||||||
|
|
||||||
}else {
|
} else {
|
||||||
if (cardResiue.get(i) % 100 == 2 || cardResiue.get(i) % 100 == 5 || cardResiue.get(i) % 100 == 8) {
|
if (cardResiue.get(i) % 100 == 2 || cardResiue.get(i) % 100 == 5
|
||||||
|
|| cardResiue.get(i) % 100 == 8) {
|
||||||
// 删除符合258做将的牌
|
// 删除符合258做将的牌
|
||||||
if (cardResiue.size() > 1) {
|
if (cardResiue.size() > 1) {
|
||||||
cardResiue.remove(i);
|
cardResiue.remove(i);
|
||||||
|
|
@ -219,7 +264,7 @@ public class ChangshaWinSplitCard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (remainingMelds == 1) {
|
} else {
|
||||||
map.put("remainingMelds", remainingMelds);
|
map.put("remainingMelds", remainingMelds);
|
||||||
map.put("cardResiue", cardResiue);
|
map.put("cardResiue", cardResiue);
|
||||||
}
|
}
|
||||||
|
|
@ -256,7 +301,6 @@ public class ChangshaWinSplitCard {
|
||||||
cards.addAll(result);
|
cards.addAll(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 辅助方法
|
// 辅助方法
|
||||||
public static void removeConsecutivePairs1(List<Integer> cards) {
|
public static void removeConsecutivePairs1(List<Integer> cards) {
|
||||||
if (cards == null || cards.size() < 2) {
|
if (cards == null || cards.size() < 2) {
|
||||||
|
|
@ -289,7 +333,7 @@ public class ChangshaWinSplitCard {
|
||||||
public static List<Integer> qubianzhang(List<Integer> cards) {
|
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++) {
|
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));
|
result.add(cards.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -315,7 +359,7 @@ public class ChangshaWinSplitCard {
|
||||||
if (!toRemove[j]) { // 如果这张牌还没被标记删除
|
if (!toRemove[j]) { // 如果这张牌还没被标记删除
|
||||||
int diff = sorted.get(j) - sorted.get(i);
|
int diff = sorted.get(j) - sorted.get(i);
|
||||||
|
|
||||||
if (diff == 2 && sorted.size()>2) {
|
if (diff == 2 && sorted.size() > 2) {
|
||||||
// 找到隔张,标记删除
|
// 找到隔张,标记删除
|
||||||
toRemove[i] = true;
|
toRemove[i] = true;
|
||||||
toRemove[j] = true;
|
toRemove[j] = true;
|
||||||
|
|
@ -351,12 +395,49 @@ public class ChangshaWinSplitCard {
|
||||||
cards.addAll(result);
|
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还原到手牌列表
|
// 从二维数组counts还原到手牌列表
|
||||||
private static List<Integer> convertCountToCards(int[][] counts) {
|
private static List<Integer> convertCountToCards(int[][] counts) {
|
||||||
List<Integer> cardInHand = new ArrayList<>();
|
List<Integer> cardInHand = new ArrayList<>();
|
||||||
|
|
||||||
|
// counts数组结构:[类型索引][牌值]
|
||||||
|
// 类型索引: 0=万, 1=筒, 2=条, 3=风, 4=箭 (根据您的编码规则)
|
||||||
|
// 牌值: 1-9表示牌面值
|
||||||
|
|
||||||
for (int suitIdx = 0; suitIdx < counts.length; suitIdx++) {
|
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++) {
|
for (int value = 1; value < counts[suitIdx].length; value++) {
|
||||||
int count = counts[suitIdx][value];
|
int count = counts[suitIdx][value];
|
||||||
|
|
@ -371,6 +452,16 @@ public class ChangshaWinSplitCard {
|
||||||
return cardInHand;
|
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) {
|
public static List<Integer> checktingpai(List<Integer> cardhand) {
|
||||||
List<Integer> tpcards = new ArrayList<>();
|
List<Integer> tpcards = new ArrayList<>();
|
||||||
List<Integer> tmphc = cardhand;
|
List<Integer> tmphc = cardhand;
|
||||||
|
|
@ -399,22 +490,21 @@ public class ChangshaWinSplitCard {
|
||||||
return tpcards;
|
return tpcards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isJiangPai(int card) {
|
||||||
public static boolean isJiangPai(int card){
|
if (card % 100 == 2 || card % 100 == 5 || card % 100 == 8) {
|
||||||
if (card%100==2||card%100==5||card%100==8){
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
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<>();
|
Map<Integer, Integer> countMap = new HashMap<>();
|
||||||
for (Integer item : cardInHand) {
|
for (Integer item : cardInHand) {
|
||||||
countMap.put(item, countMap.getOrDefault(item, 0) + 1);
|
countMap.put(item, countMap.getOrDefault(item, 0) + 1);
|
||||||
}
|
}
|
||||||
int jiangnum = 0;
|
int jiangnum = 0;
|
||||||
for (int key : countMap.keySet()) {
|
for (int key : countMap.keySet()) {
|
||||||
if (isJiangPai(key)&&countMap.get(key)>=2){
|
if (isJiangPai(key) && countMap.get(key) >= 2) {
|
||||||
jiangnum++;
|
jiangnum++;
|
||||||
List<Integer> tmpI = new ArrayList<>();
|
List<Integer> tmpI = new ArrayList<>();
|
||||||
tmpI.add(key);
|
tmpI.add(key);
|
||||||
|
|
@ -427,48 +517,43 @@ public class ChangshaWinSplitCard {
|
||||||
// 分析最优出牌
|
// 分析最优出牌
|
||||||
public static List<Integer> analyzeBestDiscard(List<Integer> cardInHand) {
|
public static List<Integer> analyzeBestDiscard(List<Integer> cardInHand) {
|
||||||
|
|
||||||
//听牌
|
// 听牌
|
||||||
//返回要打的牌,打后可以听牌
|
// 返回要打的牌,打后可以听牌
|
||||||
List<Integer> checktingpai = checktingpai(cardInHand);
|
List<Integer> checktingpai = checktingpai(cardInHand);
|
||||||
System.out.println("打出这种牌后可以听牌 " + checktingpai);
|
System.out.println("打出这种牌后可以听牌 " + checktingpai);
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
Map<String, List<Integer>> jmap = new HashMap<>();//对将map
|
Map<String, List<Integer>> jmap = new HashMap<>();// 对将map
|
||||||
//先定将,再做分析
|
// 先定将,再做分析
|
||||||
/* int jiangnum = checkduijiang(cardInHand,jmap);
|
/*
|
||||||
System.out.println(jmap.get("jiangcard").get(0));
|
* int jiangnum = checkduijiang(cardInHand,jmap);
|
||||||
if (jiangnum==1){
|
* 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>
|
||||||
List<Integer> tmphc = new ArrayList<>();
|
* tmap = new HashMap<>(); checkNormalHu(tmphc, tmap);
|
||||||
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);
|
||||||
//不去将 判断
|
*
|
||||||
|
*
|
||||||
Map<String, Object> tmap2 = new HashMap<>();
|
*
|
||||||
System.out.println(cardInHand);
|
*
|
||||||
checkNormalHu(cardInHand, tmap2);
|
*
|
||||||
System.out.println(tmap2);
|
* }else if(jiangnum>1){
|
||||||
|
*
|
||||||
|
* }else{
|
||||||
|
*
|
||||||
|
* }
|
||||||
|
*/
|
||||||
}else if(jiangnum>1){
|
|
||||||
|
|
||||||
}else{
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
checkNormalHu(cardInHand, map);
|
checkNormalHu(cardInHand, map);
|
||||||
|
|
||||||
List<Integer> suggested = (List<Integer>) map.get("cardResiue");
|
List<Integer> suggested = (List<Integer>) map.get("cardResiue");
|
||||||
|
|
||||||
//返回要打的牌,打后可以听牌
|
// 返回要打的牌,打后可以听牌
|
||||||
List<Integer> zuizhongchupai = new ArrayList<>();
|
List<Integer> zuizhongchupai = new ArrayList<>();
|
||||||
//如果打出然后可以听牌,跟递归判断出来的牌一样,优先打出这张
|
// 如果打出然后可以听牌,跟递归判断出来的牌一样,优先打出这张
|
||||||
if (checktingpai.size() > 0) {
|
if (checktingpai.size() > 0) {
|
||||||
for (Integer integer : checktingpai) {
|
for (Integer integer : checktingpai) {
|
||||||
for (Integer integer1 : suggested) {
|
for (Integer integer1 : suggested) {
|
||||||
|
|
@ -479,19 +564,17 @@ public class ChangshaWinSplitCard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 推荐打几个牌都能听牌,需要判断打哪个听的牌更多
|
||||||
//推荐打几个牌都能听牌,需要判断打哪个听的牌更多
|
|
||||||
if (checktingpai.size() > 1 && zuizhongchupai.size() == 0) {
|
if (checktingpai.size() > 1 && zuizhongchupai.size() == 0) {
|
||||||
zuizhongchupai.addAll(checktingpai);
|
zuizhongchupai.addAll(checktingpai);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 如果判断听牌和递归出来的牌不一样 优先以听牌为准
|
||||||
//如果判断听牌和递归出来的牌不一样 优先以听牌为准
|
|
||||||
if (zuizhongchupai.size() == 0) {
|
if (zuizhongchupai.size() == 0) {
|
||||||
zuizhongchupai.addAll(checktingpai);
|
zuizhongchupai.addAll(checktingpai);
|
||||||
}
|
}
|
||||||
|
|
||||||
//如果判断最后打出牌还未听牌,就用递归判断的牌
|
// 如果判断最后打出牌还未听牌,就用递归判断的牌
|
||||||
if (zuizhongchupai.size() == 0) {
|
if (zuizhongchupai.size() == 0) {
|
||||||
zuizhongchupai.addAll(suggested);
|
zuizhongchupai.addAll(suggested);
|
||||||
}
|
}
|
||||||
|
|
@ -628,10 +711,14 @@ public class ChangshaWinSplitCard {
|
||||||
|
|
||||||
// 牌的优先级(数字越小优先级越高)
|
// 牌的优先级(数字越小优先级越高)
|
||||||
private static int getCardPriority(int value) {
|
private static int getCardPriority(int value) {
|
||||||
if (value == 9) return 1;
|
if (value == 9)
|
||||||
if (value == 1) return 2;
|
return 1;
|
||||||
if (value == 2 || value == 8) return 3; // 靠近边张
|
if (value == 1)
|
||||||
if (value >= 3 && value <= 7) return 4; // 中间牌
|
return 2;
|
||||||
|
if (value == 2 || value == 8)
|
||||||
|
return 3; // 靠近边张
|
||||||
|
if (value >= 3 && value <= 7)
|
||||||
|
return 4; // 中间牌
|
||||||
return 5; // 其他
|
return 5; // 其他
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -712,7 +799,6 @@ public class ChangshaWinSplitCard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 都没有,返回第一张
|
// 都没有,返回第一张
|
||||||
return cards.get(0);
|
return cards.get(0);
|
||||||
}
|
}
|
||||||
|
|
@ -734,7 +820,6 @@ public class ChangshaWinSplitCard {
|
||||||
// test1.add(101);
|
// test1.add(101);
|
||||||
// test1.add(101);
|
// test1.add(101);
|
||||||
|
|
||||||
|
|
||||||
// test1.add(208);
|
// test1.add(208);
|
||||||
// test1.add(207);
|
// test1.add(207);
|
||||||
// test1.add(205);
|
// test1.add(205);
|
||||||
|
|
@ -747,8 +832,6 @@ public class ChangshaWinSplitCard {
|
||||||
// test1.add(106);
|
// test1.add(106);
|
||||||
// test1.add(205);
|
// test1.add(205);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// test1.add(205);
|
// test1.add(205);
|
||||||
// test1.add(203);
|
// test1.add(203);
|
||||||
// test1.add(202);
|
// test1.add(202);
|
||||||
|
|
@ -758,7 +841,6 @@ public class ChangshaWinSplitCard {
|
||||||
// test1.add(106);
|
// test1.add(106);
|
||||||
// test1.add(105);
|
// test1.add(105);
|
||||||
|
|
||||||
|
|
||||||
// test1.add(201);
|
// test1.add(201);
|
||||||
// test1.add(107);
|
// test1.add(107);
|
||||||
// test1.add(107);
|
// test1.add(107);
|
||||||
|
|
@ -779,37 +861,37 @@ public class ChangshaWinSplitCard {
|
||||||
// test1.add(209);
|
// test1.add(209);
|
||||||
// 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(209);
|
||||||
test1.add(201);
|
test1.add(208);
|
||||||
test1.add(108);
|
test1.add(208);
|
||||||
|
test1.add(207);
|
||||||
|
test1.add(205);
|
||||||
test1.add(107);
|
test1.add(107);
|
||||||
test1.add(106);
|
test1.add(107);
|
||||||
|
test1.add(105);
|
||||||
test1.add(104);
|
test1.add(104);
|
||||||
|
test1.add(103);
|
||||||
|
|
||||||
|
test1.add(103);
|
||||||
|
|
||||||
test1.add(103);
|
test1.add(103);
|
||||||
test1.add(102);
|
test1.add(102);
|
||||||
test1.add(101);
|
test1.add(104);
|
||||||
// test1.add(103);
|
// test1.add(103);
|
||||||
// test1.add(102);
|
// test1.add(102);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("手牌:" + test1);
|
System.out.println("手牌:" + test1);
|
||||||
List<Integer> bestDiscard = analyzeBestDiscard(test1);
|
List<Integer> bestDiscard = analyzeBestDiscard(test1);
|
||||||
// Integer integer = selectBestCardByPriority(bestDiscard);
|
// Integer integer = selectBestCardByPriority(bestDiscard);
|
||||||
Integer integer1 = selectBestCardRemove258(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()) {
|
// if (!bestDiscard.isEmpty()) {
|
||||||
// System.out.println("建议出牌:" + bestDiscard.get(0));
|
// System.out.println("建议出牌:" + bestDiscard.get(0));
|
||||||
// } else {
|
// } else {
|
||||||
|
|
|
||||||
|
|
@ -37,23 +37,28 @@ public class Paixing {
|
||||||
List<Integer> opCards = new java.util.ArrayList<>();
|
List<Integer> opCards = new java.util.ArrayList<>();
|
||||||
//opCards.add(new OpCard(RuleWeight.TYPE_PONG, 109));
|
//opCards.add(new OpCard(RuleWeight.TYPE_PONG, 109));
|
||||||
//opCards.add(new OpCard(RuleWeight.TYPE_PONG, 209));
|
//opCards.add(new OpCard(RuleWeight.TYPE_PONG, 209));
|
||||||
cardInhand.add(207);
|
cardInhand.add(206);
|
||||||
cardInhand.add(207);
|
cardInhand.add(206);
|
||||||
cardInhand.add(202);
|
cardInhand.add(206);
|
||||||
cardInhand.add(202);
|
cardInhand.add(205);
|
||||||
cardInhand.add(202);
|
cardInhand.add(101);
|
||||||
cardInhand.add(109);
|
//cardInhand.add(204);
|
||||||
|
|
||||||
cardInhand.add(109);
|
cardInhand.add(107);
|
||||||
cardInhand.add(109);
|
cardInhand.add(107);
|
||||||
cardInhand.add(104);
|
cardInhand.add(104);
|
||||||
cardInhand.add(104);
|
cardInhand.add(104);
|
||||||
cardInhand.add(102);
|
cardInhand.add(101);
|
||||||
cardInhand.add(102);
|
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) {
|
private final static boolean quanqiuren(List<Integer> opCards,List<Integer> cardInhand, int drawCard) {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<gameSetting>
|
<gameSetting>
|
||||||
<host>192.168.14.1</host>
|
<host>192.168.0.18</host>
|
||||||
<intranet>192.168.14.1</intranet>
|
<intranet>192.168.0.18</intranet>
|
||||||
<port>8842</port>
|
<port>6311</port>
|
||||||
<serverId>8841</serverId>
|
<serverId>8840</serverId>
|
||||||
<gameId>10</gameId>
|
<gameId>10</gameId>
|
||||||
<loggerDebug>true</loggerDebug>
|
<loggerDebug>true</loggerDebug>
|
||||||
</gameSetting>
|
</gameSetting>
|
||||||
|
|
@ -38,13 +38,13 @@
|
||||||
</poolConfig>
|
</poolConfig>
|
||||||
|
|
||||||
<infos>
|
<infos>
|
||||||
<info name="group1_db0" host="47.112.97.12" password="cssq@2020" port="6379" database="0" 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="47.112.97.12" password="cssq@2020" port="6379" database="1" 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="47.112.97.12" password="cssq@2020" port="6379" database="5" 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="47.112.97.12" password="cssq@2020" port="6379" database="8" 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="47.112.97.12" password="cssq@2020" port="6379" database="9" 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="47.112.97.12" password="cssq@2020" port="6379" database="10" 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="47.112.97.12" password="cssq@2020" port="6379" database="11" timeout="5000"/>
|
<info name="group1_db11" host="8.138.242.190" password="cssq@2020" port="6379" database="11" timeout="5000"/>
|
||||||
</infos>
|
</infos>
|
||||||
</plugin>
|
</plugin>
|
||||||
</serivce-core>
|
</serivce-core>
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
<!-- Bind socket addresses -->
|
<!-- Bind socket addresses -->
|
||||||
<socketAddresses>
|
<socketAddresses>
|
||||||
<socket address="0.0.0.0" port="8842" type="TCP" />
|
<socket address="0.0.0.0" port="6311" type="TCP" />
|
||||||
</socketAddresses>
|
</socketAddresses>
|
||||||
|
|
||||||
<!-- Ip addresses filter-->
|
<!-- Ip addresses filter-->
|
||||||
|
|
|
||||||
|
|
@ -20,15 +20,15 @@ public class RoomCard {
|
||||||
public void init() {
|
public void init() {
|
||||||
this.cardList.clear();
|
this.cardList.clear();
|
||||||
this.subCardList.clear();
|
this.subCardList.clear();
|
||||||
this.initCard();
|
//this.initCard();
|
||||||
this.shuffle();
|
//this.shuffle();
|
||||||
//this.initCard2();
|
this.initCard2();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initCard2() {
|
private void initCard2() {
|
||||||
List list = Arrays.asList(109, 109, 109, 207, 207, 207, 105, 106, 107, 202, 202, 203, 204);
|
List list = Arrays.asList(207, 208, 207, 207, 207, 107, 107, 107, 104, 104, 202, 203, 204,202);
|
||||||
List list2 = Arrays.asList(209, 209, 209, 206, 206, 203, 203, 208, 208, 208, 202, 202, 202);
|
List list2 = Arrays.asList(103, 103, 103, 104, 107, 107, 202, 107, 206, 206, 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 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(list);
|
||||||
this.cardList.addAll(list2);
|
this.cardList.addAll(list2);
|
||||||
|
|
@ -150,7 +150,7 @@ public class RoomCard {
|
||||||
// 发牌
|
// 发牌
|
||||||
public List<Integer> deal(EXPlayer owner, int num) {
|
public List<Integer> deal(EXPlayer owner, int num) {
|
||||||
List<Integer> dealCards = new ArrayList<>();
|
List<Integer> dealCards = new ArrayList<>();
|
||||||
shuffle();
|
// shuffle();
|
||||||
|
|
||||||
for (int index = 0; index < num ; index++) {
|
for (int index = 0; index < num ; index++) {
|
||||||
double rand = Math.random() % 100 * 100;
|
double rand = Math.random() % 100 * 100;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public class RuleOtherWin implements IRuleBase {
|
||||||
HashMap<Integer, WinCardType> map = new HashMap<Integer, WinCardType>();
|
HashMap<Integer, WinCardType> map = new HashMap<Integer, WinCardType>();
|
||||||
if (ok != null) {
|
if (ok != null) {
|
||||||
for (int card : ok.drawList) {
|
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);
|
Paixing.putWinCardType(map, WinCardType.GANGSHANGPAO, 1,WinCardType.WIN_TYPE_SCORE);
|
||||||
map.remove(WinCardType.XIAOHU);
|
map.remove(WinCardType.XIAOHU);
|
||||||
result = true;
|
result = true;
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,8 @@ public class RuleSelfWin implements IRuleBase {
|
||||||
HashMap<Integer, WinCardType> map = new HashMap<Integer, WinCardType>();
|
HashMap<Integer, WinCardType> map = new HashMap<Integer, WinCardType>();
|
||||||
if (ok != null) {
|
if (ok != null) {
|
||||||
for (int card : ok.drawList) {
|
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);
|
Paixing.putWinCardType(map, WinCardType.GANGSHANGHUA, 1,WinCardType.WIN_TYPE_SCORE);
|
||||||
map.remove(WinCardType.XIAOHU);
|
map.remove(WinCardType.XIAOHU);
|
||||||
result = true;
|
result = true;
|
||||||
|
|
|
||||||
|
|
@ -406,6 +406,9 @@ public class Paixing {
|
||||||
} else {
|
} else {
|
||||||
WinCard win = new WinCard(cardInhand, drawCard);
|
WinCard win = new WinCard(cardInhand, drawCard);
|
||||||
win.jiang = jiang;
|
win.jiang = jiang;
|
||||||
|
|
||||||
|
System.out.println("jiang"+jiang);
|
||||||
|
|
||||||
if (win.tryWin()) {
|
if (win.tryWin()) {
|
||||||
putWinCardType(map, WinCardType.XIAOHU, 1, difen);
|
putWinCardType(map, WinCardType.XIAOHU, 1, difen);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,10 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) {
|
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<>();
|
List<Integer> resultList = new ArrayList<>();
|
||||||
handCards.add(103);
|
handCards.add(103);
|
||||||
handCards.add(103);
|
handCards.add(103);
|
||||||
|
|
@ -161,7 +161,7 @@ public class Main {
|
||||||
// return String.valueOf(maxCard);
|
// return String.valueOf(maxCard);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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
|
artifactId=game_mj_changsha
|
||||||
|
groupId=com.game
|
||||||
|
version=1.0.0
|
||||||
|
|
|
||||||
|
|
@ -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:\robotpro\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\PlayerRuleManager.java
|
D:\robotpro\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\rulestate\PRPongState.java
|
D:\robotpro\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\player\rulestate\PRPongOpenKongState.java
|
D:\robotpro\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\WinCardType.java
|
D:\robotpro\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\PROtherKongState.java
|
D:\robotpro\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\rulestate\PROtherWinState.java
|
D:\robotpro\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\player\rule\RulePongOpenKong.java
|
D:\robotpro\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\rule\RuleSelfWin.java
|
D:\robotpro\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\player\state\EXPlayerKongWinState.java
|
D:\robotpro\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\state\EXPlayerQSWinTipState.java
|
D:\robotpro\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\player\rule\RulePong.java
|
D:\robotpro\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\RoomCard.java
|
D:\robotpro\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\EXScore.java
|
D:\robotpro\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\QSLog.java
|
D:\robotpro\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\EXGameController.java
|
D:\robotpro\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\rule\RuleOtherKong.java
|
D:\robotpro\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\rule\RuleZTWin.java
|
D:\robotpro\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\room\state\EXRoomStartGameState.java
|
D:\robotpro\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\player\state\EXPlayerTianTingTipState.java
|
D:\robotpro\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\SettleLog.java
|
D:\robotpro\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\EXPlayerDiscardState.java
|
D:\robotpro\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\state\EXPlayerTipState.java
|
D:\robotpro\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\rule\RulePongKong.java
|
D:\robotpro\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\rulestate\PROtherOpenKongState.java
|
D:\robotpro\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\Config.java
|
D:\robotpro\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\rulestate\PRSelfOpenKongState.java
|
D:\robotpro\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\player\rule\RuleOtherWin.java
|
D:\robotpro\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\CardNiao.java
|
D:\robotpro\robot_ceshi\xtserver_anchou\majiang\changsha\game_mj_cs\src\main\java\extend\mj\OpCard.java
|
||||||
D:\aga\ceshi\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\EXPlayerDiscardState.java
|
||||||
D:\aga\ceshi\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\player\rule\RuleOtherWin.java
|
||||||
D:\aga\ceshi\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\RuleSelfWin.java
|
||||||
D:\aga\ceshi\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\rulestate\PRSelfWinState.java
|
||||||
D:\aga\ceshi\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\PlayerRuleManager.java
|
||||||
D:\aga\ceshi\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\uitl\WinCard.java
|
||||||
D:\aga\ceshi\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\rule\RuleZTWin.java
|
||||||
D:\aga\ceshi\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\rulestate\PRPongState.java
|
||||||
D:\aga\ceshi\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\PRPongOpenKongState.java
|
||||||
D:\aga\ceshi\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\rule\RulePongOpenKong.java
|
||||||
D:\aga\ceshi\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\rule\RuleSelfOpenKong.java
|
||||||
D:\aga\ceshi\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\room\state\EXRoomSetpState.java
|
||||||
D:\aga\ceshi\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\uitl\CardUtil.java
|
||||||
D:\aga\ceshi\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\player\state\EXPlayerZTWinTipState.java
|
||||||
D:\aga\ceshi\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\player\state\EXPlayerOpenKongState.java
|
||||||
D:\aga\ceshi\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\QSLog.java
|
||||||
D:\aga\ceshi\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\PRPongKongState.java
|
||||||
D:\aga\ceshi\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\RoomCard.java
|
||||||
D:\aga\ceshi\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\EXRoom.java
|
||||||
D:\aga\ceshi\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\EXActionEvent.java
|
||||||
D:\aga\ceshi\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\player\rule\RuleOtherOpenKong.java
|
||||||
D:\aga\ceshi\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\EXScore.java
|
||||||
D:\aga\ceshi\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\player\rule\RuleOtherKong.java
|
||||||
D:\aga\ceshi\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\player\state\EXPlayerPiaoNiaoTipState.java
|
||||||
D:\aga\ceshi\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\EXPlayerWaitState.java
|
||||||
D:\aga\ceshi\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\RuleWeight.java
|
||||||
D:\aga\ceshi\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\room\state\EXRoomDealState.java
|
||||||
D:\aga\ceshi\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\tip\IRuleBase.java
|
||||||
D:\aga\ceshi\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\Config.java
|
||||||
D:\aga\ceshi\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\WinCardType.java
|
||||||
D:\aga\ceshi\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\tip\Action.java
|
||||||
D:\aga\ceshi\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\player\state\EXPlayerDrawTipState.java
|
||||||
D:\aga\ceshi\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\player\state\EXPlayerWaitKongWinState.java
|
||||||
D:\aga\ceshi\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\EXGameController.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\rulestate\PROtherKongState.java
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue