示例#1
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);
            }
        }
示例#2
0
 /**
  * handsStockが全て0の場合
  * winCandidateは完成しているので
  * mentsuCompに代入します
  *
  * @param winCandidate mentsuCompに代入するかもしれない
  */
 private void convertToMentsuComp(List <Mentsu> winCandidate)
 {
     //全て0かチェック
     if (isAllZero(handStocks))
     {
         canWin = true;
         winCandidate.AddRange(inputtedMentsuList);
         MentsuComp mentsuComp = new MentsuComp(winCandidate, last);
         if (!mentsuCompSet.Contains(mentsuComp))
         {
             mentsuCompSet.Add(mentsuComp);
         }
     }
 }
示例#3
0
        /**
         * 各面子のリストの順番は関係ないので、
         * 面子の順番が違っていてもtrueになります
         *
         * @param o
         * @return
         */

        public bool equals(Object o)
        {
            if (this == o)
            {
                return(true);
            }
            if (!(o is MentsuComp))
            {
                return(false);
            }

            MentsuComp that = (MentsuComp)o;

            if (last != that.last)
            {
                return(false);
            }
            if (toitsuList.Count() != that.toitsuList.Count())
            {
                return(false);
            }
            if (shuntsuList.Count() != that.shuntsuList.Count())
            {
                return(false);
            }
            if (kotsuList.Count() != that.kotsuList.Count())
            {
                return(false);
            }
            if (kantsuList.Count() != that.kantsuList.Count())
            {
                return(false);
            }
            foreach (Toitsu toitsu in toitsuList)
            {
                if (!that.toitsuList.Contains(toitsu))
                {
                    return(false);
                }
            }
            foreach (Shuntsu shuntsu in shuntsuList)
            {
                if (!that.shuntsuList.Contains(shuntsu))
                {
                    return(false);
                }
            }
            foreach (Kotsu kotsu in kotsuList)
            {
                if (!that.kotsuList.Contains(kotsu))
                {
                    return(false);
                }
            }
            foreach (Kantsu kantsu in kantsuList)
            {
                if (!that.kantsuList.Contains(kantsu))
                {
                    return(false);
                }
            }

            return(true);
        }