1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
package mahjong.aux;
/**
* Created by joe on 12/1/14.
*/
public class Card {
int id = 0;
static final String[] typeName = {"Wan","Tong","Tiao","Feng","Yuan"};
static final String[] typeSuffix = {"Wan","Tong","Tiao","Feng",""};
static final String[] shuName = {"Guard","Guard","Yi","Er","San","Si","Wu","Liu","Qi","Ba","Jiu","Guard","Guard"};
static final String[] fengName = {"Guard","Guard","Dong","Guard","Guard","Nan","Guard","Guard","Xi","Guard","Guard","Bei","Guard","Guard"};
static final String[] yuanName = {"Guard","Guard","Fa","Guard","Guard","Zhong","Guard","Guard","Bai","Guard","Guard"};
static final String exName = "Hong";
static final String errName = "ERROR";
static public int parseSuffixNameId(String str)
{
int id;
for (int i=0;i<typeSuffix.length;++i)
if (str.compareToIgnoreCase(typeSuffix[i])==0)
return i;
return 0;
}
static public int parseOrdNameId(String str)
{
int id;
for (int i=0;i<shuName.length;++i)
if (str.compareToIgnoreCase(shuName[i])==0)
return i;
for (int i=0;i<fengName.length;++i)
if (str.compareToIgnoreCase(fengName[i])==0)
return i;
for (int i=0;i<yuanName.length;++i)
if (str.compareToIgnoreCase(yuanName[i])==0)
return i;
return 0;
}
static public int parseExId(String str)
{
if (str.compareToIgnoreCase(exName)==0)
return 1;
return 0;
}
// Various Constructor
public Card(){}
public Card(int id)
{
this.id=id;
}
public Card(String name)
{
int type = 4;
int ord = 0;
int ex = 0;
if (name.charAt(0)==':')
{
ord = name.charAt(1)-47;
switch (name.charAt(2))
{
case 'M':
type=0;break;
case 'P':
type=1;break;
case 'S':
type=2;break;
case 'F':
type=3;break;
case 'Z':
type=4;break;
}
if (name.length()>3)
ex=1;
id = (((type<<4)+ord)<<1)+ex;
return;
}
String[] res = name.split("\\s");
ex=parseExId(res[0]);
ord = parseOrdNameId(res[ex]);
if (res.length > ex+1)
type = parseSuffixNameId(res[ex+1]);
id = (((type<<4)+ord)<<1)+ex;
}
// Some Getters
public int getId() {
return id;
}
public int getStdId() {return id&0xFFFE;}
public int getTypeId()
{
return id>>5;
}
public int getOrdId()
{
return (id>>1)&0xF;
}
public int getExId()
{
return id&1;
}
public String getTypeName() {return typeName[getTypeId()];}
public String getTypeSuffix() {return typeSuffix[getTypeId()];}
public String getOrdName()
{
int type = getTypeId();
int ord = getOrdId();
if (isShu())
return shuName[ord];
if (isFeng())
return fengName[ord];
if (isYuan())
return yuanName[ord];
return errName;
}
public String getBaoName()
{
if ( getExId() > 0)
return exName;
return "";
}
public String getNormalName()
{
return getBaoName().concat(" ")
.concat(getOrdName()).concat(" ")
.concat(getTypeSuffix())
.trim();
}
// Some Testers
public boolean isShu() { return getTypeId()<3; }
public boolean isFeng() { return getTypeId() == 3; }
public boolean isYuan() { return getTypeId() == 4; }
public boolean isLaoTou() { return isShu()&& (getOrdId()&7) == 0; }
public boolean isZi() { return isFeng() || isYuan(); }
public boolean is19() { return isLaoTou() || isZi();}
public boolean isZhongZhang(){ return !is19(); }
}
|