package mahjong.aux; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * 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","Bai","Guard","Guard","Fa","Guard","Guard","Zhong","Guard","Guard"}; static final String exName = "Hong"; static final String errName = "ERROR"; static public final int[][] idLut = new int[][]{ {11, 4, 6, 8, 10, 12, 14, 16, 18, 20}, {45, 36, 38, 40, 42, 44, 46, 48, 50, 52}, {77, 68, 70, 72, 74, 76, 78, 80, 82, 84}, {11,100,106,112,118,132,138,144,148,148}, }; static public int parseSuffixNameId(String str) { int id; for (int i=0;i 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(); } public static Card readCardFromInput() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String cardStr="Yi Wan"; try { cardStr = br.readLine(); } catch (IOException e) { e.printStackTrace(); } return new Card(cardStr); } // TODO This way of input will certainly kill users public static Card[] readMultipleCardFromInput(int num) { Card[] res=new Card[num]; for (int i=0;i