summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2014-12-03 00:19:22 +0800
committerJoe Zhao <ztuowen@gmail.com>2014-12-03 00:19:22 +0800
commit20192ee5e02f3b87992764b68063028cb15e9d50 (patch)
treeca463d35990d0df51993678661fc601811063189
parent134770f0cd68eaf0525e03bb6e6cfbd03153fdb7 (diff)
downloadMahjong-20192ee5e02f3b87992764b68063028cb15e9d50.tar.gz
Mahjong-20192ee5e02f3b87992764b68063028cb15e9d50.tar.bz2
Mahjong-20192ee5e02f3b87992764b68063028cb15e9d50.zip
Engine in construction
Before total revision of Aside
-rw-r--r--aux/set/Aside.java4
-rw-r--r--engine/Engine.java73
-rw-r--r--player/GenericPlayer.java10
-rw-r--r--player/human/LocalHuman.java55
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;
}
}