/** * 槓子は見つけません */ 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); } }
/** * 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); } } }
/** * 各面子のリストの順番は関係ないので、 * 面子の順番が違っていても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); }