public CardSet(CardSetType setType, int keyNumber, int repeatCount, Card[] cards) { this.Type = setType; this.KeyNumber = keyNumber; this.RepeatCount = repeatCount; this.Cards = cards; }
private void CardDeckShuffle(CardSetType setType) { if (mCardDeck == null) { int cardMaxCount = Mathf.Max(cardsOrgan.Length, cardsSystem.Length); mCardDeck = new M8.CacheList <CardData>(cardMaxCount); } else { mCardDeck.Clear(); } switch (setType) { case CardSetType.Organs: for (int i = 0; i < cardsOrgan.Length; i++) { mCardDeck.Add(cardsOrgan[i]); } break; case CardSetType.Systems: for (int i = 0; i < cardsSystem.Length; i++) { mCardDeck.Add(cardsSystem[i]); } break; } mCardDeck.Shuffle(); }
private int GetCardSetTypeWeight(CardSetType setType) { switch (setType) { case CardSetType.Invalid: case CardSetType.None: default: //无效牌型,最小 return(-1); case CardSetType.JokerBomb: //王炸,最大 return(2); case CardSetType.Bomb: //普通炸弹 return(1); case CardSetType.Single: case CardSetType.Pair: case CardSetType.Triple: case CardSetType.TripleWithOne: case CardSetType.TripleWithPair: case CardSetType.Straight: case CardSetType.DoubleStraight: case CardSetType.TripleStraight: case CardSetType.TripleStraightWithOne: case CardSetType.TripleStraightWithPair: case CardSetType.QuadraWithTwo: case CardSetType.QuadraWithTwoPairs: //普通牌型 return(0); } }
public CardSet(CardSetType cardSetType) : this() { if (cardSetType == CardSetType.Empty) return; //подумать, как сформировать foreach (var colour in Enum.GetValues(typeof(CardColour))) { foreach (var kind in Enum.GetValues(typeof(KindsOfCards))) { if((CardColour)colour!=CardColour.black) Cards.Add(GetCard((CardColour)colour, (KindsOfCards)kind)); } } }
/// <summary> /// 这些牌能组成哪一种牌型? /// </summary> /// <param name="cards"></param> /// <returns>能组成的牌型,无效返回invalid牌型</returns> public static CardSet GetCardSet(Card[] cards) { CardSetType setType = GetCardSetType(cards); List <(int cnt, int weight)> handData = GetHandDataCW(cards); CardSet result = new CardSet(); result.Type = setType; result.Cards = cards; result.KeyNumber = handData[handData.Count - 1].weight; //所有牌型的key都是最多的一种牌中最大的一种 //分情况可以不用写for暴力,但是代码就短多了,其实可读性差不多 switch (setType) { case CardSetType.Invalid: case CardSetType.None: default: result.KeyNumber = (int)CardWeight.wMin; //这些是无效的牌型 result.RepeatCount = 0; break; case CardSetType.JokerBomb: result.KeyNumber = (int)CardWeight.wJokerRed; //王炸的key是大王 result.RepeatCount = 1; break; case CardSetType.Bomb: case CardSetType.Single: case CardSetType.Pair: case CardSetType.Triple: case CardSetType.TripleWithOne: case CardSetType.TripleWithPair: case CardSetType.QuadraWithTwo: case CardSetType.QuadraWithTwoPairs: result.RepeatCount = 1; //这些牌型无重复部分,因为它们的长度是固定的 break; case CardSetType.Straight: case CardSetType.DoubleStraight: case CardSetType.TripleStraight: result.RepeatCount = handData.Count; //这些牌型的重复数等于种类数(最小单元为1种牌) break; case CardSetType.TripleStraightWithOne: case CardSetType.TripleStraightWithPair: result.RepeatCount = handData.Count / 2; //这些牌型的重复数等于种类数的一半(最小单元为2种牌) break; } return(result); }
public CardSet(CardSetType cardSetType, string directory = @"Cards\") : this() { if (cardSetType == CardSetType.Empty) { return; } //Набрать карты try { StreamReader streamReader = new StreamReader(directory + "descriptions.txt"); Cards = GetCardsFromFile(streamReader); streamReader.Close(); } catch { throw new Exception("directory with cards is incorrect"); } }
/// <summary> /// 获取一种牌型的最小合法重复数 /// </summary> /// to be improve 因为历史原因,这个方法没有在CardSet里面用到, /// 但是实际上应该用它来代替硬编码,来提高可修改性(降低耦合,是这个意思不) public static int GetMinRepeat(CardSetType setType) { int repeat = 1; switch (setType) { case CardSetType.Invalid: case CardSetType.None: repeat = 0; break; case CardSetType.JokerBomb: case CardSetType.Bomb: case CardSetType.Single: case CardSetType.Pair: case CardSetType.Triple: case CardSetType.TripleWithOne: case CardSetType.TripleWithPair: case CardSetType.QuadraWithTwo: case CardSetType.QuadraWithTwoPairs: default: repeat = 1; break; case CardSetType.Straight: repeat = 5; break; case CardSetType.DoubleStraight: repeat = 3; break; case CardSetType.TripleStraight: case CardSetType.TripleStraightWithOne: case CardSetType.TripleStraightWithPair: repeat = 2; break; } return(repeat); }
/// <summary> /// 尝试获取一个精确的牌型(精确到第一关键字) /// </summary> /// <returns>是否获取成功</returns> private bool TryGetExactCardSet(out CardSet cardSet, CardSetType setType, int keyNumber, int repeat) { cardSet = null; Card[] cardsResult = null; switch (setType) { case CardSetType.Invalid: cardSet = CardSet.Invalid; return(true); case CardSetType.None: cardSet = CardSet.None; return(true); case CardSetType.JokerBomb: return(TryGetCardSetJokerBomb(out cardSet)); case CardSetType.Single: case CardSetType.Pair: case CardSetType.Triple: case CardSetType.Bomb: if (!TryGetExactCardSetPart1(out cardsResult)) { return(false); } break; case CardSetType.Straight: case CardSetType.DoubleStraight: case CardSetType.TripleStraight: if (!TryGetExactCardSetPart2(out cardsResult)) { return(false); } break; case CardSetType.TripleWithOne: case CardSetType.TripleWithPair: case CardSetType.TripleStraightWithOne: case CardSetType.TripleStraightWithPair: case CardSetType.QuadraWithTwo: case CardSetType.QuadraWithTwoPairs: if (!TryGetExactCardSetPart3(out cardsResult)) { return(false); } break; default: break; } cardSet = new CardSet(setType, keyNumber, repeat, cardsResult); return(true); bool TryGetExactCardSetPart1(out Card[] cardsResult1)//加1避免名称冲突(vs可以通过编译,unity不行) { int repeatCount = 1; switch (setType) { case CardSetType.Single: repeatCount = 1; break; case CardSetType.Pair: repeatCount = 2; break; case CardSetType.Triple: repeatCount = 3; break; case CardSetType.Bomb: repeatCount = 4; break; } return(TryGetCards(out cardsResult1, keyNumber, repeatCount)); } bool TryGetExactCardSetPart2(out Card[] cardsResult1) { int straightRepeat = 1;//这是几顺,是单顺,双顺还是三顺 switch (setType) { case CardSetType.Straight: straightRepeat = 1; break; case CardSetType.DoubleStraight: straightRepeat = 2; break; case CardSetType.TripleStraight: straightRepeat = 3; break; } return(TryGetStraight(out cardsResult1, keyNumber, repeat, straightRepeat)); } bool TryGetExactCardSetPart3(out Card[] cardsResult1) { int length = 1; int straightRepeat = 1; int[] subCardCnts = null; switch (setType) { case CardSetType.TripleWithOne: length = 1; straightRepeat = 3; subCardCnts = new int[] { 1 }; break; case CardSetType.TripleWithPair: length = 1; straightRepeat = 3; subCardCnts = new int[] { 2 }; break; case CardSetType.TripleStraightWithOne: length = repeat; straightRepeat = 3; subCardCnts = new int[] { 1 }; break; case CardSetType.TripleStraightWithPair: length = repeat; straightRepeat = 3; subCardCnts = new int[] { 2 }; break; case CardSetType.QuadraWithTwo: length = 1; straightRepeat = 4; subCardCnts = new int[] { 1, 1 }; break; case CardSetType.QuadraWithTwoPairs: length = 1; straightRepeat = 4; subCardCnts = new int[] { 2, 2 }; break; } return(TryGetStraightWithSubCards(out cardsResult1, keyNumber, length, subCardCnts, straightRepeat)); } }
public GraphicCardSet(Panel panel, CardSetType cardSetType, string directory = @"Cards\") : base(cardSetType, directory) { Panel = panel; }
public static async ValueTask <(string Name, int Value)> GetInsertCardTypeValue(CardSetType type, DbConnector connector) { var cardSetId = await connector.Command($"select CardSetTypeId from cardsettypes where Name = '{s_cardSetTypeNameMap[type]}';").QuerySingleAsync <int>(); return(DatabaseDefinition.ColumnName[CardRequirement.CardSetTypeFieldNumber], cardSetId); }
private static IEnumerable <CardRequirement> GetCardGroupRequirement(string cardNameMatch, CardSetType cardSetType) { yield return(new CardRequirement { RequiredSetName = cardNameMatch, CardSetType = cardSetType, CardRequirementType = CardRequirementType.NamedSet }); }
private static CardRequirement GetCardSetRequirement(GameServiceClient client, string cardName, int gamePackageId, CardSetType cardSetType) { if (cardSetType == CardSetType.CardSetAlly) { var allies = AllyUtility.GetAlliesAsync(client, name: cardName, nameMatchStyle: NameMatchStyle.Exact).Result; if (allies.Count() != 0) { return(new CardRequirement { RequiredSetId = allies.FirstOrDefault(x => x.GamePackageId == gamePackageId, allies.First()).Id, CardSetType = CardSetType.CardSetAlly, CardRequirementType = CardRequirementType.SpecificRequiredSet }); } throw new Exception($"Couldn't find Ally named {cardName}"); } if (cardSetType == CardSetType.CardSetAdversary) { var adversaries = AdversaryUtility.GetAdversariesAsync(client, name: cardName, nameMatchStyle: NameMatchStyle.Exact).Result; if (adversaries.Count() != 0) { return(new CardRequirement { RequiredSetId = adversaries.FirstOrDefault(x => x.GamePackageId == gamePackageId, adversaries.First()).Id, CardSetType = CardSetType.CardSetAdversary, CardRequirementType = CardRequirementType.SpecificRequiredSet }); } throw new Exception($"Couldn't find Adversary named {cardName}"); } if (cardSetType == CardSetType.CardSetNeutral) { var neutrals = NeutralUtility.GetNeutralsAsync(client, name: cardName, nameMatchStyle: NameMatchStyle.Exact).Result; if (neutrals.Count() != 0) { return(new CardRequirement { RequiredSetId = neutrals.FirstOrDefault(x => x.GamePackageId == gamePackageId, neutrals.First()).Id, CardSetType = CardSetType.CardSetNeutral, CardRequirementType = CardRequirementType.SpecificRequiredSet }); } throw new Exception($"Couldn't find Neutral named {cardName}"); } if (cardSetType == CardSetType.CardSetHenchman) { var henchmen = HenchmanUtility.GetHenchmenAsync(client, name: cardName, nameMatchStyle: NameMatchStyle.Exact).Result; if (henchmen.Count() != 0) { return(new CardRequirement { RequiredSetId = henchmen.FirstOrDefault(x => x.GamePackageId == gamePackageId, henchmen.First()).Id, CardSetType = CardSetType.CardSetHenchman, CardRequirementType = CardRequirementType.SpecificRequiredSet }); } throw new Exception($"Couldn't find Henchman named {cardName}"); } throw new Exception($"Coudn't figure out how to handle {cardSetType}"); }
private static IEnumerable <CardRequirement> GetAdditionalCardSetsRequirement(GameServiceClient client, string info, CardSetType setType) { var splitInfo = info.Split('|').Select(x => int.Parse(x)).ToList(); if (splitInfo.Count != 1 && splitInfo.Count != 5) { throw new Exception($"Bad data {info}"); } var hasMultipleValues = splitInfo.Count > 1; for (int i = hasMultipleValues ? 1 : 0; i < (hasMultipleValues ? 6 : 1); i++) { yield return(new CardRequirement { PlayerCount = i, CardSetType = setType, AdditionalSetCount = splitInfo[hasMultipleValues ? i - 1 : i], CardRequirementType = CardRequirementType.AdditionalSetCount }); } }
public GraphicCardSet(Panel panel, CardSetType cardSetType = CardSetType.Empty) : base(cardSetType) { Panel = panel; }