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 = ; 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, );
}
else if (entity.GetTag(GAME_TAG.CONTROLLER) == enemycontroler)
{
if (eg.ContainsKey(cide)) eg[cide]++;
else eg.Add(cide, );
}
if (cide == CardDB.cardIDEnum.UNG_067t1) ownCrystalCore = ;
} string entityId = entity.Id;
Triton.Game.Mapping.TAG_ZONE entZone = entity.GetZone();
if (i < )
{
if (entityId != "")
{
if (entZone == Triton.Game.Mapping.TAG_ZONE.DECK) continue;
if (tmpDeck.ContainsKey(entityId)) tmpDeck[entityId]--;
}
}
else if (i >= && 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 = ;
foreach (Minion m in this.enemyMinions)
{
if (m.handcard.card.cardIDenum == CardDB.cardIDEnum.GVG_056) num++;
}
if (num > )
{
foreach (Minion m in lastpf.enemyMinions)
{
if (m.handcard.card.cardIDenum == CardDB.cardIDEnum.GVG_056) num--;
}
}
if (num > ) entityId = "GVG_056t";
else
{
num = ;
foreach (Minion m in lastpf.ownMinions)
{
if (m.handcard.card.cardIDenum == CardDB.cardIDEnum.GVG_035) num++;
}
if (num > )
{
foreach (Minion m in this.ownMinions)
{
if (m.handcard.card.cardIDenum == CardDB.cardIDEnum.GVG_035) num--;
}
}
if (num > ) 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, );
}
foreach (var c in tmpDeck)
{
if (c.Value < ) 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 == -)
{
isTurnStart = true;
Ai.Instance.updateTwoTurnSim();
}
Probabilitymaker.Instance.setGraveYard(graveYard, isTurnStart); if (startDeck.Count == ) return;
noDuplicates = true;
foreach (int i in turnDeck.Values)
{
if (i > )
{
noDuplicates = false;
break;
}
}
}

最终的实现

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

HearthBuddy炉石兄弟 格雷迈恩的更多相关文章

  1. HearthBuddy炉石兄弟 Method 'Entity.GetRace' not found.

    解决方案 namespace Triton.Game.Mapping{// Token: 0x020004A4 RID: 1188[Attribute38("Entity")]pu ...

  2. HearthBuddy炉石兄弟 如何调试ai

    Sepefeets's update to botmaker's Silverfish AI This AI is a Custom Class for Hearthranger and Hearth ...

  3. HearthBuddy炉石兄弟 Method 'CollectionDeckBoxVisual.IsValid' not found.

    [CollectionManagerScene_COLLECTION] An exception occurred when calling CacheCustomDecks: System.Miss ...

  4. 炉石兄弟 修复图腾师问题 by大神beebee102, 还有阴燃电鳗

    修复图腾师问题   beebee102 修复了先摇图腾再下图腾师的问题,另外加了阴燃电鳗的sim卡.在兄弟策略的模拟程序中测试了没问题,真机没有试过,麻烦吧友测试了回复一下.链接: [有效] http ...

  5. [.NET] ConfuserEx脱壳工具打包

    [.NET] ConfuserEx脱壳工具打包 ConfuserEx 1.0.0脱壳步骤        Written by 今夕何夕[W.B.L.E. TeAm] 1.先用UnconfuserEx把 ...

  6. Playfield 类方法的注释

    前言 本篇随笔的底包采用的是百度炉石兄弟吧20200109折腾版中自带的 routines 文件. 本次仅为绝大多数方法添加 xml 注释和简单解析,没有具体解析与重构. Playfield 类方法众 ...

  7. HearthBuddy卡组

    偶数萨 手打两天已上传说,各位加油  欧洲牧羊人 ### 火元素换艾雅# 职业:萨满祭司# 模式:狂野模式## 2x (2) 图腾魔像        # 2x (2) 大漩涡传送门   # 2x (2 ...

  8. HearthBuddy 第一次调试

    HearthBuddy https://www.jiligame.com/70639.html 解压缩包,打开hearthbuddy.exe直接运行就可以:不用替换mono.dll直接可用:不需要校验 ...

  9. angularjs $emit $on $broadcast 父子 兄弟之间传值

    父子之间 <div ng-controller="ParentCtrl"> <div ng-controller="ChildCtrl"> ...

随机推荐

  1. spring cloud EurekaClient 多网卡 ip 配置 和 源码分析(转)

    https://blog.csdn.net/qq_30062125/article/details/83856655 1.前言对于spring cloud,各个服务实例需要注册到Eureka注册中心. ...

  2. Java秒杀实战 (七)安全优化

    转自:https://blog.csdn.net/qq_41305266/article/details/81174782 一.隐藏秒杀地址 思路:秒杀开始前,先去请求接口获取秒杀地址 1.接口改造, ...

  3. element之table自定义表头

    1.实现效果 2.使用render-header可以自定义表头 <el-table-column prop="date" label="日期" sorta ...

  4. 【异常】‘for’ loop initial declarations are only allowed in C99 mode

    1 Python版本导致的异常 /root/Python-3.5.7/Modules/_pickle.c: In function ‘PyMemoTable_Copy’: /root/Python-3 ...

  5. 01_日志采集框架Flume简介及其运行机制

    离线辅助系统概览: 1.概述: 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集.结果数据导出. 任务调度等不可或缺的辅助系统,而这些辅助 ...

  6. Django_05_模板

    模板 如何向请求者返回一个漂亮的页面呢?肯定需要用到html.css,如果想要更炫的效果还要加入js,问题来了,这么一堆字段串全都写到视图中,作为HttpResponse()的参数吗?这样定义就太麻烦 ...

  7. 算法9-----输出全排列(递归)---移除K个数,剩下最小数。

    1.题目:给定一个字符串,输出所有的字典序. 如: 输入字符串:'ac',输出:['ac','ca'] 输入字符串:‘abc' ,输出:['abc','acb','bac','bca','cab',' ...

  8. okhttp异步请求流程和源码分析

    在上一次[http://www.cnblogs.com/webor2006/p/8023967.html]中对同步请求进行了详细分析,这次来分析一下异步请求,而关于异步请求和同步请求其使用方式基本上差 ...

  9. Java&Selenium自动化测试实现页面元素、页面对象及测试代码分离

    一.摘要 本篇博文将介绍自动化测试实现页面元素.页面对象及测试代码分离在自动化框架中的实现 二.解析页面元素定位信息 首先,将页面元素与实际的代码分离,首先我们将页面元素定位信息和定位表达式保存在属性 ...

  10. golang restful api

    https://medium.com/@petrousov/how-to-build-a-restful-api-in-go-for-phonebook-app-d55f7234a10 ------- ...