diff options
Diffstat (limited to 'aux')
| -rw-r--r-- | aux/Hand.java | 28 | ||||
| -rw-r--r-- | aux/set/Aside.java | 41 | ||||
| -rw-r--r-- | aux/set/CardSet.java | 50 | ||||
| -rw-r--r-- | aux/set/Hand.java | 66 | 
4 files changed, 136 insertions, 49 deletions
diff --git a/aux/Hand.java b/aux/Hand.java deleted file mode 100644 index ef8da6c..0000000 --- a/aux/Hand.java +++ /dev/null @@ -1,28 +0,0 @@ -package mahjong.aux; - -/** - * Created by joe on 12/1/14. - */ - -public class Hand { -    static final int total = 13; -    Card[] cards = new Card[13]; - -    // Constructors -    Hand(){} -    Hand(String[] cardNames) -    { -        for (int i = 0; i<total;++i) -            cards[i] = new Card(cardNames[i]); -    } -    Hand(Card[] cards) -    { -        this.cards = cards; -    } - -    // Some operation -    int calTing() -    { -        return 0; -    } -} diff --git a/aux/set/Aside.java b/aux/set/Aside.java new file mode 100644 index 0000000..1503799 --- /dev/null +++ b/aux/set/Aside.java @@ -0,0 +1,41 @@ +package mahjong.aux.set; + +import mahjong.aux.Card; +import mahjong.player.GenericPlayer; + +/** + * Created by joe on 12/2/14. + */ +public class Aside { +    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) +    { +        this.rep=rep; +        this.type=type; +        this.from=from; +    } + +    public Aside(Card rep,Type type) +    { +        this.rep=rep; +        this.type=type; +        this.from= 0; +    } + +    public Card getRep() { +        return rep; +    } + +    public int getFrom() { +        return from; +    } + +    public Type getType() { +        return type; +    } +} diff --git a/aux/set/CardSet.java b/aux/set/CardSet.java index 8df6055..56a998d 100644 --- a/aux/set/CardSet.java +++ b/aux/set/CardSet.java @@ -15,9 +15,9 @@ public class CardSet {                      36, 38, 40, 42, 44, 46, 48, 50, 52,                      68, 70, 72, 74, 76, 78, 80, 82, 84,                      100,106,112,118, -                    132,138,144,146 +                    132,138,144,148              }; -    private static final int[] id2OrdLut = new int[] +    public static final int[] id2OrdLut = new int[]              {                     34, 34,  0,  1,  2,  3,  4,  5,  6,  7,  8, 34, 34, 34, 34, 34,                     34, 34,  9,  10, 11, 12, 13, 14, 15, 16, 17,34, 34, 34, 34, 34, @@ -49,11 +49,11 @@ public class CardSet {          cardRem[getOrd(card.getStdId())]+=mult;      } -    protected int std2Id(int std) +    public static int std2Id(int std)      {          return std>>1;      } -    protected int getOrd(int id) +    public static int getOrd(int id)      {          return id2OrdLut[std2Id(id)];      } @@ -68,24 +68,36 @@ public class CardSet {      private int cnt=0; -    public int calTing() +    public int calTing(int mian)      {          //cnt=0; -        int res=calTing(0,cardRem[0],0,0,0); +        int res=calTing(0,cardRem[0],0,0,mian);          //System.out.println(cnt);          return res;      } -    private int nextCardOrd(int i) +    public static int nextCardOrd(int i)      {          return getOrd(deckIds[i]+2);      } -    private int next2CardOrd(int i) +    public static int next2CardOrd(int i)      {          return nextCardOrd(nextCardOrd(i));      } +    public static int prevCardOrd(int i) +    { +        return getOrd(deckIds[i]-2); +    } + +    public static int prev2CardOrd(int i) +    { +        return prevCardOrd(prevCardOrd(i)); +    } + +    public int cardLeft(int ord){ return cardRem[ord]; } +      private int calTing(int pos,int rems,int shoupai,int ting, int mian)      {          //++cnt; @@ -141,17 +153,17 @@ public class CardSet {          return Math.min(6-shoupai,res);      } -    public Vector<Card> jinZhang() +    public Vector<Card> jinZhang(int mian)      {          Vector<Card> cards = new Vector<Card>();          int res=0; -        int ref=calTing(); +        int ref=calTing(mian);          for (int i=0;i<cardTypeTotal;++i)              if (cardRem[i]<3)              {                  Card card=new Card(deckIds[i]);                  add(card,1); -                if (calTing()<ref) { +                if (calTing(mian)<ref) {                      ++res;                      cards.add(card);                  } @@ -160,19 +172,19 @@ public class CardSet {          return cards;      } -    public Vector<Card> ameliorate() +    public Vector<Card> ameliorate(int mian)      {          Vector<Card> cards = new Vector<Card>();          int res=0; -        int ref=calTing(); -        int jinref=jinZhang().size(); +        int ref=calTing(mian); +        int jinref=jinZhang(mian).size();          for (int i=0;i<cardTypeTotal;++i)              if (cardRem[i]<3)              {                  Card card=new Card(deckIds[i]);                  add(card,1); -                if (calTing()==ref) { -                    if (maxJinZhang(ref)>jinref) { +                if (calTing(mian)==ref) { +                    if (maxJinZhang(mian,ref)>jinref) {                          ++res;                          cards.add(card);                          //System.out.println(card.getNormalName()); @@ -183,15 +195,15 @@ public class CardSet {          return cards;      } -    public int maxJinZhang(int xt) +    public int maxJinZhang(int mian,int xt)      {          int res=0;          for (int i=0;i<cardTypeTotal;++i)              if (cardRem[i]>0)              {                  --cardRem[i]; -                if (calTing()==xt) -                    res=Math.max(res,jinZhang().size()); +                if (calTing(mian)==xt) +                    res=Math.max(res,jinZhang(mian).size());                  ++cardRem[i];              }          return res; diff --git a/aux/set/Hand.java b/aux/set/Hand.java index b715e54..cf5767e 100644 --- a/aux/set/Hand.java +++ b/aux/set/Hand.java @@ -2,10 +2,14 @@ package mahjong.aux.set;  import mahjong.aux.Card; +import java.util.Vector; +  /**   * Created by joe on 12/1/14.   */  public class Hand extends Set { +    private CardSet accountant = new CardSet(0); +      public Hand()      {          super(); @@ -19,8 +23,66 @@ public class Hand extends Set {          super(cards);      } -    public Set[] generateEnds() +    public Vector<Aside> asides = new Vector<Aside>(); + +    public void init() +    { +        cards.clear(); +        asides.clear(); +    } + +    public boolean huAble(Card card) +    { +        boolean hu=false; +        accountant.add(card,1); +        if (accountant.calTing(asides.size())==0) +            hu=true; +        accountant.add(card,-1); +        return hu; +    } + +    public boolean chiAble(Card card) +    { +        if (accountant.cardLeft(CardSet.nextCardOrd(CardSet.std2Id(card.getStdId())))>0) +            if (accountant.cardLeft(CardSet.prevCardOrd(CardSet.std2Id(card.getStdId())))>0 +                || accountant.cardLeft(CardSet.next2CardOrd(CardSet.std2Id(card.getStdId())))>0) +                return true; +        if (accountant.cardLeft(CardSet.prevCardOrd(CardSet.std2Id(card.getStdId())))>0 +            && accountant.cardLeft(CardSet.prev2CardOrd(CardSet.std2Id(card.getStdId())))>0) +            return true; +        return false; +    } + +    public boolean pengAble(Card card) +    { +        if (accountant.cardLeft(CardSet.std2Id(card.getStdId()))>2) +            return true; +        return false; +    } + +    public boolean gangAble(Card card) +    { +        if (accountant.cardLeft(CardSet.std2Id(card.getStdId()))>3) +            return true; +        return false; +    } + +    public boolean jiaGangAble(Card card) +    { +        for (Aside i:asides) +        if (i.getType()== Aside.Type.Peng && card.getStdId() == i.getRep().getStdId()) +            return true; +        return false; +    } + +    public boolean anGangAble(Card card)      { -        return null; +        boolean gang=false; +        accountant.add(card,1); +        for (int i=0;i< CardSet.cardTypeTotal;++i) +            if (accountant.cardLeft(i)>3) +                gang=true; +        accountant.add(card,-1); +        return gang;      }  }  | 
