Example #1
0
        public void 手配ポンテスト()
        {
            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"));


            //chi
            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")));
            

            //実施
            testTehai.Pon(actor, target, furopai, consumed);

            //フーロオブジェクトの構成が正しいか
            Assert.AreEqual(testTehai.furos[0].ftype, MJUtil.TartsuType.MINKO);
            Assert.AreEqual(testTehai.furos[0].furopai, furopai);
            CollectionAssert.AreEqual(testTehai.furos[0].consumed, consumed);

            //晒した牌が手配に残っていないか
            Assert.IsFalse(testTehai.tehai.Contains( new Pai("1m")));

        }
Example #2
0
        private 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 - 1].IsRedDora = true;
                    ym[redDora.Value * 4 - 1].PaiString = redDora.Key;
                }
            }

            //シャッフル
            List <Pai> shuffled = new List <Pai>(ym.OrderBy(i => Guid.NewGuid()));

            return(shuffled);
        }
Example #3
0
 public Field()
 {
     KyokuId = 0;
     Honba = 0;
     Kyotaku = 0;
     OyaPlayerId = getOyaPlayerID(0);
     Bakaze = getBakaze(0);
 }
Example #4
0
 public Field()
 {
     KyokuId     = 0;
     Honba       = 0;
     Kyotaku     = 0;
     OyaPlayerId = getOyaPlayerID(0);
     Bakaze      = getBakaze(0);
 }
Example #5
0
 public Field(int kyokuid, int honba, int kyotaku)
 {
     KyokuId     = kyokuid;
     Honba       = honba;
     Kyotaku     = kyotaku;
     OyaPlayerId = getOyaPlayerID(kyokuid);
     Bakaze      = getBakaze(kyokuid);
 }
Example #6
0
 public Furo(MJUtil.TartsuType type, int target, Pai furopai, List <Pai> consumed)
 {
     this.ftype     = type;
     this.target    = target;
     this.furopai   = furopai;
     this.consumed  = new List <Pai>(consumed);
     this.minPaiSyu = GetMin(furopai, consumed);
 }
Example #7
0
        public Field(int kyokuid, int honba, int kyotaku)
        {

            KyokuId = kyokuid;
            Honba = honba;
            Kyotaku = kyotaku;
            OyaPlayerId = getOyaPlayerID(kyokuid);
            Bakaze = getBakaze(kyokuid);
        }
Example #8
0
        //ここからクライアントからの命令を受けてモデル内情報を更新する関数群
        public MJsonMessageDahai Dahai(int actor, string pai, bool tsumogiri)
        {
            var dapai = new Pai(pai);

            tehais[actor].Da(dapai);
            kawas[actor].Sutehai(dapai, false, false);
            GoNextActor();
            return(new MJsonMessageDahai(actor, pai, tsumogiri));
        }
Example #9
0
 public void Da(Pai dapai)
 {
     if (tehai.Any( e => e.PaiString == dapai.PaiString))
     {
         tehai.RemoveAt(tehai.FindIndex(e => e.PaiString == dapai.PaiString));
     }
     else
     {
         Console.Write("tehai doesn't contains {0}! @Tehai_Da", dapai);
         return;
     }
 }
Example #10
0
 public void Da(Pai dapai)
 {
     if (tehai.Any(e => e.PaiString == dapai.PaiString))
     {
         tehai.RemoveAt(tehai.FindIndex(e => e.PaiString == dapai.PaiString));
     }
     else
     {
         Console.Write("tehai doesn't contains {0}! @Tehai_Da", dapai);
         return;
     }
 }
Example #11
0
        public int CompareTo(object obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException();
            }
            Pai other = obj as Pai;

            if (other == null)
            {
                throw new ArgumentException();
            }

            return(this.PaiString.CompareTo(other.PaiString));
        }
Example #12
0
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            Pai other = obj as Pai;

            if (other == null)
            {
                return(false);
            }

            return(this.PaiString.Equals(other.PaiString));
        }
Example #13
0
        public void Daiminkan(int actor, int target, Pai pai, List <Pai> consumed)
        {
            if (!IsValidConsumed(consumed))
            {
                Console.Write("invalied naki! @Tehai_Daiminkan");
                return;
            }
            //remove consumed
            foreach (var consumedPai in consumed)
            {
                tehai.Remove(consumedPai);
            }

            //add furo
            furos.Add(new Furo(MJUtil.TartsuType.MINKANTSU, target, pai, consumed));
        }
Example #14
0
        private bool IsValidKakan(Pai pai, List <Pai> consumed)
        {
            if (!tehai.Contains(pai))
            {
                return(false);
            }

            foreach (var furo in furos)
            {
                if (furo.ftype == MJUtil.TartsuType.MINKO && furo.consumed.SequenceEqual(consumed))
                {
                    return(true);
                }
            }

            return(false);
        }
Example #15
0
        public void Chi(int actor, int target, Pai pai, List<Pai> consumed)
        {
            if ( !IsValidConsumed(consumed) )
            {
                Console.Write("invalied naki! @Tehai_Chi");
                return;
            }

            //remove consumed
            foreach (var consumedPai in consumed)
            {
                tehai.Remove(consumedPai);
            }

            //add furo
            furos.Add(new Furo(MJUtil.TartsuType.MINSYUN, target, pai, consumed));

        }
Example #16
0
        public void Kakan(int actor, int target, Pai pai, List <Pai> consumed)
        {
            if (!IsValidKakan(pai, consumed))
            {
                Console.Write("invalied naki! @Tehai_kakan");
                return;
            }
            //remove pai
            tehai.Remove(pai);

            //change pon to kakan
            foreach (var furo in furos)
            {
                if (furo.ftype == MJUtil.TartsuType.MINKO && furo.consumed.SequenceEqual(consumed))
                {
                    furo.ftype = MJUtil.TartsuType.MINKANTSU;
                    furo.consumed.Add(pai);
                    furo.consumed.Sort();
                    break;
                }
            }
        }
Example #17
0
        private 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 - 1].IsRedDora = true;
                    ym[redDora.Value * 4 - 1].PaiString = redDora.Key;
                }
            }

            //シャッフル
            List<Pai> shuffled = new List<Pai>(ym.OrderBy(i => Guid.NewGuid()));
            return shuffled;
        }
Example #18
0
 //ここからクライアントからの命令を受けてモデル内情報を更新する関数群
 public MJsonMessageDahai Dahai(int actor, string pai, bool tsumogiri)
 {
     var dapai = new Pai(pai);
     tehais[actor].Da(dapai);
     kawas[actor].Sutehai(dapai, false, false);
     GoNextActor();
     return new MJsonMessageDahai(actor, pai, tsumogiri);
 }
Example #19
0
 public KawaPai(Pai pai, bool isFuroTargeted, bool isReached) : base(pai.PaiString)
 {
     this.isFuroTargeted = isFuroTargeted;
     this.isReached      = isReached;
 }
Example #20
0
 public void Tsumo(Pai tsumopai)
 {
     tehai.Add(tsumopai);
 }
Example #21
0
 public KawaPai(Pai pai, bool isFuroTargeted, bool isReached) : base(pai.PaiString)
 {
     this.isFuroTargeted = isFuroTargeted;
     this.isReached = isReached;
 }
Example #22
0
 public void Sutehai(Pai pai, bool isFuroTargeted, bool isReached)
 {
     discards.Add(new KawaPai(pai, isFuroTargeted, isReached));
 }
Example #23
0
        private bool IsValidKakan(Pai pai, List<Pai> consumed)
        {
            if (!tehai.Contains(pai))
            {
                return false;
            }

            foreach(var furo in furos)
            {
                if (furo.ftype == MJUtil.TartsuType.MINKO && furo.consumed.SequenceEqual(consumed))
                {
                   return true;
                }
            }

            return false;
        }
Example #24
0
 public void Sutehai(Pai pai , bool isFuroTargeted, bool isReached){
     discards.Add(new KawaPai(pai, isFuroTargeted, isReached));
 }
Example #25
0
        public Furo(MJUtil.TartsuType type, int target, Pai furopai, List<Pai> consumed)
        {
            this.ftype = type;
            this.target = target;
            this.furopai = furopai;
            this.consumed = new List<Pai>(consumed);
            this.minPaiSyu = GetMin(furopai, consumed);

        }
Example #26
0
 private int GetMin(Pai furopai, List <Pai> consumed)
 {
     consumed.Sort();
     return(Math.Min(furopai.PaiNumber, consumed[0].PaiNumber));
 }
Example #27
0
 private int GetMin(Pai furopai, List<Pai> consumed){
     consumed.Sort();
     return Math.Min(furopai.PaiNumber, consumed[0].PaiNumber);
 }
Example #28
0
 public void Tsumo(Pai tsumopai)
 {
     tehai.Add(tsumopai);
 }
Example #29
0
        public void Kakan(int actor, int target, Pai pai, List<Pai> consumed)
        {
            if (!IsValidKakan(pai, consumed))
            {
                Console.Write("invalied naki! @Tehai_kakan");
                return;
            }
            //remove pai
            tehai.Remove(pai);

            //change pon to kakan
            foreach (var furo in furos)
            {
                if (furo.ftype == MJUtil.TartsuType.MINKO && furo.consumed.SequenceEqual(consumed))
                {
                    furo.ftype = MJUtil.TartsuType.MINKANTSU;
                    furo.consumed.Add(pai);
                    furo.consumed.Sort();
                    break;
                }
            }
        }