Example #1
0
 /**
  * 対子であるかのチェックを伴います
  *
  * @param tile1 1枚目
  * @param tile2 2枚目
  */
 public Toitsu(Tile tile1, Tile tile2)
 {
     if (this.isMentsu_b = Toitsu.check(tile1, tile2))
     {
         this.identifierTile = tile1;
     }
 }
Example #2
0
        /**
         * 槓子は見つけません
         */
        public void findMentsu()
        {
            checkTileOverFlow();

            // 国士無双型の判定
            initStock();
            KokushimusoResolver kokushimuso = new KokushimusoResolver(handStocks);

            if (kokushimuso.isMatch())
            {
                isKokushimuso = true;
                canWin        = true;
                return;
            }

            // 雀頭の候補を探してストックしておく
            initStock();
            List <Toitsu> toitsuList = Toitsu.findJantoCandidate(handStocks);

            // 雀頭が一つも見つからなければfalse
            if (toitsuList.Count() == 0)
            {
                canWin = false;
                return;
            }

            //七対子なら保存しておく
            if (toitsuList.Count() == 7)
            {
                canWin = true;
                List <Mentsu> mentsuList = new List <Mentsu>(7);
                mentsuList.AddRange(toitsuList);
                MentsuComp comp = new MentsuComp(mentsuList, last);
                mentsuCompSet.Add(comp);
            }

            // その他の判定
            //雀頭候補から探す
            List <Mentsu> winCandidate = new List <Mentsu>(4);

            foreach (Toitsu toitsu in toitsuList)
            {
                // 操作変数を初期化
                init(winCandidate, toitsu);

                //刻子優先検索
                //検索
                winCandidate.AddRange(findKotsuCandidate());
                winCandidate.AddRange(findShuntsuCandidate());
                //全て0かチェック
                convertToMentsuComp(winCandidate);

                init(winCandidate, toitsu);
                //順子優先検索
                winCandidate.AddRange(findShuntsuCandidate());
                winCandidate.AddRange(findKotsuCandidate());
                convertToMentsuComp(winCandidate);
            }
        }
Example #3
0
 /**
  * 操作変数・面子の候補を初期化し
  * 雀頭の分をストックから減らします
  *
  * @param winCandidate 面子の候補
  * @param toitsu       この検索サイクルの雀頭候補
  */
 private void init(List <Mentsu> winCandidate, Toitsu toitsu)
 {
     // 操作変数を初期化
     initStock();
     winCandidate.Clear();
     //ストックから雀頭を減らす
     handStocks[toitsu.getTile().getCode()] -= 2;
     winCandidate.Add(toitsu);
 }
Example #4
0
        public bool equals(Object o)
        {
            if (this == o)
            {
                return(true);
            }
            if (!(o is Toitsu))
            {
                return(false);
            }

            Toitsu toitsu = (Toitsu)o;

            if (isMentsu_b != toitsu.isMentsu_b)
            {
                return(false);
            }
            return(identifierTile == toitsu.identifierTile);
        }