getDecks(); 设置

 private void getDecks(){Dictionary<string, int> tmpDeck = new Dictionary<string, int>(startDeck);List<GraveYardItem> graveYard = new List<GraveYardItem>();Dictionary<CardDB.cardIDEnum, int> og = new Dictionary<CardDB.cardIDEnum, int>();Dictionary<CardDB.cardIDEnum, int> eg = new Dictionary<CardDB.cardIDEnum, int>();int owncontroler = TritonHs.OurHero.GetTag(GAME_TAG.CONTROLLER);int enemycontroler = TritonHs.EnemyHero.GetTag(GAME_TAG.CONTROLLER);turnDeck.Clear();noDuplicates = false;List<HSCard> allcards = TritonHs.GetAllCards();int allcardscount = allcards.Count;for (int i = 0; i < allcardscount; i++){HSCard entity = allcards[i];if (entity.Id == null || entity.Id == "") continue;if (CardDB.Instance.cardIdstringToEnum(entity.Id) == CardDB.cardIDEnum.UNG_116t) ownMinionsCost0 = true;if (entity.GetZone() == Triton.Game.Mapping.TAG_ZONE.GRAVEYARD){CardDB.cardIDEnum cide = CardDB.Instance.cardIdstringToEnum(entity.Id);GraveYardItem gyi = new GraveYardItem(cide, entity.EntityId, entity.GetTag(GAME_TAG.CONTROLLER) == owncontroler);graveYard.Add(gyi);if (entity.GetTag(GAME_TAG.CONTROLLER) == owncontroler){if (og.ContainsKey(cide)) og[cide]++;else og.Add(cide, 1);}else if (entity.GetTag(GAME_TAG.CONTROLLER) == enemycontroler){if (eg.ContainsKey(cide)) eg[cide]++;else eg.Add(cide, 1);}if (cide == CardDB.cardIDEnum.UNG_067t1) ownCrystalCore = 5;}string entityId = entity.Id;Triton.Game.Mapping.TAG_ZONE entZone =  entity.GetZone();if (i < 30){if (entityId != ""){if (entZone == Triton.Game.Mapping.TAG_ZONE.DECK) continue;if (tmpDeck.ContainsKey(entityId)) tmpDeck[entityId]--;}}else if (i >= 60 && entity.ControllerId == owncontroler){if (extraDeck.ContainsKey(i)){if (entityId != "" && entityId != extraDeck[i].id) extraDeck[i].setId(entityId);if ((entZone == Triton.Game.Mapping.TAG_ZONE.DECK) != extraDeck[i].isindeck) extraDeck[i].setisindeck(entZone == Triton.Game.Mapping.TAG_ZONE.DECK);}else if (entZone == Triton.Game.Mapping.TAG_ZONE.DECK){extraDeck.Add(i, new extraCard(entityId, true));}}}Action a = Ai.Instance.bestmove;foreach (var c in extraDeck){if (c.Value.isindeck == false) continue;CardDB.cardIDEnum ce;string entityId = c.Value.id;if (entityId == ""){if (a != null){switch (a.actionType){case actionEnum.playcard:switch (a.card.card.cardIDenum){case CardDB.cardIDEnum.LOE_104: goto case CardDB.cardIDEnum.BRM_007; case CardDB.cardIDEnum.BRM_007: if (a.target != null) entityId = a.target.handcard.card.cardIDenum.ToString();break;case CardDB.cardIDEnum.LOE_002: entityId = "LOE_002t"; break; case CardDB.cardIDEnum.LOE_079: entityId = "LOE_019t"; break; case CardDB.cardIDEnum.LOE_019t: entityId = "LOE_019t2"; break;case CardDB.cardIDEnum.LOE_110: entityId = "LOE_110t"; break; }break;}}if (entityId == ""){var oldCardsOut = Probabilitymaker.Instance.enemyCardsOut;foreach (var tmp in eg){if (oldCardsOut.ContainsKey(tmp.Key) && tmp.Value == oldCardsOut[tmp.Key]) continue;switch (tmp.Key){case CardDB.cardIDEnum.AT_035: entityId = "AT_035t"; break; case CardDB.cardIDEnum.GVG_031: entityId = "aiextra1"; break; case CardDB.cardIDEnum.LOE_111: entityId = "LOE_111"; break; }}if (entityId == "" && lastpf != null){int num = 0;foreach (Minion m in this.enemyMinions){if (m.handcard.card.cardIDenum == CardDB.cardIDEnum.GVG_056) num++; }if (num > 0){foreach (Minion m in lastpf.enemyMinions){if (m.handcard.card.cardIDenum == CardDB.cardIDEnum.GVG_056) num--;}}if (num > 0) entityId = "GVG_056t";else{num = 0;foreach (Minion m in lastpf.ownMinions){if (m.handcard.card.cardIDenum == CardDB.cardIDEnum.GVG_035) num++; }if (num > 0){foreach (Minion m in this.ownMinions){if (m.handcard.card.cardIDenum == CardDB.cardIDEnum.GVG_035) num--;}}if (num > 0) entityId = "GVG_035";}}}if (entityId == "") entityId = "aiextra1";}c.Value.setId(entityId);ce = CardDB.Instance.cardIdstringToEnum(entityId);if (turnDeck.ContainsKey(ce)) turnDeck[ce]++;else turnDeck.Add(ce, 1);}foreach (var c in tmpDeck){if (c.Value < 1) continue;CardDB.cardIDEnum ce = CardDB.Instance.cardIdstringToEnum(c.Key);if (ce == CardDB.cardIDEnum.None) continue;if (turnDeck.ContainsKey(ce)) turnDeck[ce] += c.Value;else turnDeck.Add(ce, c.Value);}Probabilitymaker.Instance.setOwnCardsOut(og);Probabilitymaker.Instance.setEnemyCardsOut(eg);bool isTurnStart = false;if (Ai.Instance.nextMoveGuess.mana == -100){isTurnStart = true;Ai.Instance.updateTwoTurnSim();}Probabilitymaker.Instance.setGraveYard(graveYard, isTurnStart);if (startDeck.Count == 0) return;noDuplicates = true;foreach (int i in turnDeck.Values){if (i > 1){noDuplicates = false;break;}}}

最终的实现

https://github.com/ChuckHearthstone/SilverFish/blob/master/DefaultRoutine/Chuck.SilverFish/Helpers/EvenDeckHelper.cs

转载于:https://www.cnblogs.com/chucklu/p/11372990.html

HearthBuddy炉石兄弟 格雷迈恩相关推荐

  1. 炉石兄弟 Hearthbuddy 新手教程

    交流QQ群 775059127 第一步:安装微软组件支持库(可在群文件中下载) 第二步:进入游戏开启炉石兄弟 登陆并进入游戏,自己把卡牌添加好,选择好模式,并选择角色.比如对战模式,选好你需要挂机的角 ...

  2. 无计算机基础一文看懂炉石脚本(炉石兄弟)配置多开使用流程-修订版

    为了更多人能够减少重复劳动的无意义游戏时间,把更多时间用在享受生活上,我为大家写一个炉石兄弟的使用流程. 本文将尽量为没有基础或经验的小白提供一个完整的炉石传说挂机方案,能多开,win&mac ...

  3. 炉石兄弟留牌编辑格式

    ;符号前加卡牌id ;职业;None;Discard:2;/ # ()不拿 ;职业;None;Hold:1;/ # ()拿一个 ;职业;None;Hold:1;/GAME_005 # ()后手拿一个 ...

  4. aml linux 环境,各位辛苦编译DSDT.aml的兄弟,linux是个好工具啊,简单提取

    本小菜先后安装雪豹和lion,驱动一直不能完美解决.本想靠dsdt和idsdt大法驱动我的G310M显卡,可是困难重重. 小本bios为phoenix,而非各位大神提供的ami和aword板,编译错误 ...

  5. 传智播客还收费 兄弟会都是免费的

    [传智播客还收费 兄弟会都是免费的 兄弟连兄弟会it开发培训 www.itxdh.net 企鹅群:499956522 高端人才培养就到[兄弟连兄弟会it开发培训]纯免费的高端IT人才培养] 传智播客, ...

  6. CSS之关系选择器(子元素、后代、兄弟选择器)

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>< ...

  7. 兄弟们,TechEd见!

    马上就要TechEd啦!11月6日到11月7日,在北京举办TechEd,嘿嘿,那就是中国最大的微软技术庙会! 盆盆是在2005年时第一次参加TechEd的,当时拿的是MVP的赠票.啥都不懂,就好比刘姥 ...

  8. 又双叒有兄弟因为 YYYY-MM-dd 被叫去加班了...

    上海降温到零下了,一点起床的欲望都没,想着直接睡到吃午饭吧.结果看到群里小伙伴吐槽一早被叫起来修Bug,定睛一看,要修的BUG居然又是之前说过很多次的YYYY-MM-dd问题,这个不是之前已经说过很多 ...

  9. 兄弟俩都是院士!哥哥在南大,弟弟在复旦

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文来源:TOP大学来了.宁波日报.余姚发布 11月18日,2021 ...

  10. 【每日一算法】填充同一层的兄弟节点

    微信改版,加星标不迷路! 每日一算法-填充同一层的兄弟节点 给定一个二叉树 struct TreeLinkNode {TreeLinkNode *left;TreeLinkNode *right;Tr ...

最新文章

  1. dockerfile tomcat 配置jvm参数_Java 从小白到大牛,JVM 不得不知的一些参数和配置
  2. Python进阶04 函数的参数对应
  3. sql入侵 mysql日志_服务器入侵日志分析(一)——mysql日志位置确定
  4. 『设计模式』状态模式(不起花里胡哨的名字了)
  5. utittest和pytest中mock的使用详细介绍
  6. 长虹CIRI语音智能电视技术原理简析
  7. mysql Substr与char_length函数的应用
  8. ubuntu 安装mysql 5.5.28 编译安装 innodb 配置
  9. 8086微型计算机原理答案,8086微型计算机原理与应用(吴宁)习题参考答案(第一章)...
  10. 2022美赛M奖经验总结(4)图文优化篇
  11. ESP32 文件存储 spiffs
  12. C语言引用方式调用函数
  13. miniGUI源码分析:初始化
  14. 滴滴共享单车在深圳被叫停;六六接受京东道歉;宝马发布最新充电网络计划丨价值早报
  15. c++ Primer课后练习9-31
  16. powershell美化
  17. 饮水总要思源,才能走得更远
  18. GitHub最热!程序员小哥不得不知的所有定律法则(附项目链接)
  19. LeetCode 2035. 将数组分成两个数组并最小化数组和的差
  20. 面试题 08.08. 有重复字符串的排列组合

热门文章

  1. word2010中插入脚注和尾注
  2. php太平洋时间转成北京时间,北京时间 → 太平洋时间 换算表 和太平洋时间 → 北京时间 换算表...
  3. 华为披露手机出货超1亿台的“两点”意图
  4. 辽宁民办计算机学校排名2015,2021辽宁民办大学排名 最新高校排行榜
  5. html钢笔特效,JS仿Photoshop钢笔工具(贝塞尔曲线可视化操作)效果
  6. 桌面CPU性能排行榜
  7. php毕业论文结论,科学网—如何写好学位论文的摘要和结论 - 王东升的博文
  8. 一个人知道自己为什么而活,他就可以忍受生活加诸他的一切苦难
  9. w7计算机虚拟内存设置,win7虚拟内存怎么设置最好
  10. HUAWER 华为5G无线数据终端 和 TP-LINK路由器AX6000连接及注意事项