Exemple #1
0
 public CardKeyInfo(Handmanager.Handcard hc, bool own, Playfield pf)
 {
     entity   = hc.entity;
     position = hc.position;
     manacost = hc.getManaCost(pf, own);
     playable = hc.canplayCard(pf, own);
     cardName = hc.card.name.ToString();
 }
Exemple #2
0
        public void getNNPolicy(Playfield p, bool own)
        {
            dynamic board_encode = parsePlayfieldCNN(p, own);
            dynamic prob_list    = getNNPolicyCard(board_encode);
            Player  mPlayer      = p.getCurrentPlayer(true);
            Player  ePlayer      = p.getCurrentPlayer(false);

            foreach (CardDB.cardName cn in cardIdxDict.Keys)
            {
                int    idx  = cardIdxDict[cn];
                double prob = prob_list[idx];
                //string formattedString = prob.ToString(".################");

                //Console.WriteLine(cn + ":" + formattedString);
            }

            List <double> cardProbList = new List <double>();

            foreach (Handmanager.Handcard hc in mPlayer.owncards)
            {
                double prob = prob_list[cardIdxDict[hc.card.name]];
                cardProbList.Add(prob);
            }

            MathUtils.SoftMax(cardProbList);
            for (int i = 0; i < mPlayer.owncards.Count; i++)
            {
                Handmanager.Handcard hc = mPlayer.owncards[i];
                //Console.WriteLine("card idx:" + cardIdxDict[hc.card.name]);
                hc.playProb = cardProbList[i];
                Console.WriteLine(hc.card.name + ":" + hc.playProb);
                cardProbList.Add(hc.playProb);
            }

            var  mySortedCards = mPlayer.owncards.OrderByDescending(l => l.playProb);
            int  totalCost     = 0;
            int  maxMana       = mPlayer.ownMaxMana;
            bool toPlay        = true;

            foreach (Handmanager.Handcard hc in mySortedCards)
            {
                if (!toPlay)
                {
                    hc.playProb = 0.0;
                }
                else
                {
                    int manaCost = hc.getManaCost(p, p.isOwnTurn);
                    totalCost += manaCost;
                    if (totalCost > maxMana)
                    {
                        toPlay = false;
                    }
                    //Console.WriteLine("to play: " + hc.card.name);
                }
            }

            for (int i = 0; i < mPlayer.owncards.Count; i++)
            {
                Handmanager.Handcard hc = mPlayer.owncards[i];
                //Console.WriteLine(hc.card.name + ":" + hc.playProb);
            }

            int           offSet         = cardIdxDict.Count;
            List <double> targetProbList = new List <double>();

            foreach (Minion m in ePlayer.ownMinions)
            {
                double prob = prob_list[offSet + cardIdxDict[m.name]];
                targetProbList.Add(prob);
            }

            MathUtils.SoftMax(targetProbList);

            for (int i = 0; i < ePlayer.ownMinions.Count; i++)
            {
                Minion m = ePlayer.ownMinions[i];
                //Console.WriteLine("minion idx:" + (offSet + cardIdxDict[m.name]));
                m.targetProb = targetProbList[i];
                //Console.WriteLine(m.name + ":" + m.targetProb);
            }

            board_encode.Dispose();
            prob_list.Dispose();
        }