diff options
-rw-r--r-- | Main.java | 22 | ||||
-rw-r--r-- | aux/Card.java | 19 | ||||
-rw-r--r-- | aux/set/Set.java | 69 | ||||
-rw-r--r-- | engine/Action.java | 8 |
4 files changed, 99 insertions, 19 deletions
@@ -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; + } } |