diff options
author | Joe Zhao <ztuowen@gmail.com> | 2014-12-06 19:48:28 +0800 |
---|---|---|
committer | Joe Zhao <ztuowen@gmail.com> | 2014-12-06 19:48:28 +0800 |
commit | 96bc701ba7a01b940ad5910d85c7b6958ac4a141 (patch) | |
tree | abc759e4486284bb50b91d105b8611660db9eb4f | |
parent | c0825e62c58cd76d3f2b9c34637ee37a21de222a (diff) | |
download | Mahjong-96bc701ba7a01b940ad5910d85c7b6958ac4a141.tar.gz Mahjong-96bc701ba7a01b940ad5910d85c7b6958ac4a141.tar.bz2 Mahjong-96bc701ba7a01b940ad5910d85c7b6958ac4a141.zip |
Restructuring & workflow construction
-rw-r--r-- | Main.java | 3 | ||||
-rw-r--r-- | aux/set/Hand.java | 10 | ||||
-rw-r--r-- | aux/set/Meld.java (renamed from aux/set/Aside.java) | 6 | ||||
-rw-r--r-- | engine/Action.java | 83 | ||||
-rw-r--r-- | engine/Engine.java | 15 | ||||
-rw-r--r-- | engine/Logger.java | 7 | ||||
-rw-r--r-- | player/CmdPlayerHandler.java | 47 | ||||
-rw-r--r-- | player/GenericPlayer.java | 6 | ||||
-rw-r--r-- | player/PlayerActionServer.java | 6 | ||||
-rw-r--r-- | player/human/LocalHuman.java | 2 | ||||
-rw-r--r-- | tools/Alert.java | 21 | ||||
-rw-r--r-- | tools/Deck.java | 4 |
12 files changed, 185 insertions, 25 deletions
@@ -2,6 +2,7 @@ package mahjong; import mahjong.aux.set.CardSet; import mahjong.aux.set.Set; +import mahjong.engine.Action; import mahjong.player.human.LocalHuman; import mahjong.tools.Timer; @@ -32,6 +33,6 @@ public class Main { timer.tock(); System.out.println(timer.elapse()); - LocalHuman local=new LocalHuman("Joe"); + System.out.println(new Action(new Action(Action.Type.System,Action.Place.Info,Action.Act.Info,"Test").toString()).toString()); } } diff --git a/aux/set/Hand.java b/aux/set/Hand.java index a66944f..a865a90 100644 --- a/aux/set/Hand.java +++ b/aux/set/Hand.java @@ -23,19 +23,19 @@ public class Hand extends Set { super(cards); } - public Vector<Aside> asides = new Vector<Aside>(); + public Vector<Meld> melds = new Vector<Meld>(); public void init() { cards.clear(); - asides.clear(); + melds.clear(); } public boolean huAble(Card card) { boolean hu=false; accountant.add(card,1); - if (accountant.calTing(asides.size())==0) + if (accountant.calTing(melds.size())==0) hu=true; accountant.add(card,-1); return hu; @@ -69,8 +69,8 @@ public class Hand extends Set { public boolean jiaGangAble(Card card) { - for (Aside i:asides) - if (i.getType()== Aside.Type.Peng && card.getStdId() == i.getRep()[0].getStdId()) + for (Meld i:melds) + if (i.getType()== Meld.Type.Peng && card.getStdId() == i.getRep()[0].getStdId()) return true; return false; } diff --git a/aux/set/Aside.java b/aux/set/Meld.java index 2a3b530..8da091b 100644 --- a/aux/set/Aside.java +++ b/aux/set/Meld.java @@ -6,21 +6,21 @@ import mahjong.player.GenericPlayer; /** * Created by joe on 12/2/14. */ -public class Aside { +public class Meld { public enum Type {Chi,Peng,aGang,mGang,jGang}; private Type type; private Card[] rep; private int from; - public Aside(Card[] rep,Type type,int from) + public Meld(Card[] rep,Type type,int from) { this.rep=rep; this.type=type; this.from=from; } - public Aside(Card[] rep,Type type) + public Meld(Card[] rep,Type type) { this.rep=rep; this.type=type; diff --git a/engine/Action.java b/engine/Action.java index 3009fa0..3f2f365 100644 --- a/engine/Action.java +++ b/engine/Action.java @@ -1,29 +1,38 @@ package mahjong.engine; +import java.util.Random; + /** * Created by joe on 12/3/14. + * Action handles information passing between server and clients */ public class Action { // TODO Generic action // Requirement: printable,parseable,coverage // Coverage: System,player - public enum Type {System,Player}; + private static Random idGen = new Random(); + private static int cnter = 0; + public enum Type {System,Player} // System info merely reflect system state // Player info pertaining to players; - public enum Place {Info,East,South,West,North}; - public enum Act {Info,CardDraw,CardPut,Aside}; + public enum Place {Info,East,South,West,North} + public enum Act {Info,Draw,Put,Meld} Type type; Act act; Place place; String message; + int guid; - public Type getType() { - return type; + public void newGUID() + { + this.guid=(idGen.nextInt()&0xFFF000)+cnter; + cnter = (cnter+1)&0xFFF; } public Action(Type type,Place place,Act act,String message) { + newGUID(); this.type = type; this.place = place; this.act = act; @@ -31,10 +40,72 @@ public class Action { } public Action(String str) { + String[] res=str.trim().split("\t"); + guid = Integer.parseInt(res[0]); + switch (res[1].trim().toUpperCase().charAt(0)) + { + case 'S': + type=Type.System; + break; + case 'P': + type=Type.Player; + } + switch (res[2].trim().toUpperCase().charAt(0)) + { + case 'I': + place=Place.Info; + break; + case 'E': + place=Place.East; + break; + case 'S': + place=Place.South; + break; + case 'W': + place=Place.West; + break; + case 'N': + place=Place.North; + } + switch (res[3].trim().toUpperCase().charAt(0)) + { + case 'I': + act=Act.Info; + break; + case 'D': + act=Act.Draw; + break; + case 'P': + act=Act.Put; + break; + case 'M': + act=Act.Meld; + } + message=res[4]; } @Override public String toString() { - return super.toString(); + return String.format("%d\t%c\t%c\t%c\t%s",guid,type.toString().charAt(0),place.toString().charAt(0),act.toString().charAt(0),message); + } + + public Act getAct() { + return act; + } + + public Place getPlace() { + return place; + } + + public String getMessage() { + return message; + } + + public int getGuid() { + return guid; + } + + public Type getType() { + return type; } } diff --git a/engine/Engine.java b/engine/Engine.java index 6a8773d..7507ca1 100644 --- a/engine/Engine.java +++ b/engine/Engine.java @@ -1,7 +1,7 @@ package mahjong.engine; import mahjong.aux.Card; -import mahjong.aux.set.Aside; +import mahjong.aux.set.Meld; import mahjong.aux.set.Set; import mahjong.player.GenericPlayer; import mahjong.player.PlayerActionServer; @@ -46,10 +46,15 @@ public class Engine { deck = Deck.generateDeck(true); } - public static void playerPutAsideCards(GenericPlayer player, Card card, Aside aside) + public boolean sync4Player(int id) + { + return (players[id].stateAlert(new Action(Action.Type.System, Action.Place.Info, Action.Act.Info,"Heartbeat")).getMessage().compareTo("ACK")==0); + } + + public static void playerPutAsideCards(GenericPlayer player, Card card, Meld meld) { boolean mark=true; - for (Card asCard:aside.getRep()) + for (Card asCard:meld.getRep()) if (card.getId() == asCard.getId() && mark) mark = true; else @@ -58,7 +63,7 @@ public class Engine { public void mainLoop() { - start(); + /*start(); boolean hu=false; int pos=0; while (!hu && deck.getSize()>0) @@ -97,6 +102,6 @@ public class Engine { // pos=(pos+1)%4; - } + }*/ } } diff --git a/engine/Logger.java b/engine/Logger.java index fb56698..566fa08 100644 --- a/engine/Logger.java +++ b/engine/Logger.java @@ -19,6 +19,13 @@ public class Logger { actions.add(action); } + public int getLastGuidIndex() + { + if (actions.size()==0) + return -1; + return actions.lastElement().getGuid(); + } + @Override public String toString() { String str=""; diff --git a/player/CmdPlayerHandler.java b/player/CmdPlayerHandler.java new file mode 100644 index 0000000..8d1e91b --- /dev/null +++ b/player/CmdPlayerHandler.java @@ -0,0 +1,47 @@ +package mahjong.player; + +import mahjong.engine.Action; +import mahjong.engine.Logger; + +/** + * Created by joe on 12/5/14. + */ +public class CmdPlayerHandler implements PlayerActionHandler { + GenericPlayer player; + Logger logger; + + public CmdPlayerHandler(GenericPlayer player) + { + this.player = player; + } + + @Override + public Action stateAlert(Action action) { + if (action.getType()== Action.Type.System) + { + // System info + if (action.getPlace() == Action.Place.Info) + { + if (action.getMessage().compareTo("") == 0) + } + else + switch (action.getPlace()) { + case East: + case South: + case West: + case North: + break; + } + } + else + { + } + return null; + } + + @Override + public void stateUpdate(Action action) { + if (action == null) + return; + } +}
\ No newline at end of file diff --git a/player/GenericPlayer.java b/player/GenericPlayer.java index 23cea93..f1a9755 100644 --- a/player/GenericPlayer.java +++ b/player/GenericPlayer.java @@ -1,7 +1,7 @@ package mahjong.player; import mahjong.aux.Card; -import mahjong.aux.set.Aside; +import mahjong.aux.set.Meld; import mahjong.aux.set.Hand; import mahjong.aux.set.Set; import mahjong.engine.Action; @@ -22,7 +22,9 @@ public abstract class GenericPlayer { } public abstract Action stateAlert(Action action); - public abstract void stateUpdate(Action action); + public void stateUpdate(Action action) + { + } public void setScore(int score) { this.score = score; diff --git a/player/PlayerActionServer.java b/player/PlayerActionServer.java index 09d2417..9e126d4 100644 --- a/player/PlayerActionServer.java +++ b/player/PlayerActionServer.java @@ -2,6 +2,7 @@ package mahjong.player; import mahjong.aux.set.Hand; import mahjong.engine.Action; +import mahjong.tools.Alert; /** * Created by joe on 12/4/14. @@ -25,13 +26,18 @@ public class PlayerActionServer implements PlayerActionHandler { return name; } + @Override public Action stateAlert(Action action) { + Alert.Error(action==null,"Action can't be null in alert"); return null; } + @Override public void stateUpdate(Action action) { + if (action == null) + return; } public int getScore() { diff --git a/player/human/LocalHuman.java b/player/human/LocalHuman.java index e04b89a..e9641dd 100644 --- a/player/human/LocalHuman.java +++ b/player/human/LocalHuman.java @@ -1,7 +1,7 @@ package mahjong.player.human; import mahjong.aux.Card; -import mahjong.aux.set.Aside; +import mahjong.aux.set.Meld; import mahjong.aux.set.Hand; import mahjong.engine.Action; import mahjong.player.GenericPlayer; diff --git a/tools/Alert.java b/tools/Alert.java new file mode 100644 index 0000000..55d7838 --- /dev/null +++ b/tools/Alert.java @@ -0,0 +1,21 @@ +package mahjong.tools; + +/** + * Created by joe on 12/6/14. + */ +public class Alert { + public static void Error(boolean bool,String str) + { + if (bool) + { + System.out.println(str); + System.exit(1); + } + } + + public static void Info(boolean bool,String str) + { + if (bool) + System.out.println(str); + } +} diff --git a/tools/Deck.java b/tools/Deck.java index 6ff2cc9..0198e45 100644 --- a/tools/Deck.java +++ b/tools/Deck.java @@ -16,8 +16,8 @@ public class Deck { deck.add(new Card(CardSet.deckIds[i])); if (ex) { - deck.remove(new Card(":5s"));deck.remove(new Card(":5p"));deck.remove(new Card(":5m")); - deck.remove(new Card(":0s"));deck.remove(new Card(":0p"));deck.remove(new Card(":0m")); + deck.remove(new Card(":5s"));deck.remove(new Card(":5p"));deck.remove(new Card(":5p"));deck.remove(new Card(":5m")); + deck.remove(new Card(":0s"));deck.remove(new Card(":0p"));deck.remove(new Card(":0p"));deck.remove(new Card(":0m")); } return deck; } |