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]); } } }
public CardGroup(CardGroupType _type) { HandPositionMap = new Dictionary <int, int>(); Type = _type; }
public CardGroup(CardGroupType type, Card card) : this(type, new[] { card }) { }
public CardGroup(CardGroupType type, IEnumerable <Card> cards) { this.Type = type; this.Cards = cards; }
public CardGroup(CardGroupType type) : this(type, (Card[])null) { }
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)); }
/// <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); }
/// <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); }