summaryrefslogtreecommitdiff
path: root/aux
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2014-12-03 19:55:31 +0800
committerJoe Zhao <ztuowen@gmail.com>2014-12-03 19:55:31 +0800
commit6659427197a6036ff44ecf7e87e9e1b65d97d416 (patch)
tree06af211b7a472e4833030ff6dcfc610ed0c96c4a /aux
parentf4a4f8a8cbd6a6277eff2cf9eb7cc48c35e99474 (diff)
downloadMahjong-6659427197a6036ff44ecf7e87e9e1b65d97d416.tar.gz
Mahjong-6659427197a6036ff44ecf7e87e9e1b65d97d416.tar.bz2
Mahjong-6659427197a6036ff44ecf7e87e9e1b65d97d416.zip
Added new input method
Diffstat (limited to 'aux')
-rw-r--r--aux/Card.java19
-rw-r--r--aux/set/Set.java69
2 files changed, 79 insertions, 9 deletions
diff --git a/aux/Card.java b/aux/Card.java
index c84b9bb..4b351b1 100644
--- a/aux/Card.java
+++ b/aux/Card.java
@@ -13,10 +13,17 @@ public class Card {
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[] 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;
@@ -60,7 +67,7 @@ public class Card {
if (name.charAt(0)==':')
{
ord = name.charAt(1)-47;
- switch (name.charAt(2))
+ switch (Character.toUpperCase(name.charAt(2)))
{
case 'M':
type=0;break;
@@ -68,14 +75,10 @@ public class Card {
type=1;break;
case 'S':
type=2;break;
- case 'F':
- type=3;break;
case 'Z':
- type=4;break;
+ type=3;break;
}
- if (name.length()>3)
- ex=1;
- id = (((type<<4)+ord)<<1)+ex;
+ id = idLut[type][ord];
return;
}
String[] res = name.split("\\s");
diff --git a/aux/set/Set.java b/aux/set/Set.java
index d087955..be1cdca 100644
--- a/aux/set/Set.java
+++ b/aux/set/Set.java
@@ -23,10 +23,38 @@ public class Set {
for (Card card:cards)
add(card);
}
+ public Set(String str)
+ {
+ int typeid=0;
+ for (int i=str.length()-1;i>=0;--i)
+ {
+ if (!Character.isDigit(str.charAt(i)))
+ switch (Character.toUpperCase(str.charAt(i)))
+ {
+ case 'M':
+ typeid=0;
+ break;
+ case 'P':
+ typeid=1;
+ break;
+ case 'S':
+ typeid=2;
+ break;
+ case 'Z':
+ typeid=3;
+ break;
+ }
+ else
+ {
+ int posid=str.charAt(i)-48;
+ add(new Card(Card.idLut[typeid][posid]));
+ }
+ }
+ }
public void sort()
{
- cards.sort((Card x,Card y) -> x.getExId()-y.getExId());
+ cards.sort((Card x,Card y) -> x.getId()-y.getId());
}
public void add(Card in)
{
@@ -67,6 +95,45 @@ public class Set {
return cards.size();
}
+ static char typeId2Char(int typeid)
+ {
+ switch (typeid)
+ {
+ case 0:
+ return 'm';
+ case 1:
+ return 'p';
+ case 2:
+ return 's';
+ case 3:
+ return 'z';
+ }
+ return ' ';
+ }
+
+ @Override
+ public String toString() {
+ int typeid=-1;
+ String str="";
+ sort();
+ for (Card card:cards) {
+ if (typeid!=Math.min(3, card.getTypeId()))
+ {
+ if (typeid>=0)
+ str=str.concat(Character.toString(typeId2Char(typeid)));
+ }
+ typeid=Math.min(3, card.getTypeId());
+ int i=0;
+ for (int j=0;j<10;++j)
+ if (Card.idLut[typeid][j]==card.getId())
+ i=j;
+ str=str.concat(Integer.toString(i));
+ }
+ if (typeid>=0)
+ str=str.concat(Character.toString(typeId2Char(typeid)));
+ return str;
+ }
+
public void print()
{
for (Card card:cards)