标签:lame nio ini return ubi lam nta dir min
废话不多说,直接上代码
/// <summary> /// 重写behavior名称 /// </summary> /// <returns>一个字符串,behavior的名称</returns> public override string BehaviorName() { return "控场模式"; } /// <summary> /// 定义了一个叫penman的私有成员,但是没什么卵用 /// </summary> PenalityManager penman = PenalityManager.Instance; /// <summary> /// 重点来了,计算场面价值的关键函数 /// </summary> /// <param name="p">场面</param> /// <returns>价值</returns> public override float getPlayfieldValue(Playfield p) { //p.value的初始值是Int32.MinValue,也就是-2147483648 //意思就是防止多次运算,这个场面的val如果大于-2000000(已经计算过val)则直接返回 if (p.value >= -2000000) return p.value; int retval = 0;//定义了一个叫retval的变量来接受计算的结果 #region 双方血量价值 int hpboarder = 10;//己方血量临界值 if (p.ownHeroName == HeroEnum.warlock && p.enemyHeroName != HeroEnum.mage) hpboarder = 6; int aggroboarder = 11;//敌方血量临界值 if (p.ownHero.Hp + p.ownHero.armor > hpboarder) { retval += p.ownHero.Hp + p.ownHero.armor;//血量大于临界值,价值为1 } else { if (p.nextTurnWin()) retval -= (hpboarder + 1 - p.ownHero.Hp - p.ownHero.armor);//如果下回合能斩杀,血量价值为1 else retval -= 2 * (hpboarder + 1 - p.ownHero.Hp - p.ownHero.armor) * (hpboarder + 1 - p.ownHero.Hp - p.ownHero.armor);//血量小于临界值,价值为2*差平方 } if (p.enemyHero.Hp + p.enemyHero.armor > aggroboarder) { retval += -p.enemyHero.Hp - p.enemyHero.armor;//敌方血量大于临界值,价值为1 } else { retval += 4 * (aggroboarder + 1 - p.enemyHero.Hp - p.enemyHero.armor);//敌方血量小于临界值,价值为4 } #endregion #region 惩罚价值 retval -= p.evaluatePenality; #endregion #region 己方手牌价值 retval += p.owncards.Count * 5; #endregion #region 任务进度价值 retval += p.ownQuest.questProgress * 10; #endregion #region 双方水晶价值 retval += p.ownMaxMana; retval -= p.enemyMaxMana; retval += p.ownMaxMana * 20 - p.enemyMaxMana * 20; #endregion #region 双方技能价值 retval += (p.enemyHeroAblility.manacost - p.ownHeroAblility.manacost) * 4;//双方技能费用的价值 if (p.ownHeroPowerAllowedQuantity != p.enemyHeroPowerAllowedQuantity) { if (p.ownHeroPowerAllowedQuantity > p.enemyHeroPowerAllowedQuantity) retval += 3;//双方技能可以使用次数的价值 else retval -= 3; } #endregion #region 敌方法强价值 if (p.enemyHeroName == HeroEnum.mage || p.enemyHeroName == HeroEnum.druid) retval -= 2 * p.enemyspellpower; #endregion #region 双方武器价值 if (p.ownWeapon.Angr > 0) { if (p.ownWeapon.Angr > 1) retval += p.ownWeapon.Angr * p.ownWeapon.Durability; else retval += p.ownWeapon.Angr * p.ownWeapon.Durability + 1; } if (!p.enemyHero.frozen) { retval -= p.enemyWeapon.Durability * p.enemyWeapon.Angr; } else { if (p.enemyWeapon.Durability >= 1) { retval += 12; } } #endregion #region 抽牌价值 if (p.lethalMissing() <= 5) { retval += p.owncarddraw * 100;//如果对面差5以内斩杀,显著提高抽牌价值 } if (p.ownMaxMana < 4) { retval += p.owncarddraw * 2;//3费以内抽一张牌+2价值 } else { retval += p.owncarddraw * 5;//3费以上抽一张牌+5价值 } if (p.owncarddraw + 1 >= p.enemycarddraw) retval -= p.enemycarddraw * 7; else retval -= (p.owncarddraw + 1) * 7 + (p.enemycarddraw - p.owncarddraw - 1) * 12; #endregion //int owntaunt = 0; int readycount = 0;//可以攻击随从的数量,没什么卵用 int ownMinionsCount = 0;//血量小于等于4,攻击大于2或者血量大于3的随从数量。这作者脑子坏掉了?想表达啥? #region 己方随从价值 foreach (Minion m in p.ownMinions) { retval += 5;//首先给每个随从一个5的初始值 retval += m.Hp * 2;//加上2倍血量 retval += m.Angr * 2;//加上2倍攻击 retval += m.handcard.card.rarity;//加上卡牌稀有度?作者菜逼 if (!m.playedThisTurn && m.windfury) retval += m.Angr;//如果不是本回合打的并且有风怒,加上攻击力 if (m.divineshild) retval += 1;//如果圣盾,+1 if (m.stealth) retval += 1;//如果潜行,+1 if (m.handcard.card.isSpecialMinion && !m.silenced)//如果是没被沉默的特殊随从 { retval += 1;//默认+1 if (!m.taunt && m.stealth) retval += 20;//如果不是嘲讽,是潜行,+20 } else { if (m.Angr <= 2 && m.Hp <= 2 && !m.divineshild) retval -= 5;//否则如果是攻击血量都小于等于2且没有圣盾,-5 } if (m.lifesteal) retval += m.Angr / 2;//吸血,+攻击力一半 if (m.divineshild && m.taunt) retval += 4;//圣盾嘲讽,+4 if (p.ownMinions.Count > 2 && (m.handcard.card.name == CardDB.cardName.direwolfalpha || m.handcard.card.name == CardDB.cardName.flametonguetotem || m.handcard.card.name == CardDB.cardName.stormwindchampion || m.handcard.card.name == CardDB.cardName.raidleader)) retval += 10;//如果随从至少3个,团队领袖这类群体buff随从价值+10 if (m.handcard.card.name == CardDB.cardName.bloodmagethalnos) retval += 10;//血法师+10 if (m.handcard.card.name == CardDB.cardName.nerubianegg)//蛛魔之卵的价值 { if (m.Angr >= 1) retval += 2; if ((!m.taunt && m.Angr == 0) && (m.divineshild || m.maxHp > 2)) retval -= 10; } if (m.Ready) readycount++; if (m.Hp <= 4 && (m.Angr > 2 || m.Hp > 3)) ownMinionsCount++; retval += m.synergy;//加种族与职业匹配度 } #endregion #region 克苏恩价值 retval += p.anzOgOwnCThunAngrBonus;//加克苏恩buff #endregion #region buff手牌价值 retval += p.anzOwnExtraAngrHp - p.anzEnemyExtraAngrHp;//加给手牌的buff #endregion
标签:lame nio ini return ubi lam nta dir min
原文地址:https://www.cnblogs.com/dch0319/p/13549025.html