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(); }
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(); }