示例#1
0
    public static bool SummonFirst2DeathMech(GameEvent gameEvent)
    {
        List <Card> summons = new List <Card>();

        foreach (var id in gameEvent.player.deathMinionCollection)
        {
            if (summons.Count >= (gameEvent.hostCard.isGold ? 4 : 2))
            {
                break;
            }
            Card card = CardBuilder.GetCard(id);
            if (card.IsMinionType(MinionType.Mechs))
            {
                summons.Add(card.NewCard());
            }
        }
        var byCard = gameEvent.hostCard;

        foreach (var card in summons)
        {
            gameEvent.player.board.SummonMinionByMinion(new GameEvent()
            {
                hostCard   = gameEvent.hostCard,
                targetCard = card,
                player     = gameEvent.player
            }, byCard);
            byCard = card;
        }
        return(true);
    }
示例#2
0
 public void TransformMinionsToBetter()
 {
     if (player.leftCoins >= Const.coinCostToBuyMinion)
     {
         List <KeyValuePair <Card, Card> > cards = new List <KeyValuePair <Card, Card> >();
         foreach (Card item in player.battlePile)
         {
             Card targetCard = cardPile.RandomlyGetBestCard(card => (
                                                                card.star <= player.star &&
                                                                CheckDuplicate(card) &&
                                                                CheckTransform(item.GetPositionTag(), card.GetPositionTag())) ? GetFit(card): -1);
             if (targetCard != null && GetFit(targetCard) > GetFit(item))
             {
                 cards.Add(new KeyValuePair <Card, Card>(item, targetCard));
             }
         }
         if (cards.Count != 0)
         {
             KeyValuePair <Card, Card> cardPair = cards.GetOneRandomly();
             int tmpID = cardPair.Key.id;
             cardPair.Key.TransformToNewCardWithEffectsForBoss(cardPair.Value.NewCard());
             cardPile.ReduceCard(CardBuilder.GetCard(cardPair.Value.id), 1);
             player.leftCoins -= Const.coinCostToBuyMinion;
             if (cardPair.Key.GetPositionTag() >= 3)
             {
                 cardPair.Key.RemoveKeyWord(Keyword.Taunt);
             }
             Debug.Log(player.hero.name + "购买了权值为" + GetFit(cardPair.Key) + "的" + cardPair.Key.name + "替换了权值为" + GetFit(CardBuilder.GetCard(tmpID)) + "的" + CardBuilder.GetCard(tmpID).name);
         }
     }
 }
示例#3
0
 public static bool SummonAllDeadTauntMinion(GameEvent gameEvent)
 {
     List<Card> summons = new List<Card>();
     foreach (var id in gameEvent.player.deathMinionCollection)
     {
         if (summons.Count >= 7) break;
         Card card = CardBuilder.GetCard(id);
         if (card.HasKeyword(Keyword.Taunt))
         {
             summons.Add(card.NewCard());
         }
     }
     var byCard = gameEvent.hostCard;
     foreach (var card in summons)
     {
         gameEvent.player.board.SummonMinionByMinion(new GameEvent()
         {
             hostCard = gameEvent.hostCard,
             targetCard = card,
             player = gameEvent.player
         }, byCard);
         byCard = card;
     }
     return true;
 }
示例#4
0
    public static bool Gain1Or2HealthForEachHealthYourHEroLost(GameEvent gameEvent)
    {
        int maxHealth = CardBuilder.GetCard(gameEvent.player.hero.id).health + gameEvent.player.hero.GetExtraBody().y;

        gameEvent.hostCard.effectsStay.Add(new BodyPlusEffect(0,
                                                              (gameEvent.hostCard.isGold ? 2 : 1) * (maxHealth - gameEvent.player.hero.GetMinionBody().y)));
        return(true);
    }
示例#5
0
 public static void UnlockCard(int card)
 {
     if (CardBuilder.GetCard(card).Lock)
     {
         CardBuilder.GetCard(card).Lock = false;
         SaveLockCard();
     }
 }
示例#6
0
 public void InitCardPile(CardPile cardPile)
 {
     RemoveAll();
     CardBuilder.GetCard(0);
     foreach (var item in cardPile.cardPile)
     {
         this.cardPile.Add(item.Key, item.Value);
     }
     InitSpecialCards();
 }
示例#7
0
 public void ReduceCard(Card card, int num)
 {
     if (cardPile.ContainsKey(CardBuilder.GetCard(card.id)))
     {
         cardPile[CardBuilder.GetCard(card.id)] -= num;
         if (cardPile[CardBuilder.GetCard(card.id)] <= 0)
         {
             cardPile.Remove(CardBuilder.GetCard(card.id));
         }
     }
 }
示例#8
0
    public int GetFit(Card card)
    {
        Card tmpCard = CardBuilder.GetCard(card.id);

        if (fitMap.ContainsKey(tmpCard))
        {
            return(fitMap[tmpCard]);
        }
        else
        {
            return(-10);
        }
    }
示例#9
0
 //工具方法
 public void AddCard(Card card, int num = 1)
 {
     if (cardPile.ContainsKey(CardBuilder.GetCard(card.id)))
     {
         cardPile[CardBuilder.GetCard(card.id)] += num;
     }
     else
     {
         cardPile.Add(CardBuilder.GetCard(card.id), num);
     }
     //foreach (var item in cardPile)
     //{
     //    Debug.Log(item.Key.name + " " + item.Value);
     //}
 }
示例#10
0
 /// <summary>
 /// 初始化一个包含所有牌的牌池
 /// </summary>
 public void InitCardPileFully()
 {
     RemoveAll();
     CardBuilder.GetCard(0);
     for (int i = 0; i <= 5; i++)
     {
         baseCardPileOfDifferentLevel[i] = new Map <Card, int>();
         foreach (var item in CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.star == i + 1))
         {
             baseCardPileOfDifferentLevel[i].Add(item, Const.numOfMinionsInCardPile[i]);
         }
         AddMap(baseCardPileOfDifferentLevel[i]);
     }
     InitSpecialCards();
 }
示例#11
0
 private void CalculateTags(List <Card> cardList)
 {
     tags        = new Map <string, int>();
     keywords    = new Map <Keyword, int>();
     minionTypes = new Map <MinionType, int>();
     proxys      = new Map <ProxyEnum, int>();
     foreach (Card card in cardList)
     {
         if (card.IsMinionType(MinionType.Mechs) || card.tag.Contains("机械流"))
         {
             AddToMap(tags, "机械流", 1);
             AddToMap(minionTypes, MinionType.Mechs, 1);
         }
         if (card.IsMinionType(MinionType.Murlocs) || card.tag.Contains("鱼人流"))
         {
             AddToMap(tags, "鱼人流", 1);
             AddToMap(minionTypes, MinionType.Murlocs, 1);
         }
         if (card.IsMinionType(MinionType.Demons) || card.tag.Contains("恶魔流"))
         {
             AddToMap(tags, "恶魔流", 1);
             AddToMap(minionTypes, MinionType.Demons, 1);
         }
         if (card.IsMinionType(MinionType.Beasts) || card.tag.Contains("野兽流"))
         {
             AddToMap(tags, "野兽流", 1);
             AddToMap(minionTypes, MinionType.Beasts, 1);
         }
         if (card.HasKeyword(Keyword.DivineShield) || card.tag.Contains("圣盾流"))
         {
             AddToMap(tags, "圣盾流", 1);
             AddToMap(keywords, Keyword.DivineShield, 1);
         }
         if (CardBuilder.GetCard(card.id).GetProxys(ProxyEnum.Deathrattle) != null || card.tag.Contains("亡语流"))
         {
             AddToMap(tags, "亡语流", 1);
             AddToMap(proxys, ProxyEnum.Deathrattle, 1);
         }
         if (card.IsMinionType(MinionType.Dragons))
         {
             AddToMap(minionTypes, MinionType.Dragons, 1);
         }
         if (card.tag.Contains("手牌"))
         {
             AddToMap(tags, "手牌", 1);
         }
     }
 }
示例#12
0
    public static bool RandomlyAddMinionOnSaleToYouHand(GameEvent gameEvent)
    {
        BattlePile <Card> cards = gameEvent.player.board.players[1].battlePile;

        if (cards.Count != 0)
        {
            Card card = cards.GetOneRandomly();
            if (card != null && gameEvent.player.handPile.Count < Const.numOfHandPile)
            {
                gameEvent.player.board.AddToHandPile(card);
                gameEvent.player.board.players[1].RemoveMinionFromBattlePile(card);
            }
        }
        gameEvent.player.hero.cost = CardBuilder.GetCard(gameEvent.player.hero.id).cost;
        return(true);
    }
示例#13
0
 public void CalculateFitMap()
 {
     fitMap = new Map <Card, int>();
     foreach (var item in cardPile.cardPile)
     {
         if (!IsRecruitFieldEffect(item.Key))
         {
             fitMap.Add(item.Key, CalculateFit(item.Key));
         }
     }
     foreach (var item in player.battlePile)
     {
         if (!fitMap.ContainsKey(CardBuilder.GetCard(item.id)))
         {
             fitMap.Add(CardBuilder.GetCard(item.id), CalculateFit(CardBuilder.GetCard(item.id)));
         }
     }
 }
示例#14
0
    public static bool FillHealthWhenReborn(GameEvent gameEvent)
    {
        if (gameEvent.targetCard == gameEvent.hostCard)
        {
            return(false);
        }
        if (gameEvent.player != gameEvent.player.board.GetPlayer(gameEvent.targetCard))
        {
            return(false);
        }
        int healthMax       = CardBuilder.GetCard(gameEvent.targetCard.id).health;
        int healthToRestore = healthMax - gameEvent.targetCard.health;

        if (healthToRestore > 0)
        {
            gameEvent.targetCard.health += healthToRestore;
            return(true);
        }
        return(false);
    }
示例#15
0
 public void CalculateTags() //当前思路识别,导向对应抓牌思路
 {
     tags        = new Map <string, int>();
     keywords    = new Map <Keyword, int>();
     minionTypes = new Map <MinionType, int>();
     proxys      = new Map <ProxyEnum, int>();
     foreach (Card card in player.battlePile)
     {
         if (card.IsMinionType(MinionType.Mechs) || card.tag.Contains("机械流"))
         {
             AddToMap(tags, "机械流", 2);
             AddToMap(minionTypes, MinionType.Mechs, 1);
         }
         if (card.IsMinionType(MinionType.Murlocs) || card.tag.Contains("鱼人流"))
         {
             AddToMap(tags, "鱼人流", 2);
             AddToMap(minionTypes, MinionType.Murlocs, 1);
         }
         if (card.IsMinionType(MinionType.Demons) || card.tag.Contains("恶魔流"))
         {
             AddToMap(tags, "恶魔流", 2);
             AddToMap(minionTypes, MinionType.Demons, 1);
         }
         if (card.IsMinionType(MinionType.Beasts) || card.tag.Contains("野兽流"))
         {
             AddToMap(tags, "野兽流", 2);
             AddToMap(minionTypes, MinionType.Beasts, 1);
         }
         if (card.HasKeyword(Keyword.DivineShield) || card.tag.Contains("圣盾流"))
         {
             AddToMap(tags, "圣盾流", 3);
             AddToMap(keywords, Keyword.DivineShield, 1);
         }
         if (CardBuilder.GetCard(card.id).GetProxys(ProxyEnum.Deathrattle) != null || card.tag.Contains("亡语流"))
         {
             AddToMap(tags, "亡语流", 3);
             AddToMap(proxys, ProxyEnum.Deathrattle, 1);
         }
     }
     InitTag();
 }
示例#16
0
 public void RandomlyTransformMinionsToGold()
 {
     if (player.leftCoins >= Const.coinCostToBuyMinion * 2 - 1 && random.Next(10) > 5)
     {
         List <Card> cards = new List <Card>();
         foreach (Card item in player.battlePile)
         {
             if (!item.isGold)
             {
                 cards.Add(item);
             }
         }
         if (cards.Count != 0)
         {
             Card cardToTransform = cards.GetOneRandomly();
             Debug.Log(player.hero.name + "将" + cardToTransform.name + "三连升级了!");
             cardToTransform.TransformToNewCardWithEffectsForBoss(CardBuilder.GetCard(cardToTransform.goldVersion).NewCard());
             player.leftCoins -= Const.coinCostToBuyMinion * 2 - 1;
         }
     }
 }
示例#17
0
    public void SetByCard(Card card)
    {
        if (card.cardType != CardType.Hero)
        {
            return;
        }
        setedCard = card;

        Vector2Int body = card.GetMinionBody();

        SetHeroBody(body.x, body.y);

        SetHeroFace(GameAnimationSetting.instance.Images.GetSpriteByString(card.image));

        Vector2Int extraBody = card.GetExtraBody();

        if (card.health < CardBuilder.GetCard(card.id).health)
        {
            SetHealthColor(Color.red);
        }
        else if (extraBody.y > 0)
        {
            SetHealthColor(Color.green);
        }
        else
        {
            SetHealthColor(Color.white);
        }

        if (card.HasKeyword(Keyword.Immune))
        {
            免疫.gameObject.SetActive(true);
        }
        else
        {
            免疫.gameObject.SetActive(false);
        }
    }
示例#18
0
    public static bool SummonDeadBeast(GameEvent gameEvent)
    {
        List <Card> summons = new List <Card>();
        List <Card> tmp     = new List <Card>();

        foreach (var id in gameEvent.player.deathMinionCollection)
        {
            Card card = CardBuilder.GetCard(id);
            if (card.IsMinionType(MinionType.Beasts))
            {
                tmp.Add(card);
            }
        }
        tmp.Shuffle();
        if (tmp.Count > 0)
        {
            summons.Add(tmp.GetOneRandomly());
            if (gameEvent.hostCard.isGold)
            {
                summons.Add(tmp.GetOneRandomly());
            }
        }
        var byCard = gameEvent.hostCard;

        foreach (var card in summons)
        {
            gameEvent.player.board.SummonMinionByMinion(new GameEvent()
            {
                hostCard   = gameEvent.hostCard,
                targetCard = card.NewCard(),
                player     = gameEvent.player
            }, byCard);
            byCard = card;
        }
        return(true);
    }
示例#19
0
    public void SetByCard(Card card)
    {
        Init();
        LockThis(false);
        setedCard = card;
        foreach (var trans in keywords)
        {
            trans.gameObject.SetActive(false);
        }
        foreach (var keyword in card.GetAllKeywords())
        {
            string keywordName = BIFStaticTool.GetEnumDescriptionSaved(keyword);
            foreach (var trans in keywords)
            {
                if (keywordName == trans.name)
                {
                    trans.gameObject.SetActive(true);
                }
            }
        }

        var           map     = BIFStaticTool.GetEnumNameAndDescriptionSaved <ProxyEnum>();
        List <string> effects = new List <string>()
        {
            "闪电", "亡语", "光环"
        };

        foreach (var pair in map)
        {
            if (effects.Count == 0)
            {
                break;
            }
            string description = pair.Value.Value;
            if (effects.Contains(description) && card.GetProxys(pair.Key) != null)
            {
                effects.Remove(description);
                if (description == "闪电")
                {
                    闪电.gameObject.SetActive(true);
                }
                else if (description == "亡语")
                {
                    亡语.gameObject.SetActive(true);
                }
                else if (description == "光环")
                {
                    光环.gameObject.SetActive(true);
                }
            }
        }

        if (card.isGold)
        {
            嘲讽.sprite = 金色嘲讽;
        }
        else
        {
            嘲讽.sprite = 普通嘲讽;
        }
        金色边框.gameObject.SetActive(card.isGold);


        string name = BIFStaticTool.GetEnumDescriptionSaved(card.type);

        foreach (var spec in family)
        {
            if (name == spec.name)
            {
                spec.gameObject.SetActive(true);
            }
            else
            {
                spec.gameObject.SetActive(false);
            }
        }
        main.sprite = GameAnimationSetting.instance.Images.GetSpriteByString(card.image);

        #region set text and its color
        if (card.cardType != CardType.Spell)
        {
            Vector2Int body = card.GetMinionBody();
            body.x          = Math.Max(0, body.x);
            attackText.text = body.x.ToString();
            healthText.text = body.y.ToString();

            Vector2Int extraBody = card.GetExtraBody();
            if (card.health < CardBuilder.GetCard(card.id).health)
            {
                SetHealthColor(Color.red);
            }
            else if (extraBody.y > 0)
            {
                SetHealthColor(Color.green);
            }
            else
            {
                SetHealthColor(Color.white);
            }

            if (extraBody.x > 0)
            {
                SetAttackColor(Color.green);
            }
            else
            {
                SetAttackColor(Color.white);
            }
        }

        if (card.cardType == CardType.Spell || card.cost > 0)
        {
            CostText.text = card.cost.ToString();
            Cost.gameObject.SetActive(true);
        }
        else
        {
            Cost.gameObject.SetActive(false);
        }

        if (card.cardType == CardType.Spell)
        {
            attack.gameObject.SetActive(false);
            health.gameObject.SetActive(false);
        }
        else
        {
            attack.gameObject.SetActive(true);
            health.gameObject.SetActive(true);
        }
        #endregion


        if (潜行.gameObject.activeSelf)
        {
            //BIFStaticTool.SetAlphaRecursively(Content.gameObject, 0.5f);
            //BIFStaticTool.SetColorRecursively(Content.gameObject, new Color(1f, 1f, 1f, 0.5f));
            BIFStaticTool.SetColorRecursively(Content.gameObject, new Color(0.5f, 0.5f, 0.5f, 1f));
        }
        else
        {
            //BIFStaticTool.SetAlphaRecursively(Content.gameObject, 1f);
            BIFStaticTool.SetColorRecursively(Content.gameObject, new Color(1f, 1f, 1f, 1f));
        }
    }
示例#20
0
    public static void Init()
    {
        CardBuilder.GetCard(0);
        CardPile cardPile = new CardPile();

        cardPile.InitCardPileFully();

        /*
         *  string minionTypeCountString = cardPile.cardPile
         *      .GroupBy(pair => pair.Key.type)
         *      .Select(x => (card: x.First().Key, count: x.Sum(pair => pair.Value)))
         *      .Select(x => (x.card.type, count: x.count / Const.numOfMinionsInCardPile[x.card.star - 1]))
         *      .Select(pair => (type: BIF.BIFStaticTool.GetEnumDescriptionSaved(pair.type), pair.count))
         *      .Where(pair => !string.IsNullOrEmpty(pair.type))
         *      .Map(pair => pair.type + ":" + pair.count)
         *      .Join(" ");
         *  Debug.Log(minionTypeCountString);
         */
        schools = new List <School>
        {
            new School()
            {
                name  = "中立",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("中立"))
            },
            new School()
            {
                name  = "野兽",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("野兽"))
            },
            new School()
            {
                name  = "恶魔",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("恶魔"))
            },
            new School()
            {
                name  = "机械",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("机械"))
            },
            new School()
            {
                name  = "鱼人",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("鱼人"))
            },
            new School()
            {
                name  = "巨龙",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("龙"))
            },
            new School()
            {
                name  = "嘲讽",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("嘲讽"))
            },
            new School()
            {
                name  = "圣盾",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("圣盾"))
            },
            new School()
            {
                name  = "战吼",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("战吼"))
            },
            new School()
            {
                name  = "亡语",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("亡语"))
            },
            new School()
            {
                name  = "混沌",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("混合") || card.tag.Contains("奇异") || card.tag.Contains("青玉"))
            },
            //schools.Add(new School()
            //{
            //    name = "奇异",
            //    cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("奇异"))
            //});
            //schools.Add(new School()
            //{
            //    name = "召唤",
            //    cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("召唤"))
            //});
            new School()
            {
                name  = "手牌",
                cards = CardBuilder.AllCards.FilterValue(card => !card.isToken && !card.isGold).Filter(card => card.tag.Contains("手牌"))
            }
        };
        //foreach (var item in schools)
        //{
        //    Debug.Log(item.name + "  " + item.cards.Count);
        //}

        for (int i = 1; i <= 6; i++)
        {
            for (int j = 0; j < Const.typeOfMinionsInCardPile[i - 1] - 3; j++)
            {
                starList.Add(i);
            }
        }
        starList.Shuffle();
        for (int i = 1; i <= 3; i++)
        {
            List <int> tmpStarList = new List <int>();
            for (int j = 1; j <= 6; j++)
            {
                tmpStarList.Add(j);
            }
            tmpStarList.Shuffle();
            foreach (var item in tmpStarList)
            {
                starList.Add(item);
            }
        }
    }
示例#21
0
    private void OnGUI()
    {
        if (CardBuilder.AllCards != null && Application.isPlaying)
        {
            EditorGUILayout.HelpBox("在对战中点击卡牌生成卡牌\n在对战前点击宝藏获得宝藏", MessageType.Info);
            if (GUILayout.Button("增加十块钱"))
            {
                AddCoins();
            }

            if (GUILayout.Button("解锁所有英雄"))
            {
                UnlockAllHero(true);
            }
            if (GUILayout.Button("锁定所有英雄"))
            {
                UnlockAllHero(false);
            }

            if (GUILayout.Button("解锁所有卡牌"))
            {
                LockAllCard(true);
            }
            if (GUILayout.Button("锁定所有卡牌"))
            {
                LockAllCard(false);
            }
            if (GUILayout.Button("直接获胜"))
            {
                AutoWin();
            }
            if (GUILayout.Button("直接失败"))
            {
                AutoLose();
            }
            EditorGUILayout.Space();

            selectedType = (SelectedType)EditorGUILayout.EnumPopup(new GUIContent("分类依据:"), selectedType);
            PlayerPrefs.SetInt("selectedType", (int)selectedType);

            if (selectedType == SelectedType.Tag)
            {
                List <string> tags = new HashSet <string>(CardBuilder.AllCards.Values.SelectMany(card => card.tag))
                                     .OrderBy(x => x).ToList();
                if (string.IsNullOrEmpty(tagValue))
                {
                    tagValue = tags.GetOne();
                }

                GUILayout.BeginHorizontal();
                GUILayout.Label("选择tag:");
                if (EditorGUILayout.DropdownButton(new GUIContent(tagValue), FocusType.Keyboard))
                {
                    GenericMenu genericMenu = new GenericMenu();
                    foreach (var tag in tags)
                    {
                        genericMenu.AddItem(new GUIContent(tag), tag.Equals(tagValue), value => {
                            tagValue = value.ToString();
                        }, tag);
                    }
                    genericMenu.ShowAsContext();
                }
                GUILayout.EndHorizontal();

                scrollPosition = GUILayout.BeginScrollView(scrollPosition);
                CardBuilder.AllCards.FilterValue(card => card.tag.Contains(tagValue) && card.isGold == false)
                .OrderByDescending(card => card.star)
                .Map(card => {
                    if (GUILayout.Button(card.name + "******".Substring(0, card.star)))
                    {
                        CreateNewCard(card);
                        SaveLastCard(card.id);
                    }
                });
                GUILayout.EndScrollView();
            }
            else if (selectedType == SelectedType.MinionType)
            {
                minionType = (MinionType)EditorGUILayout.EnumPopup(new GUIContent("种族:"), minionType);

                PlayerPrefs.SetInt("minionType", (int)minionType);

                isToken = EditorGUILayout.Toggle(new GUIContent("Token?"), isToken);


                scrollPosition = GUILayout.BeginScrollView(scrollPosition);
                CardBuilder.AllCards.FilterValue(card => card.IsMinionType(minionType) && card.isToken == isToken && card.isGold == false)
                .OrderByDescending(card => card.star)
                .Map(card => {
                    if (GUILayout.Button(card.name + "******".Substring(0, card.star)))
                    {
                        CreateNewCard(card);
                        SaveLastCard(card.id);
                    }
                });
                GUILayout.EndScrollView();
            }
            else if (selectedType == SelectedType.Keyword)
            {
                keywordValue = (Keyword)EditorGUILayout.EnumPopup(new GUIContent("关键字:"), keywordValue);
                PlayerPrefs.SetInt("keywordValue", (int)keywordValue);


                scrollPosition = GUILayout.BeginScrollView(scrollPosition);
                CardBuilder.AllCards.FilterValue(card => card.HasKeyword(keywordValue) && card.isGold == false)
                .OrderByDescending(card => card.star)
                .Map(card => {
                    if (GUILayout.Button(card.name + "******".Substring(0, card.star)))
                    {
                        CreateNewCard(card);
                        SaveLastCard(card.id);
                    }
                });
                GUILayout.EndScrollView();
            }

            List <int> cards = GetAllLastCard();
            if (cards.Count != 0)
            {
                EditorGUILayout.Space();
                EditorGUILayout.HelpBox("最近使用过", MessageType.Info);
                foreach (var id in cards)
                {
                    var card = CardBuilder.GetCard(id);
                    if (GUILayout.Button(card.name + "******".Substring(0, card.star)))
                    {
                        CreateNewCard(card);
                    }
                }
            }
        }
        else
        {
            EditorGUILayout.HelpBox("请启动游戏", MessageType.Info);
        }
    }