热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Behavior控场模式的解析(中)

booluseAbilifalse;是否使用过技能intusecoin0;是否使用过硬币,用一次+1soulfireetcintdeletecardsAtLast0;是否需要弃牌i

bool useAbili = false;//是否使用过技能
int usecoin = 0;//是否使用过硬币,用一次+1
//soulfire etc
int deletecardsAtLast = 0;//是否需要弃牌
int wasCombo = 0;//是否触发连击
bool firstSpellToEnHero = false;//回合中第一个法术打对面脸
int count = p.playactions.Count;//动作数量
int ownActCount = 0;//己方动作数量
for (int i = 0; i {
Action a = p.playactions[i];
ownActCount++;
switch (a.actionType)
{
case actionEnum.attackWithHero:
if (p.enemyHero.Hp <= p.attackFaceHP) retval++;//p.attackFaceHP就是15
if (p.ownHerOname== HeroEnum.warrior && useAbili) retval -= 1;//战士先砍再用技能
continue;
case actionEnum.useHeroPower:
useAbili = true;
continue;
case actionEnum.playcard:
break;
default:
continue;
}
switch (a.card.card.name)
{
case CardDB.cardName.innervate:
case CardDB.cardName.thecoin:
usecoin++;
if (i == count - 1) retval -= 10;//不要用完硬币结束回合
goto default;
case CardDB.cardName.darkshirelibrarian: goto case CardDB.cardName.soulfire;
case CardDB.cardName.darkbargain: goto case CardDB.cardName.soulfire;
case CardDB.cardName.doomguard: goto case CardDB.cardName.soulfire;
case CardDB.cardName.queenofpain: goto case CardDB.cardName.soulfire;
case CardDB.cardName.soulfire: deletecardsAtLast = 1; break;
default:
if (deletecardsAtLast == 1) retval -= 20;//不要随便出弃牌随从
break;
}
if (a.card.card.Combo && i > 0) wasCombo++;
if (a.target == null) continue;
//save spell for all classes
if (a.card.card.type == CardDB.cardtype.SPELL && (a.target.isHero && !a.target.own))
{
if (i == 0) firstSpellToEnHero = true;
retval -= 11;//法术不要随便打脸
}
}
if (wasCombo > 0 && firstSpellToEnHero)
{
if (wasCombo + 1 == ownActCount) retval += 10;
}
if (usecoin > 0)
{
if (useAbili && p.ownMaxMana <= 2) retval -= 40;//2费之前不要硬币技能
retval -= 5 * p.manaTurnEnd;//不要浪费硬币
if (p.manaTurnEnd + usecoin > 10) retval -= 5 * usecoin;//不要浪费硬币
}
if (p.manaTurnEnd >= 2 && !useAbili && p.ownAbilityReady)//费用充足,不要不用技能就结束回合
{
switch (p.ownHeroAblility.card.name)
{
case CardDB.cardName.heal: goto case CardDB.cardName.lesserheal;
case CardDB.cardName.lesserheal:
bool wereTarget = false;
if (p.ownHero.Hp if (!wereTarget)
{
foreach (Minion m in p.ownMinions)
{
if (m.wounded) { wereTarget = true; break;}
}
}
if (wereTarget && !(p.anzOwnAuchenaiSoulpriest > 0 || p.embracetheshadow > 0)) retval -= 10;
break;
case CardDB.cardName.poisoneddaggers: goto case CardDB.cardName.daggermastery;
case CardDB.cardName.daggermastery:
if (!(p.ownWeapon.Durability > 1 || p.ownWeapon.Angr > 1)) retval -= 10;
break;
case CardDB.cardName.totemicslam: goto case CardDB.cardName.totemiccall;
case CardDB.cardName.totemiccall:
if (p.ownMinions.Count <7) retval -= 10;
else retval -= 3;
break;
case CardDB.cardName.thetidalhand: goto case CardDB.cardName.reinforce;
case CardDB.cardName.thesilverhand: goto case CardDB.cardName.reinforce;
case CardDB.cardName.reinforce:
if (p.ownMinions.Count <7) retval -= 10;
else retval -= 3;
break;
case CardDB.cardName.soultap:
if (p.owncards.Count <10 && p.ownDeckSize > 0) retval -= 10;
break;
case CardDB.cardName.lifetap:
if (p.owncards.Count <10 && p.ownDeckSize > 0)
{
retval -= 10;
if (p.ownHero.immune) retval-= 5;
}
break;
default:
retval -= 10;
break;
}
}
int mobsInHand = 0;//手牌中随从数量
int bigMobsInHand = 0;//手牌中攻击力大于3的随从数量
foreach (Handmanager.Handcard hc in p.owncards)
{
if (hc.card.type == CardDB.cardtype.MOB)
{
mobsInHand++;
if (hc.card.Attack + hc.addattack >= 3) bigMobsInHand++;
retval += hc.addattack + hc.addHp + hc.elemPoweredUp;
}
}
if (ownMinionsCount - p.enemyMinions.Count >= 4 && bigMobsInHand >= 1)
{
retval += bigMobsInHand * 25;//己方场面优势,留一个大随从在手里
}
foreach (Minion m in p.enemyMinions)
{
retval -= this.getEnemyMinionValue(m, p);//减去所有敌方随从的价值
}
retval -= p.enemyMinions.Count * 2;//减去敌方随从数量2倍的价值
retval -= p.enemySecretCount;//减去敌方奥秘数量价值
retval -= p.lostDamage;//减去超杀(浪费伤害)的价值
retval -= p.lostWeaponDamage;//乱切刀浪费的价值
if (p.enemyHero.Hp <= 0)//斩杀价值
{
retval += 10000;
if (retval <10000) retval = 10000;
}
if (p.enemyHero.Hp >= 1 && p.guessingHeroHP <= 0)//被斩杀
{
if (p.turnCounter <2) retval += p.owncarddraw * 100;
retval -= 1000;
}
if (p.ownHero.Hp <= 0) retval -= 10000;
p.value = retval;
return retval;
}

 



推荐阅读
author-avatar
大魔王
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有