summaryrefslogtreecommitdiff
path: root/aux/Card.java
diff options
context:
space:
mode:
Diffstat (limited to 'aux/Card.java')
-rw-r--r--aux/Card.java140
1 files changed, 140 insertions, 0 deletions
diff --git a/aux/Card.java b/aux/Card.java
new file mode 100644
index 0000000..cabd2d9
--- /dev/null
+++ b/aux/Card.java
@@ -0,0 +1,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(); }
+} \ No newline at end of file