diff options
author | Joe Zhao <ztuowen@gmail.com> | 2014-12-03 00:19:22 +0800 |
---|---|---|
committer | Joe Zhao <ztuowen@gmail.com> | 2014-12-03 00:19:22 +0800 |
commit | 20192ee5e02f3b87992764b68063028cb15e9d50 (patch) | |
tree | ca463d35990d0df51993678661fc601811063189 | |
parent | 134770f0cd68eaf0525e03bb6e6cfbd03153fdb7 (diff) | |
download | Mahjong-20192ee5e02f3b87992764b68063028cb15e9d50.tar.gz Mahjong-20192ee5e02f3b87992764b68063028cb15e9d50.tar.bz2 Mahjong-20192ee5e02f3b87992764b68063028cb15e9d50.zip |
Engine in construction
Before total revision of Aside
-rw-r--r-- | aux/set/Aside.java | 4 | ||||
-rw-r--r-- | engine/Engine.java | 73 | ||||
-rw-r--r-- | player/GenericPlayer.java | 10 | ||||
-rw-r--r-- | player/human/LocalHuman.java | 55 |
4 files changed, 128 insertions, 14 deletions
diff --git a/aux/set/Aside.java b/aux/set/Aside.java index 1503799..c58932c 100644 --- a/aux/set/Aside.java +++ b/aux/set/Aside.java @@ -38,4 +38,8 @@ public class Aside { public Type getType() { return type; } + + public void setFrom(int from) { + this.from = from; + } } diff --git a/engine/Engine.java b/engine/Engine.java index b59035f..efd853c 100644 --- a/engine/Engine.java +++ b/engine/Engine.java @@ -1,12 +1,19 @@ package mahjong.engine; +import mahjong.aux.Card; +import mahjong.aux.set.Aside; +import mahjong.aux.set.Set; import mahjong.player.GenericPlayer; +import mahjong.tools.Deck; + +import java.util.Random; /** * Created by joe on 12/2/14. */ public class Engine { GenericPlayer[] players=new GenericPlayer[4]; + Set deck; public Engine(GenericPlayer player1,GenericPlayer player2,GenericPlayer player3,GenericPlayer player4) { @@ -15,4 +22,70 @@ public class Engine { players[2]=player3; players[3]=player4; } + + public void ShufflePlayer() + { + Random rand=new Random(); + + for (int i=0;i<5;++i) { + int x = rand.nextInt(4); + int y = (x+rand.nextInt(3)+1)%4; + GenericPlayer tmp; + tmp=players[x]; + players[x]=players[y]; + players[y]=tmp; + } + } + + public void start() + { + ShufflePlayer(); + for (int i=0;i<4;++i) + System.out.println(players[i].getName()); + deck = Deck.generateDeck(); + } + + public void mainLoop() + { + start(); + boolean hu=false; + int pos=0; + while (!hu && deck.getSize()>0) + { + Card card=deck.draw(); + GenericPlayer player=players[pos]; + + // Hu + if (player.hand.huAble(card)) { + player.confirmHu(card, 0); + hu=true; + System.out.println(player.getName().concat(" Hule")); + } + // An Gang + if (player.hand.gangAble(card)) + { + Aside aside = player.confirmJiaAnGang(card, 0); + if (aside.getRep().getStdId()==card.getStdId()) + { + for (Aside exAside:player.hand.asides) + if (exAside.getRep().getStdId() == card.getStdId()) { + aside.setFrom(exAside.getFrom()); + player.hand.asides.remove(exAside); + break; + } + player.hand.asides.add(aside); + } + else { + player.hand.asides.add(aside); + for (int i=0;i<3;++i) + player.hand.remove(card); + // @TODO Remove consider card no + } + } + + // + + pos=(pos+1)%4; + } + } } diff --git a/player/GenericPlayer.java b/player/GenericPlayer.java index bd53b8c..bae29a1 100644 --- a/player/GenericPlayer.java +++ b/player/GenericPlayer.java @@ -23,11 +23,11 @@ public abstract class GenericPlayer { public abstract Card putCard(); public abstract void give(Card card); - public abstract Aside confirmPeng(Card card); - public abstract Aside confirmChi(Card card); - public abstract Aside confirmJiaAnGang(Card card); - public abstract Aside confirmMingGang(Card card); + public abstract Aside confirmPeng(Card card, int from); + public abstract Aside confirmChi(Card card, int from); + public abstract Aside confirmJiaAnGang(Card card, int from); + public abstract Aside confirmMingGang(Card card, int from); - public abstract boolean confirmHu(); + public abstract boolean confirmHu(Card card,int from); } diff --git a/player/human/LocalHuman.java b/player/human/LocalHuman.java index 4ae8bf7..48da715 100644 --- a/player/human/LocalHuman.java +++ b/player/human/LocalHuman.java @@ -27,10 +27,8 @@ public class LocalHuman extends GenericPlayer { System.out.println(player.getName().concat(":\n\t").concat("Putdown:\t").concat(card.getNormalName())); } - @Override - public Card putCard(){ - System.out.println("Your deck now:"); - hand.print(); + public Card readCardFromInput() + { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String cardStr="Yi Wan"; @@ -42,6 +40,30 @@ public class LocalHuman extends GenericPlayer { return new Card(cardStr); } + public boolean genConfirm(String question) + { + System.out.println(question); + BufferedReader br = new BufferedReader(new + InputStreamReader(System.in)); + String inStr="O"; + try { + while (inStr.toUpperCase().compareTo("Y")!=0 && inStr.toUpperCase().compareTo("N")!=0) + inStr = br.readLine(); + } catch (IOException e) { + e.printStackTrace(); + } + if (inStr.toUpperCase().compareTo("Y")==0) + return true; + return false; + } + + @Override + public Card putCard(){ + System.out.println("Your deck now:"); + hand.print(); + return readCardFromInput(); + } + @Override public void give(Card card) { System.out.println("You drew:\n\t".concat(card.getNormalName())); @@ -49,27 +71,42 @@ public class LocalHuman extends GenericPlayer { } @Override - public Aside confirmPeng(Card card) { + public Aside confirmPeng(Card card, int from) { + if (genConfirm("Peng?")) + return new Aside(card, Aside.Type.Peng,from); return null; } @Override - public Aside confirmChi(Card card) { + public Aside confirmChi(Card card, int from) { + if (genConfirm("Chi?")) + return new Aside(readCardFromInput(), Aside.Type.jGang, from); return null; } @Override - public Aside confirmJiaAnGang(Card card) { + public Aside confirmJiaAnGang(Card card, int from) { + if (genConfirm("Gang?")) { + if (readCardFromInput().getId() == card.getId()) + return new Aside(card, Aside.Type.jGang, from); + else + return new Aside(card, Aside.Type.aGang, from); + } return null; } @Override - public Aside confirmMingGang(Card card) { + public Aside confirmMingGang(Card card, int from) { + if (genConfirm("Gang?")) + return new Aside(card, Aside.Type.mGang, from); return null; } @Override - public boolean confirmHu() { + public boolean confirmHu(Card card, int from) { + System.out.println("Card:\n\t".concat(card.getNormalName())); + if (genConfirm("Hu?")) + return true; return false; } } |