Example #1
0
 public CardGroup(CardGroup _cardGroup, CardGroupType _type)
 {
     HandPositionMap = new Dictionary <int, int>();
     //IEnumerator tEnumerator = _cardGroup.Group.GetEnumerator();
     //while (tEnumerator.MoveNext())
     //{
     //	AbstractCard tAbstractCard =
     //}
     if (_cardGroup.Group.Count > 0)
     {
         for (int i = 0; i < _cardGroup.Group.Count; i++)
         {
             Group.Add(_cardGroup.Group[i]);
         }
     }
 }
Example #2
0
 public CardGroup(CardGroupType _type)
 {
     HandPositionMap = new Dictionary <int, int>();
     Type            = _type;
 }
Example #3
0
 public CardGroup(CardGroupType type, Card card)
     : this(type, new[] { card })
 {
 }
Example #4
0
 public CardGroup(CardGroupType type, IEnumerable <Card> cards)
 {
     this.Type  = type;
     this.Cards = cards;
 }
Example #5
0
 public CardGroup(CardGroupType type)
     : this(type, (Card[])null)
 {
 }
Example #6
0
    public List <int> getTipCardIdx(List <int> lCard, int iTipIdx, List <int> lOutCard)
    {
        List <int> lIdx       = new List <int> ();
        List <int> lKeysValid = new List <int> ();
        var        iOutLen    = lOutCard.Count;
        var        cardType   = getCardType(lOutCard);

        _iCardType = cardType;
        if (cardType == CardGroupType.cgKING_CARD)
        {
            return(lIdx);
        }
        var iCardNum = getCardNum();

        if (cardType == CardGroupType.cgKING_CARD)
        {
            return(lIdx);
        }
        var iLen = lCard.Count;
        Dictionary <int, int> dic = new Dictionary <int, int> ();

        for (int i = 0; i < iLen; i++)
        {
            var iCard = lCard [i] % 100;
            if (iCard == 1 || iCard == 2)
            {
                iCard += 13;
            }
            if (dic.ContainsKey(iCard) == true)
            {
                dic [iCard]++;
            }
            else
            {
                dic.Add(iCard, 1);
            }
        }
        var idx = iTipIdx;

        _iTipIdx = iTipIdx;
        List <int>         lKeys   = new List <int> (dic.Keys);
        List <List <int> > lSPKeys = new List <List <int> > ();

        for (int i = 0; i < 4; i++)
        {
            lSPKeys.Add(new List <int> ());
        }
        for (int i = 0; i < lKeys.Count; i++)
        {
            var key   = lKeys [i];
            var value = dic [key];
            lSPKeys [value - 1].Add(key);
        }
        List <int> lKeyTemp = new List <int> ();

        if (cardType == CardGroupType.cgZERO)
        {
            List <CardGroupType> lType = new List <CardGroupType> ()
            {
                CardGroupType.cgSINGLE,
                CardGroupType.cgDOUBLE,
                CardGroupType.cgTHREE,
                CardGroupType.cgBOMB_CARD,
            };
            for (int i = 0; i < lSPKeys.Count; i++)
            {
                if (i == 0 && _delt.getBOneLeft() == true && (lSPKeys [1].Count + lSPKeys [2].Count + lSPKeys [3].Count > 0))
                {
                    continue;
                }
                lKeyTemp = lSPKeys [i];
                var iTemp = i;
                if (lKeyTemp.Count > 0)
                {
                    if (idx <= -1)
                    {
                        if (idx < -1)
                        {
                            return(lIdx);
                        }
                        _iCardType = lType [i];
                        if (i == 0 && _delt.getBOneLeft() == true)
                        {
                            _iCardNum = lKeyTemp [0];
                        }
                        else
                        {
                            _iCardNum = lKeyTemp [lKeyTemp.Count - 1];
                        }
                        _iTipIdx++;
                        while (true)
                        {
                            lKeysValid.Add(_iCardNum);
                            if (iTemp == 0)
                            {
                                break;
                            }
                            iTemp--;
                        }
                        lIdx = getLIdx(lCard, lKeysValid);
                    }
                    idx--;
                }
            }
            _iTipIdx = -1;
            return(lIdx);
        }
        List <CardGroupType> lType1 = new List <CardGroupType> ()
        {
            CardGroupType.cgSINGLE,
            CardGroupType.cgDOUBLE,
            CardGroupType.cgTHREE,
            CardGroupType.cgBOMB_CARD,
        };

        for (int k = 0; k < lType1.Count; k++)
        {
            if (cardType == lType1 [k])
            {
                if (k < 3)
                {
                    var iNum = k + 1;
                    for (int j = k; j < 4; j++)
                    {
                        lKeyTemp = lSPKeys [j];
                        if (lKeyTemp.Count > 0)
                        {
                            for (int i = lKeyTemp.Count - 1; i >= 0; i--)
                            {
                                var iCardNumTemp = lKeyTemp [i];
                                if (iCardNumTemp > iCardNum)
                                {
                                    if (idx <= -1)
                                    {
                                        if (idx < -1)
                                        {
                                            return(lIdx);
                                        }
                                        if (j == 0 && _delt.getBOneLeft() == true)
                                        {
                                            _iCardNum = lSPKeys [j] [0];
                                        }
                                        else
                                        {
                                            _iCardNum = iCardNumTemp;
                                        }
                                        _iTipIdx++;
                                        while (true)
                                        {
                                            lKeysValid.Add(_iCardNum);
                                            iNum--;
                                            if (iNum == 0)
                                            {
                                                break;
                                            }
                                        }
                                        lIdx = getLIdx(lCard, lKeysValid);
                                    }
                                    idx--;
                                }
                            }
                        }
                    }
                }
            }
        }
        List <CardGroupType> lType2 = new List <CardGroupType> {
            CardGroupType.cgSINGLE_LINE,
            CardGroupType.cgDOUBLE_LINE,
            CardGroupType.cgTHREE_LINE
        };

        for (int k = 0; k < lType2.Count; k++)
        {
            if (cardType == lType2 [k])
            {
                iOutLen = iOutLen / (k + 1);
                if (lKeys.Count >= iOutLen)
                {
                    for (int i = lKeys.Count - 1; i >= iOutLen - 1; i--)
                    {
                        List <int> lCardTemp = new List <int>();
                        for (int j = i; j > i - iOutLen; j--)
                        {
                            var iCardNumTemp = lKeys [j];
                            var iNumTemp     = k + 1;
                            if (dic [iCardNumTemp] >= iNumTemp)
                            {
                                while (true)
                                {
                                    lCardTemp.Add(iCardNumTemp);
                                    iNumTemp--;
                                    if (iNumTemp == 0)
                                    {
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (lCardTemp.Count == lOutCard.Count)
                        {
                            var iCardTypeTemp = getCardType(lCardTemp);
                            if (iCardTypeTemp == lType2 [k] && getCardNum() > iCardNum)
                            {
                                if (idx <= -1)
                                {
                                    if (idx < -1)
                                    {
                                        return(lIdx);
                                    }
                                    _iTipIdx++;
                                    lIdx = getLIdx(lCard, lCardTemp);
                                }
                                idx--;
                            }
                        }
                    }
                }
            }
        }
        List <CardGroupType> lType3 = new List <CardGroupType> {
            CardGroupType.cgTHREE_TAKE_ONE,
            CardGroupType.cgTHREE_TAKE_TWO,
        };

        for (int k = 0; k < lType3.Count; k++)
        {
            if (cardType == lType3 [k])
            {
                if (lKeys.Count > 1)
                {
                    if (k == 1 && (lSPKeys [1].Count + lSPKeys [2].Count - 1 + lSPKeys [3].Count) < 1)
                    {
                        continue;
                    }
                    for (int iTypeTemp = 0; iTypeTemp < 2; iTypeTemp++)
                    {
                        lKeyTemp = lSPKeys [2 + iTypeTemp];
                        if (lKeyTemp.Count > 0)
                        {
                            for (int i = lKeyTemp.Count - 1; i >= 0; i--)
                            {
                                var iCardNumTemp = lKeyTemp [i];
                                if (iCardNumTemp > iCardNum)
                                {
                                    if (idx <= -1)
                                    {
                                        if (idx < -1)
                                        {
                                            return(lIdx);
                                        }
                                        for (int j = 0; j < 3; j++)
                                        {
                                            lKeysValid.Add(iCardNumTemp);
                                        }
                                        for (int iType = k; iType < 4; iType++)
                                        {
                                            lKeyTemp = lSPKeys [iType];
                                            if (lKeyTemp.Count > 0)
                                            {
                                                for (int j = lKeyTemp.Count - 1; j >= 0; j--)
                                                {
                                                    if (iType == 2 && lKeyTemp [j] == iCardNumTemp)
                                                    {
                                                        continue;
                                                    }
                                                    lKeysValid.Add(lKeyTemp [j]);
                                                    if (k == 1)
                                                    {
                                                        lKeysValid.Add(lKeyTemp [j]);
                                                    }
                                                    break;
                                                }
                                            }
                                            if (lKeysValid.Count > 3)
                                            {
                                                break;
                                            }
                                        }
                                        lIdx = getLIdx(lCard, lKeysValid);
                                        _iTipIdx++;
                                    }
                                    idx--;
                                }
                            }
                        }
                    }
                }
            }
        }
        List <CardGroupType> lType4 = new List <CardGroupType> {
            CardGroupType.cgTHREE_TAKE_ONE_LINE,
            CardGroupType.cgTHREE_TAKE_TWO_LINE,
        };

        for (int k = 0; k < lType4.Count; k++)
        {
            if (cardType == lType4 [k])
            {
                iOutLen = 2 * iOutLen / (4 + k);
                if (lKeys.Count >= iOutLen)
                {
                    for (int i = lKeys.Count - 1; i >= iOutLen / 2 - 1; i--)
                    {
                        List <int> lCardTemp = new List <int>();
                        for (int j = i; j > i - iOutLen / 2; j--)
                        {
                            var iCardNumTemp = lKeys [j];
                            var iNumTemp     = 3;
                            if (dic [iCardNumTemp] >= iNumTemp)
                            {
                                while (true)
                                {
                                    lCardTemp.Add(iCardNumTemp);
                                    iNumTemp--;
                                    if (iNumTemp == 0)
                                    {
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (lCardTemp.Count == 3 * iOutLen / 2)
                        {
                            var iCardTypeTemp = getCardType(lCardTemp);
                            if (iCardTypeTemp == CardGroupType.cgTHREE_LINE && getCardNum() > iCardNum)
                            {
                                List <int> lCardTemp2 = new List <int> ();
                                var        bValid     = false;
                                for (int j = lKeys.Count - 1; j >= iOutLen / 2 - 1; j--)
                                {
                                    for (int key = j; key > j - iOutLen / 2; key--)
                                    {
                                        var iCardNumTemp = lKeys [key];
                                        if (dic [iCardNumTemp] >= 1 + k && lCardTemp.Contains(iCardNumTemp) == false)
                                        {
                                            lCardTemp2.Add(iCardNumTemp);
                                        }
                                        else
                                        {
                                            break;
                                        }
                                    }
                                    if (lCardTemp2.Count == lOutCard.Count - 3 * iOutLen / 2)
                                    {
                                        if (getBSunzi(lCardTemp2) == true)
                                        {
                                            for (int key = 0; key < lCardTemp2.Count; key++)
                                            {
                                                lCardTemp.Add(lCardTemp2 [key]);
                                                if (k == 1)
                                                {
                                                    lCardTemp.Add(lCardTemp2 [key]);
                                                }
                                            }
                                            bValid = true;
                                            break;
                                        }
                                        else
                                        {
                                            lCardTemp2.Clear();
                                        }
                                    }
                                }
                                if (bValid == true)
                                {
                                    if (idx <= -1)
                                    {
                                        if (idx < -1)
                                        {
                                            return(lIdx);
                                        }
                                        _iTipIdx++;
                                        lIdx = getLIdx(lCard, lCardTemp);
                                    }
                                    idx--;
                                }
                            }
                        }
                    }
                }
            }
        }
        List <CardGroupType> lType5 = new List <CardGroupType> {
            CardGroupType.cgFOUR_TAKE_ONE,
            CardGroupType.cgFOUR_TAKE_TWO,
        };

        for (int k = 0; k < lType5.Count; k++)
        {
            if (cardType == lType5 [k])
            {
                lKeyTemp = lSPKeys [3];
                if (lKeys.Count >= 3)
                {
                    if (k == 1 && (lSPKeys[1].Count + lSPKeys[2].Count + lSPKeys[3].Count - 1) < 2)
                    {
                        continue;
                    }
                    if (lKeyTemp.Count > 0)
                    {
                        for (int i = lKeyTemp.Count - 1; i >= 0; i--)
                        {
                            if (lKeyTemp [i] > iCardNum)
                            {
                                if (idx <= -1)
                                {
                                    if (idx < -1)
                                    {
                                        return(lIdx);
                                    }
                                    _iTipIdx++;
                                    for (int iTemp = 0; iTemp < 4; iTemp++)
                                    {
                                        lKeysValid.Add(lKeyTemp [i]);
                                    }
                                    for (int iType = k; iType < 4; iType++)
                                    {
                                        var lKeyTemp2 = lSPKeys [iType];
                                        if (lKeyTemp2.Count > 0)
                                        {
                                            for (int j = lKeyTemp2.Count - 1; j > -1; j--)
                                            {
                                                if (lKeyTemp2 [j] != lKeyTemp [i])
                                                {
                                                    lKeysValid.Add(lKeyTemp2 [j]);
                                                    if (k == 1)
                                                    {
                                                        lKeysValid.Add(lKeyTemp2 [j]);
                                                    }
                                                    if (lKeysValid.Count == 6 + 2 * k)
                                                    {
                                                        break;
                                                    }
                                                }
                                            }
                                        }
                                        if (lKeysValid.Count == 6 + 2 * k)
                                        {
                                            break;
                                        }
                                    }
                                    lIdx = getLIdx(lCard, lKeysValid);
                                }
                                idx--;
                            }
                        }
                    }
                }
            }
        }
        if (lKeyTemp.Count > 0)
        {
            for (int i = lKeyTemp.Count - 1; i >= 0; i--)
            {
                if (idx <= -1)
                {
                    if (idx < -1)
                    {
                        return(lIdx);
                    }
                    _iCardType = CardGroupType.cgBOMB_CARD;
                    _iTipIdx++;
                    for (int iTemp = 0; iTemp < 4; iTemp++)
                    {
                        lKeysValid.Add(lKeyTemp [i]);
                    }
                    lIdx = getLIdx(lCard, lKeysValid);
                }
                idx--;
            }
        }
        if (lKeys.Count > 1 && lKeys [1] == 16)
        {
            if (idx < -1)
            {
                return(lIdx);
            }
            _iCardType = CardGroupType.cgKING_CARD;
            lKeysValid.Add(-1);
            lIdx = getLIdx(lCard, lKeysValid);
        }
        _iTipIdx = -1;
        return(lIdx);
    }
 private string BuildImagePath(CardGroupType heroType)
 {
     return string.Format("{0}{1}.png", BaseImagePath, Enum.GetName(typeof(CardGroupType), heroType));
 }
Example #8
0
    /// <summary>
    /// 从指定卡组中移除卡牌
    /// </summary>
    /// <param name="cardGroupType"></param>
    /// <param name="card"></param>
    /// <returns></returns>
    public bool RemoveCardFromCardGroup(CardGroupType cardGroupType, CardBase card)
    {
        if (cardGroup == null)
        {
            Debug.LogError("在从卡组中删除卡牌时没有找到卡组:" + currentCardGroupName);
            return(false);
        }
        List <UserCardData> typeCardGroup = null;

        switch (cardGroupType)
        {
        case CardGroupType.Unknown:
            Debug.LogError("未知卡组类型!");
            return(false);

        case CardGroupType.Main:
            typeCardGroup = cardGroup.mainCardList;
            break;

        case CardGroupType.Extra:
            typeCardGroup = cardGroup.extraCardList;
            break;

        case CardGroupType.Deputy:
            typeCardGroup = cardGroup.deputyCardList;
            break;

        default:
            break;
        }
        bool found = false;

        foreach (var item in typeCardGroup)
        {
            if (item.cardNo == card.GetCardNo())
            {
                if (item.number > 1)
                {
                    item.number--;
                }
                else
                {
                    typeCardGroup.Remove(item);
                }
                found = true;
                break;
            }
        }
        if (found)
        {
            switch (cardGroupType)
            {
            case CardGroupType.Unknown:
                break;

            case CardGroupType.Main:
                ResetMainCardGroup();
                break;

            case CardGroupType.Extra:
                ResetExtraCardGroup();
                break;

            case CardGroupType.Deputy:
                ResetDeputyCardGroup();
                break;

            default:
                break;
            }
        }
        return(false);
    }
Example #9
0
    /// <summary>
    /// 向指定卡组添加卡牌
    /// </summary>
    /// <param name="cardGroupType"></param>
    /// <param name="card"></param>
    public bool AddCardToCardGroup(CardGroupType cardGroupType, CardBase card)
    {
        if (cardGroup == null)
        {
            Debug.LogError("在向卡组中添加卡牌时没有找到卡组:" + currentCardGroupName);
            return(false);
        }
        int cardNumberLimit = DuelRuleManager.GetSameCardNumberUpperLimit();
        List <UserCardData> typrCardGroup = null;

        switch (cardGroupType)
        {
        case CardGroupType.Unknown:
            Debug.LogError("未知卡组类型!");
            return(false);

        case CardGroupType.Main:
            typrCardGroup = cardGroup.mainCardList;
            break;

        case CardGroupType.Extra:
            typrCardGroup = cardGroup.extraCardList;
            break;

        case CardGroupType.Deputy:
            typrCardGroup = cardGroup.deputyCardList;
            break;

        default:
            break;
        }
        UserCardData userCardData = null;

        foreach (var item in typrCardGroup)
        {
            if (item.cardNo == card.GetCardNo())
            {
                userCardData = item;
            }
        }
        if (userCardData == null)
        {
            userCardData        = new UserCardData();
            userCardData.cardNo = card.GetCardNo();
            userCardData.number = 1;
            typrCardGroup.Add(userCardData);
        }
        else
        {
            if (userCardData.number >= cardNumberLimit)
            {
                GameManager.ShowMessage("卡组中" + card.GetName() + "数量超过最大值!");
                return(false);
            }
            else
            {
                userCardData.number++;
            }
        }
        switch (cardGroupType)
        {
        case CardGroupType.Unknown:
            break;

        case CardGroupType.Main:
            ResetMainCardGroup();
            break;

        case CardGroupType.Extra:
            ResetExtraCardGroup();
            break;

        case CardGroupType.Deputy:
            ResetDeputyCardGroup();
            break;

        default:
            break;
        }
        return(true);
    }