summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2014-12-03 13:05:53 +0800
committerJoe Zhao <ztuowen@gmail.com>2014-12-03 13:05:53 +0800
commit635589583b9af8994dd3f947dd3eb31157ecde1f (patch)
treed4f1fc0c7d8483bf6b21e6c5139dea0adb9db4c4
parent20192ee5e02f3b87992764b68063028cb15e9d50 (diff)
downloadMahjong-635589583b9af8994dd3f947dd3eb31157ecde1f.tar.gz
Mahjong-635589583b9af8994dd3f947dd3eb31157ecde1f.tar.bz2
Mahjong-635589583b9af8994dd3f947dd3eb31157ecde1f.zip
Revised Aside
Need better input method
-rw-r--r--aux/set/Aside.java8
-rw-r--r--aux/set/Hand.java2
-rw-r--r--engine/Engine.java22
-rw-r--r--player/GenericPlayer.java8
-rw-r--r--player/PlayerAction.java7
-rw-r--r--player/human/LocalHuman.java20
6 files changed, 50 insertions, 17 deletions
diff --git a/aux/set/Aside.java b/aux/set/Aside.java
index c58932c..2a3b530 100644
--- a/aux/set/Aside.java
+++ b/aux/set/Aside.java
@@ -10,24 +10,24 @@ public class Aside {
public enum Type {Chi,Peng,aGang,mGang,jGang};
private Type type;
- private Card rep;
+ private Card[] rep;
private int from;
- public Aside(Card rep,Type type,int from)
+ public Aside(Card[] rep,Type type,int from)
{
this.rep=rep;
this.type=type;
this.from=from;
}
- public Aside(Card rep,Type type)
+ public Aside(Card[] rep,Type type)
{
this.rep=rep;
this.type=type;
this.from= 0;
}
- public Card getRep() {
+ public Card[] getRep() {
return rep;
}
diff --git a/aux/set/Hand.java b/aux/set/Hand.java
index cf5767e..a66944f 100644
--- a/aux/set/Hand.java
+++ b/aux/set/Hand.java
@@ -70,7 +70,7 @@ public class Hand extends Set {
public boolean jiaGangAble(Card card)
{
for (Aside i:asides)
- if (i.getType()== Aside.Type.Peng && card.getStdId() == i.getRep().getStdId())
+ if (i.getType()== Aside.Type.Peng && card.getStdId() == i.getRep()[0].getStdId())
return true;
return false;
}
diff --git a/engine/Engine.java b/engine/Engine.java
index efd853c..eec7b73 100644
--- a/engine/Engine.java
+++ b/engine/Engine.java
@@ -45,6 +45,16 @@ public class Engine {
deck = Deck.generateDeck();
}
+ public static void playerPutAsideCards(GenericPlayer player, Card card, Aside aside)
+ {
+ boolean mark=true;
+ for (Card asCard:aside.getRep())
+ if (card.getId() == asCard.getId() && mark)
+ mark = true;
+ else
+ player.hand.remove(asCard);
+ }
+
public void mainLoop()
{
start();
@@ -61,14 +71,15 @@ public class Engine {
hu=true;
System.out.println(player.getName().concat(" Hule"));
}
- // An Gang
+ // Gang
if (player.hand.gangAble(card))
{
Aside aside = player.confirmJiaAnGang(card, 0);
- if (aside.getRep().getStdId()==card.getStdId())
+ if (aside.getRep()[0].getStdId()==card.getStdId())
{
+ // An
for (Aside exAside:player.hand.asides)
- if (exAside.getRep().getStdId() == card.getStdId()) {
+ if (exAside.getRep()[0].getStdId() == card.getStdId()) {
aside.setFrom(exAside.getFrom());
player.hand.asides.remove(exAside);
break;
@@ -76,9 +87,8 @@ public class Engine {
player.hand.asides.add(aside);
}
else {
- player.hand.asides.add(aside);
- for (int i=0;i<3;++i)
- player.hand.remove(card);
+ // Jia
+ playerPutAsideCards(player,card,aside);
// @TODO Remove consider card no
}
}
diff --git a/player/GenericPlayer.java b/player/GenericPlayer.java
index bae29a1..b965310 100644
--- a/player/GenericPlayer.java
+++ b/player/GenericPlayer.java
@@ -12,6 +12,7 @@ import java.io.IOException;
*/
public abstract class GenericPlayer {
public Hand hand=new Hand();
+ int score;
protected String name;
@@ -30,4 +31,11 @@ public abstract class GenericPlayer {
public abstract boolean confirmHu(Card card,int from);
+ public void setScore(int score) {
+ this.score = score;
+ }
+
+ public int getScore() {
+ return score;
+ }
}
diff --git a/player/PlayerAction.java b/player/PlayerAction.java
new file mode 100644
index 0000000..fb7b205
--- /dev/null
+++ b/player/PlayerAction.java
@@ -0,0 +1,7 @@
+package mahjong.player;
+
+/**
+ * Created by joe on 12/3/14.
+ */
+public class PlayerAction {
+}
diff --git a/player/human/LocalHuman.java b/player/human/LocalHuman.java
index 48da715..a977177 100644
--- a/player/human/LocalHuman.java
+++ b/player/human/LocalHuman.java
@@ -22,7 +22,7 @@ public class LocalHuman extends GenericPlayer {
@Override
public void stateUpdate(GenericPlayer player, Aside aside, Card card) {
if (aside!=null)
- System.out.println(player.getName().concat(":\n\t").concat(aside.getType().name()).concat("\tStart with\t").concat(aside.getRep().getNormalName()));
+ System.out.println(player.getName().concat(":\n\t").concat(aside.getType().name()).concat("\tStart with\t").concat(aside.getRep()[0].getNormalName()));
if (card!=null)
System.out.println(player.getName().concat(":\n\t").concat("Putdown:\t").concat(card.getNormalName()));
}
@@ -40,6 +40,14 @@ public class LocalHuman extends GenericPlayer {
return new Card(cardStr);
}
+ public Card[] readMultipleCardFromInput(int num)
+ {
+ Card[] res=new Card[num];
+ for (int i=0;i<num;++i)
+ res[i]=readCardFromInput();
+ return res;
+ }
+
public boolean genConfirm(String question)
{
System.out.println(question);
@@ -73,14 +81,14 @@ public class LocalHuman extends GenericPlayer {
@Override
public Aside confirmPeng(Card card, int from) {
if (genConfirm("Peng?"))
- return new Aside(card, Aside.Type.Peng,from);
+ return new Aside(readMultipleCardFromInput(3), Aside.Type.Peng,from);
return null;
}
@Override
public Aside confirmChi(Card card, int from) {
if (genConfirm("Chi?"))
- return new Aside(readCardFromInput(), Aside.Type.jGang, from);
+ return new Aside(readMultipleCardFromInput(3), Aside.Type.jGang, from);
return null;
}
@@ -88,9 +96,9 @@ public class LocalHuman extends GenericPlayer {
public Aside confirmJiaAnGang(Card card, int from) {
if (genConfirm("Gang?")) {
if (readCardFromInput().getId() == card.getId())
- return new Aside(card, Aside.Type.jGang, from);
+ return new Aside(readMultipleCardFromInput(4), Aside.Type.jGang, from);
else
- return new Aside(card, Aside.Type.aGang, from);
+ return new Aside(readMultipleCardFromInput(4), Aside.Type.aGang, from);
}
return null;
}
@@ -98,7 +106,7 @@ public class LocalHuman extends GenericPlayer {
@Override
public Aside confirmMingGang(Card card, int from) {
if (genConfirm("Gang?"))
- return new Aside(card, Aside.Type.mGang, from);
+ return new Aside(readMultipleCardFromInput(4), Aside.Type.mGang, from);
return null;
}