예제 #1
0
        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")));
        }
예제 #2
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
 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);
 }
예제 #3
0
파일: Field.cs 프로젝트: rick0000/MjModel
 public Field(int kyokuid, int honba, int kyotaku, int oyaPlayerId, string bakaze)
 {
     KyokuId = kyokuid;
     Honba = honba;
     Kyotaku = kyotaku;
     OyaPlayerId = oyaPlayerId;
     Bakaze = new Pai(bakaze);
 }
예제 #4
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
 // 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);
 }
예제 #5
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
        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);
            }
        }
예제 #6
0
파일: Yama.cs 프로젝트: rick0000/MjModel
        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;
        }
예제 #7
0
파일: Kawa.cs 프로젝트: rick0000/MjModel
 public KawaPai(Pai pai)
     : base(pai.PaiString)
 {
 }
예제 #8
0
파일: Kawa.cs 프로젝트: rick0000/MjModel
 public void Sutehai(Pai pai)
 {
     discards.Add(new KawaPai(pai));
     isReachCalledPosition.Add(false);
 }
예제 #9
0
파일: Kawa.cs 프로젝트: rick0000/MjModel
 public void Sutehai(Pai pai , bool isReached)
 {
     discards.Add(new KawaPai(pai));
     isReachCalledPosition.Add(isReached);
 }
예제 #10
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
        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;
        }
예제 #11
0
파일: Field.cs 프로젝트: rick0000/MjModel
 private static Pai getNextBakaze(Pai bakaze)
 {
     Debug.Assert(bakazeTemplate.Contains(bakaze));
     var nowBakazeIndex = bakazeTemplate.IndexOf(bakaze);
     var nextBakazeIndex = (nowBakazeIndex + 1) % 4;
     return bakazeTemplate[nextBakazeIndex];
 }
예제 #12
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
        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));
        }
예제 #13
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
 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;
         }
     }
 }
예제 #14
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
        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;
                }
            }
        }
예제 #15
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
 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();
 }
예제 #16
0
        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")));
        }
예제 #17
0
파일: Tehai.cs 프로젝트: rick0000/MjModel
 public void Tsumo(Pai tsumopai)
 {
     tehai.Add(tsumopai);
     tehaiString.Add(tsumopai.PaiString);
 }