/** * 対子であるかのチェックを伴います * * @param tile1 1枚目 * @param tile2 2枚目 */ public Toitsu(Tile tile1, Tile tile2) { if (this.isMentsu_b = Toitsu.check(tile1, tile2)) { this.identifierTile = tile1; } }
/** * 槓子は見つけません */ 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); } }
/** * 操作変数・面子の候補を初期化し * 雀頭の分をストックから減らします * * @param winCandidate 面子の候補 * @param toitsu この検索サイクルの雀頭候補 */ private void init(List <Mentsu> winCandidate, Toitsu toitsu) { // 操作変数を初期化 initStock(); winCandidate.Clear(); //ストックから雀頭を減らす handStocks[toitsu.getTile().getCode()] -= 2; winCandidate.Add(toitsu); }
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); }