public void Unit_TehaiDaiminkanTest() { Tehai testTehai = new Tehai(new List<string> { "1m", "2m", "3m", "4m", "5m", "6m", "7m", "8m", "9m", "1s", "2s", "3s", "1m" }); testTehai.Tsumo(new Pai("1m")); //chi var actor = 0; var target = 3; var furopai = new Pai("1m"); var consumed = new List<Pai> { new Pai("1m"), new Pai("1m"), new Pai("1m") }; consumed.Sort(); Assert.IsTrue(testTehai.tehai.Contains(new Pai("1m"))); //実施 testTehai.Daiminkan(actor, target, furopai, consumed); //フーロオブジェクトの構成が正しいか Assert.AreEqual(testTehai.furos[0].furoType, MJUtil.TartsuType.MINKANTSU); Assert.AreEqual(testTehai.furos[0].furopai, furopai); CollectionAssert.AreEqual(testTehai.furos[0].consumed, consumed); //晒した牌が手配に残っていないか Assert.IsFalse(testTehai.tehai.Contains(new Pai("1m"))); }
public Furo(MJUtil.TartsuType type, int target, Pai furopai, List<Pai> consumed) { this.furoType = type; this.target = target; this.furopai = furopai; this.consumed = new List<Pai>(consumed); this.minPaiSyu = GetMin(furopai, consumed); }
public Field(int kyokuid, int honba, int kyotaku, int oyaPlayerId, string bakaze) { KyokuId = kyokuid; Honba = honba; Kyotaku = kyotaku; OyaPlayerId = oyaPlayerId; Bakaze = new Pai(bakaze); }
// for Unit Test public Furo(string typeString, string pai,List<string> consumed) { if( MJUtil.TARTSU_TYPE_STRING_ENUM_MAP.ContainsKey(typeString) == false) { Debug.WriteLine("invalid Furo Type string !"); Debug.Assert(false); } this.furoType = MJUtil.TARTSU_TYPE_STRING_ENUM_MAP[typeString]; this.furopai = new Pai(pai); this.consumed = consumed.Select(e => new Pai(e)).ToList(); this.minPaiSyu = GetMin(this.furopai, this.consumed); }
int GetMin(Pai furopai, List<Pai> consumed) { consumed.Sort(); if (furopai.PaiString == Pai.UNKNOWN_PAI_STRING) { return consumed[0].PaiNumber; } else { return Math.Min(furopai.PaiNumber, consumed[0].PaiNumber); } }
List<Pai> MakeYama() { //牌作成 var ym = new Pai[YAMA_LENGTH]; for (int i = 0; i < YAMA_LENGTH; i++) { ym[i] = new Pai(i >> 2); } //赤ドラ設定 if (USE_RED_DORA) { foreach (var redDora in PaiConverter.RED_DORA_STRING_ID) { ym[redDora.Value * 4].IsRedDora = true; ym[redDora.Value * 4].PaiString = redDora.Key; } } //シャッフル List<Pai> shuffled = new List<Pai>(ym.OrderBy(i => Guid.NewGuid())); return shuffled; }
public KawaPai(Pai pai) : base(pai.PaiString) { }
public void Sutehai(Pai pai) { discards.Add(new KawaPai(pai)); isReachCalledPosition.Add(false); }
public void Sutehai(Pai pai , bool isReached) { discards.Add(new KawaPai(pai)); isReachCalledPosition.Add(isReached); }
private bool IsValidKakan(Pai pai, List<Pai> consumed) { if (!tehai.Contains(pai)) { return false; } foreach(var furo in furos) { if (furo.furoType == MJUtil.TartsuType.MINKO && furo.furopai.PaiNumber == pai.PaiNumber) { return true; } } return false; }
private static Pai getNextBakaze(Pai bakaze) { Debug.Assert(bakazeTemplate.Contains(bakaze)); var nowBakazeIndex = bakazeTemplate.IndexOf(bakaze); var nextBakazeIndex = (nowBakazeIndex + 1) % 4; return bakazeTemplate[nextBakazeIndex]; }
public void Pon(int actor, int target, Pai pai, List<Pai> consumed) { if (!IsValidConsumed(consumed)) { Debug.Write("invalied naki! @Tehai_Pon"); Debug.Assert(false); return; } //remove consumed foreach (var consumedPai in consumed) { tehai.Remove(consumedPai); } //add furo furos.Add(new Furo(MJUtil.TartsuType.MINKO, target, pai, consumed)); }
public void kakanOnlyMakeFuro(int actor, string pai, List<string> consumed) { var paiObj = new Pai(pai); foreach (var furo in furos) { if (furo.furoType == MJUtil.TartsuType.MINKO && furo.furopai.PaiNumber == paiObj.PaiNumber) { furo.furoType = MJUtil.TartsuType.MINKANTSU; furo.consumed.Add(paiObj); furo.consumed.Sort(); break; } } }
public void Kakan(int actor, Pai pai, List<Pai> consumed) { if (!IsValidKakan(pai, consumed)) { Debug.Write("invalied naki! @Tehai_kakan"); Debug.Assert(false); return; } //remove pai tehai.Remove(pai); //change pon to kakan foreach (var furo in furos) { if (furo.furoType == MJUtil.TartsuType.MINKO && furo.furopai.PaiNumber == pai.PaiNumber) { furo.furoType = MJUtil.TartsuType.MINKANTSU; furo.consumed.Add(pai); furo.consumed.Sort(); break; } } }
public void Da(Pai dapai) { if (tehai.Any( e => e.PaiString == dapai.PaiString)) { tehai.RemoveAt(tehai.FindIndex(e => e.PaiString == dapai.PaiString)); } else { Debug.Write("tehai doesn't contains {0}! @Tehai_Da", dapai.PaiString); Debug.Assert(false); return; } tehaiString = GetTehaiStringList(); }
public void Unit_TehaiKakanTest() { Tehai testTehai = new Tehai(new List<string> { "1m", "2m", "3m", "4m", "5m", "6m", "7m", "8m", "9m", "1s", "2s", "3s", "4s" }); testTehai.Tsumo(new Pai("1m")); //pon infomation var actor = 0; var target = 3; var furopai = new Pai("1m"); var consumed = new List<Pai> { new Pai("1m"), new Pai("1m") }; consumed.Sort(); Assert.IsTrue(testTehai.tehai.Contains(new Pai("1m"))); //execute pon testTehai.Pon(actor, target, furopai, consumed); //tsumo for kakan testTehai.Tsumo(new Pai("1m")); //kakan infomation var kakanFuropai = new Pai("1m"); var kakanConsumed = new List<Pai> { new Pai("1m"), new Pai("1m"), new Pai("1m") }; consumed.Sort(); //execute kakan testTehai.Kakan(actor, kakanFuropai, kakanConsumed); //フーロオブジェクトの構成が正しいか Assert.AreEqual(MJUtil.TartsuType.MINKANTSU, testTehai.furos.LastOrDefault().furoType); Assert.AreEqual(kakanFuropai, testTehai.furos.LastOrDefault().furopai); CollectionAssert.AreEqual(kakanConsumed, testTehai.furos.LastOrDefault().consumed); //晒した牌が手配に残っていないか Assert.IsFalse(testTehai.tehai.Contains(new Pai("1m"))); }
public void Tsumo(Pai tsumopai) { tehai.Add(tsumopai); tehaiString.Add(tsumopai.PaiString); }