summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2014-12-06 19:48:28 +0800
committerJoe Zhao <ztuowen@gmail.com>2014-12-06 19:48:28 +0800
commit96bc701ba7a01b940ad5910d85c7b6958ac4a141 (patch)
treeabc759e4486284bb50b91d105b8611660db9eb4f
parentc0825e62c58cd76d3f2b9c34637ee37a21de222a (diff)
downloadMahjong-96bc701ba7a01b940ad5910d85c7b6958ac4a141.tar.gz
Mahjong-96bc701ba7a01b940ad5910d85c7b6958ac4a141.tar.bz2
Mahjong-96bc701ba7a01b940ad5910d85c7b6958ac4a141.zip
Restructuring & workflow construction
-rw-r--r--Main.java3
-rw-r--r--aux/set/Hand.java10
-rw-r--r--aux/set/Meld.java (renamed from aux/set/Aside.java)6
-rw-r--r--engine/Action.java83
-rw-r--r--engine/Engine.java15
-rw-r--r--engine/Logger.java7
-rw-r--r--player/CmdPlayerHandler.java47
-rw-r--r--player/GenericPlayer.java6
-rw-r--r--player/PlayerActionServer.java6
-rw-r--r--player/human/LocalHuman.java2
-rw-r--r--tools/Alert.java21
-rw-r--r--tools/Deck.java4
12 files changed, 185 insertions, 25 deletions
diff --git a/Main.java b/Main.java
index fe91efc..ac92463 100644
--- a/Main.java
+++ b/Main.java
@@ -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;
}