summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Main.java22
-rw-r--r--aux/Card.java19
-rw-r--r--aux/set/Set.java69
-rw-r--r--engine/Action.java8
4 files changed, 99 insertions, 19 deletions
diff --git a/Main.java b/Main.java
index e9cd950..53e3016 100644
--- a/Main.java
+++ b/Main.java
@@ -26,16 +26,18 @@ public class Main {
// ":1M",":3M",":3M",":4M",":5M",":6M",":7M",":2S",":2S","dong feng","nan feng","xi feng","bei feng"};
// ":2M",":3M",":4M",":8M",":3P",":4P",":5P",":1S",":2S",":3S",":2S",":3S",":4S"};
- Set hand = new Set(names);
- hand.print();
- System.out.println("++++++++++++++++++++++++++++++++++++");
- CardSet cardSet = new CardSet(0);
- cardSet.add(hand,1);
- Timer timer=new Timer();
- timer.tick();
- System.out.println(cardSet.ameliorate(0).size());
- timer.tock();
- System.out.println(timer.elapse());
+ Set hand = new Set("467m2455897s8p12z");
+ hand.sort();
+ hand.print();
+ System.out.println(hand.toString());
+ System.out.println("++++++++++++++++++++++++++++++++++++");
+ CardSet cardSet = new CardSet(0);
+ cardSet.add(hand,1);
+ Timer timer=new Timer();
+ timer.tick();
+ System.out.println(cardSet.ameliorate(0).size());
+ timer.tock();
+ System.out.println(timer.elapse());
LocalHuman local=new LocalHuman("Joe");
}
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)
diff --git a/engine/Action.java b/engine/Action.java
index 897cc2a..dcec1a2 100644
--- a/engine/Action.java
+++ b/engine/Action.java
@@ -7,4 +7,12 @@ public class Action {
// TODO Generic action
// Requirement: printable,parseable,coverage
// Coverage: System,player
+ public enum Type {System,Player};
+ public enum Act {Info,CardDraw,CardPut,Aside};
+
+ Type type;
+
+ public Type getType() {
+ return type;
+ }
}