// 打哪些牌可以立直. public bool tryGetReachHaiIndex(Tehai a_tehai, Hai tsumoHai, out List <int> haiIndexList) { haiIndexList = new List <int>(); // 鳴いている場合は、リーチできない。 if (a_tehai.isNaki()) { return(false); } /// find all reach-enabled hais in a_tehai, also the tsumoHai. _reachHaiList.Clear(); // As _jyunTehais won't sort automatically on new hais added, // so we can add tsumo hai directly to simplify the checks. Tehai tehai_copy = new Tehai(a_tehai); tehai_copy.addJyunTehai(tsumoHai); tehai_copy.Sort(); Hai[] jyunTehai = tehai_copy.getJyunTehai(); for (int i = 0; i < jyunTehai.Length; i++) { Hai haiTemp = tehai_copy.removeJyunTehaiAt(i); for (int id = Hai.ID_MIN; id <= Hai.ID_MAX; id++) { countFormat.setCounterFormat(tehai_copy, new Hai(id)); if (countFormat.calculateCombisCount(combis) > 0) { _reachHaiList.Add(new Hai(haiTemp)); break; } } tehai_copy.insertJyunTehai(i, haiTemp); } /// transfer to index list. if (_reachHaiList.Count > 0) { jyunTehai = a_tehai.getJyunTehai(); for (int i = 0; i < _reachHaiList.Count; i++) { for (int j = 0; j < jyunTehai.Length; j++) { if (jyunTehai[j].ID == _reachHaiList[i].ID && !haiIndexList.Contains(j)) { haiIndexList.Add(j); } } if (tsumoHai.ID == _reachHaiList[i].ID && !haiIndexList.Contains(jyunTehai.Length)) { haiIndexList.Add(jyunTehai.Length); } } haiIndexList.Sort(); return(true); } return(false); }