예제 #1
0
        public static List <Poker> ConvertToPokerList(PokerPattern pattern, PatternValue value)
        {
            if (pattern == null)
            {
                return(null);
            }

            var pokers = new List <Poker>();

            if (pattern.Type == PatternType.BUCHU)
            {
                return(pokers);
            }

            var pool = new List <Poker>();

            if (pattern.Pokers != null)
            {
                pool.AddRange(pattern.Pokers);
            }

            var pile = pattern.HeadPile;

            while (pile != null)
            {
                var list = new List <Poker>();
                for (int i = 0; i < pool.Count; i++)
                {
                    var p = pool[i];
                    if (p.NumType == pile.NumType)
                    {
                        list.Add(p);
                        pool.RemoveAt(i);
                        i--;
                    }
                }

                if (list.Count < pile.Count)
                {
                    for (int i = 0, n = pile.Count - list.Count; i < n; i++)
                    {
                        for (int c = 0; c < pool.Count; c++)
                        {
                            if (value.IsHeartHost(pool[c]))
                            {
                                list.Add(pool[c]);
                                pool.RemoveAt(c);
                                c--;
                            }
                        }
                    }
                }

                pokers.AddRange(list);

                pile = pile.Next;
            }

            return(pokers);
        }
예제 #2
0
 /// <summary>
 /// Default constructor
 /// </summary>
 public Fill()
 {
     IndexedColor    = 64;
     PatternFill     = PatternValue.none;
     ForegroundColor = DEFAULTCOLOR;
     BackgroundColor = DEFAULTCOLOR;
 }
예제 #3
0
 /// <summary>
 /// Constructor with foreground and background color
 /// </summary>
 /// <param name="foreground">Foreground color of the fill</param>
 /// <param name="background">Background color of the fill</param>
 public Fill(string foreground, string background)
 {
     BackgroundColor = background;
     ForegroundColor = foreground;
     IndexedColor    = 64;
     PatternFill     = PatternValue.solid;
 }
예제 #4
0
        public void SetMyLastChuPai(PokerLogic.PokerPattern chuPai)
        {
            var value  = new PatternValue(GetCurrentHost);
            var pokers = PokerLogicUtil.ConvertToPokerList(chuPai, value);

            var myUser = _myUser.Read();

            SetLastChuPai(SeatPosition.Bottom, pokers, myUser != null ? myUser.sex : 0);
        }
예제 #5
0
 /// <summary>
 /// Sets the color and the depending fill type
 /// </summary>
 /// <param name="value">color value</param>
 /// <param name="filltype">fill type (fill or pattern)</param>
 public void SetColor(string value, FillType filltype)
 {
     if (filltype == FillType.fillColor)
     {
         ForegroundColor = value;
         BackgroundColor = DEFAULTCOLOR;
     }
     else
     {
         ForegroundColor = DEFAULTCOLOR;
         BackgroundColor = value;
     }
     PatternFill = PatternValue.solid;
 }
예제 #6
0
        private void SetLastChuPai(SeatPosition seatPos, PokerPattern lastChuPai, int sex, bool withEffect = true)
        {
            if (lastChuPai == null)
            {
                return;
            }

            var value   = new PatternValue(GetCurrentHost);
            var matcher = new PatternMatcher(value);
            var pattern = matcher.Match(PokerLogicUtil.ToPokerList(lastChuPai.pokers));
            var pokers  = PokerLogicUtil.ConvertToPokerList(pattern, value);

            SetLastChuPai(seatPos, pokers, sex, withEffect);
        }
예제 #7
0
 /// <summary>
 /// Constructor with color value and fill type
 /// </summary>
 /// <param name="value">Color value</param>
 /// <param name="filltype">Fill type (fill or pattern)</param>
 public Fill(string value, FillType filltype)
 {
     if (filltype == FillType.fillColor)
     {
         BackgroundColor = value;
         ForegroundColor = DEFAULTCOLOR;
     }
     else
     {
         BackgroundColor = DEFAULTCOLOR;
         ForegroundColor = value;
     }
     IndexedColor = 64;
     PatternFill  = PatternValue.solid;
 }
예제 #8
0
        public void TestSelectSuperABCDE()
        {
            _currentHost = PokerNumType.PA;

            _value   = new PatternValue(GetCurrentHost);
            _matcher = new PatternMatcher(_value);
            _pokerAI = new PokerAI(_matcher, _value);

            _pokerAI.SetMyPokers(PokerUtil.ParsePokerList("SQ, SQ, CQ, D2, HA"));

            var lastChuPai = _matcher.Match(PokerUtil.ParsePokerList("D7, HA, D9, D0, DJ"));
            var selected   = _pokerAI.SelectBiggerXXXXOrSuperABCDE(lastChuPai, 0, true);

            Assert.AreEqual(PokerPattern.NULL, selected);
        }
예제 #9
0
        private IEnumerable <PatternValue> BuildPatterns(IEnumerable <PatternXml> patterns)
        {
            var res = new List <PatternValue>();

            if (patterns != null)
            {
                foreach (var p in patterns)
                {
                    var pv = new PatternValue();
                    pv.Pattern = p.Pattern;
                    pv.Text    = p.Value;
                    res.Add(pv);
                }
            }
            return(res);
        }
예제 #10
0
        /// <summary>
        /// Gets the pattern name from the enum
        /// </summary>
        /// <param name="pattern">Enum to process</param>
        /// <returns>The valid value of the pattern as String</returns>
        public static string GetPatternName(PatternValue pattern)
        {
            string output;

            switch (pattern)
            {
            case PatternValue.none:
                output = "none";
                break;

            case PatternValue.solid:
                output = "solid";
                break;

            case PatternValue.darkGray:
                output = "darkGray";
                break;

            case PatternValue.mediumGray:
                output = "mediumGray";
                break;

            case PatternValue.lightGray:
                output = "lightGray";
                break;

            case PatternValue.gray0625:
                output = "gray0625";
                break;

            case PatternValue.gray125:
                output = "gray125";
                break;

            default:
                output = "none";
                break;
            }
            return(output);
        }
예제 #11
0
 private void Awake()
 {
     _patternValue = new PatternValue(GetCurrentHost);
 }
예제 #12
0
        private void SetLastChuPai(SeatPosition seatPos, List <Poker> lastChuPai, int sex, bool withEffect = true)
        {
            if (seatPos == SeatPosition.Null)
            {
                return;
            }

            var chuPai = GetLastChuPai(seatPos);

            if (PokerLogicUtil.PokerListEqual(chuPai, lastChuPai))
            {
                // 如果现在要显示的牌,和当前的牌相等的话,就不需要再显示了。
                return;
            }

            SetLastChuPai(seatPos, lastChuPai);

            var slots   = GetLastChuPaiSlots(seatPos);
            var buChu   = GetBuChuImage(seatPos);
            var basePos = GetBasePos(seatPos);

            if (slots.Count > 0)
            {
                for (int i = 0; i < slots.Count; i++)
                {
                    SetSlotIdle(slots[i]);
                }

                slots.Clear();
            }

            if (lastChuPai == null || lastChuPai.Count <= 0)
            {
                var tweener = GetBuChuTweener(seatPos);

                if (tweener != null)
                {
                    tweener.Kill();
                }

                if (buChu)
                {
                    buChu.sprite = BuChuSprite;
                    if (!buChu.gameObject.activeSelf)
                    {
                        // 只有没显示的情况下,才显示动画。
                        tweener = StartBuChuAnimation(buChu.transform);
                        SetBuChuTweener(seatPos, tweener);
                    }
                }

                if (withEffect)
                {
                    _soundController.PlayBuChuSound();
                    _soundController.PlayChuPaiSound(PokerLogic.PokerPattern.BUCHU, sex);
                }

                return;
            }

            if (buChu && buChu.gameObject.activeSelf)
            {
                buChu.gameObject.SetActive(false);
            }

            foreach (var p in lastChuPai)
            {
                var slot = GetSlot();
                if (slot)
                {
                    slot.Poker = p;
                    slots.Add(slot);
                }
            }

            // SortSlot(slots);
            UpdateSlotPosition(basePos, slots);

            if (withEffect)
            {
                var value   = new PatternValue(GetCurrentHost);
                var matcher = new PatternMatcher(value);

                var matched = matcher.Match(lastChuPai);
                if (matched != null && !matched.IsNull)
                {
                    _soundController.PlayChuPaiSound(matched, sex);
                    GameWindow.ShowChuPaiEffect(matched);
                }
            }
        }
예제 #13
0
 public PatternCalculationTaskProgressInfo(double Progress, PatternValue Value)
 {
     this.Progress = Progress;
     this.Value    = Value;
 }