dota最强英雄牛英雄是谁?

★★★本博客欢迎转载,但请注明版权、原文链接,谢谢。
&&&&&&&&&&&&&&&&&&
posts - 43,comments - 654,trackbacks - 13
& 相信很多“牛人”都被一些宅男学弟问过这个问题:学长,我作为一个初学程序的菜鸟,要怎么样才能提交自己的编程水平,变成牛人呢? 说实话,这个问题深奥地我有点回答不上来,无外乎只能告诉他“多读”“多写”“搞好数学和算法,练内功”“用好设计模式”“看《编程之美》”等等之类的空话套话。后来给出了一个***让我深受启迪,他说:就一句话——多写给人用的代码。 这句话第一次听上去也许觉得有点装逼,实则不然,我非常认同这个观点。 好吧,宅男学弟又开始问了:学长,什么样的代码才是给人用的代码?毕竟我一个菜鸟我又不是腾讯不能弹窗口邀请别人来用,别人为什么要用一个菜鸟的代码呢? 这个问题相对就更非常具体了,我个人认为,有实用价值同时又让人觉得亲切有趣的程序就可以了。 例如,Dota是一款80后程序猿耳熟能详的游戏,尤其是还没走出大学校门的挨踢宅男的最爱。毫无疑问,如果我们以Dota作为突破点,只要idea有意思、跟Dota紧密相关,就算是菜鸟写的程序也能在学校BBS里被大家争相传阅。 本文就以“统计Dota玩什么英雄最容易拿MVP”为例,做一次抛砖引玉。文末我们可以讨论更多关于Dota辅助程序的idea。 & 11对战平台是最近流行的Dota平台,与其他对战平台不同的是,11有海量的统计数据。对于每一个玩家,都有最详细的统计,细到包括他所擅长的英雄、历史上用哪个英雄做了哪些事、平均某个英雄出场杀敌数、甚至细到该玩家历史上一共拿了多少个Double Kill都有记录。
本文仅仅示例如何统计MVP而已,相对于11对战平台的数据宝库来说,可谓是“弱水三千,只取一瓢”。思路是这样的: 抓取大量(如十万个)活跃玩家的历史场次信息,对所有场次的MVP英雄进行统计。十万个活跃玩家涉及的总Dota场次是千万级的,统计样本已经很充足。 & 有了基本思路,我们再理一个详尽的流程: 1.抓取数据并保存到本地。(涉及的新手知识:如何抓取网络数据包、 通过WebClient下载HTML网页) 2.分析已保存到本地的数据,作出记录。(涉及的新手知识:简单的正则表达式、处理JSON) 3.制作直观统计结果(涉及的新手知识:LINQ和lambda表达式、文件的读写) 这么一个简单的程序,对初学.NET的新手来讲,可以带着兴趣锻炼到如此多的基本功知识点,比看什么枯燥的xxx入门到精通书籍有趣多了! o(∩_∩)o & 第一步 用Fiddler抓包获得用户统计页面的URL
通过抓包我们知道: 1.用户统计页面的地址形如: u后面是用户的ID 2.需要登录才能查看统计结果。我们程序获取页面时,可以通过设置Cookie来模拟登录。 & 第二步 使用WebClient构造请求 & Cookie部分设置为Fiddler里所抓取到的Cookie值。如果抓取成功就保存到本地文件,文件名以用户ID命名。& & & &&///&&summary&&&&&&&&&///&抓取某个玩家的数据o&&&&&&&&///&&/summary&&&&&&&&&///&¶m&name="i"&玩家平台的ID&/param&&&&&&&&&private&void&GetFiles(int&i)&&&&&&&&{&&&&&&&&&&&&WebClient&wc&=&new&WebClient();&&&&&&&&&&&&wc.Headers.Add("User-Agent",&"Mozilla/5.0&(Windows&NT&6.1)&AppleWebKit/535.1&(KHTML,&like&Gecko)&Chrome/14.0.835.186&Safari/535.1");&&&&&&&&&&&&wc.Headers.Add("Accept",&"text/html,application/xhtml+xml,application/q=0.9,*/*;q=0.8");&&&&&&&&&&&&wc.Headers.Add("Accept-Encoding",&"gzip,deflate,sdch");&&&&&&&&&&&&wc.Headers.Add("Accept-Language",&"zh-CN,q=0.8");&&&&&&&&&&&&wc.Headers.Add("Accept-Charset",&"&GBK,utf-8;q=0.7,*;q=0.3");&&&&&&&&&&&&wc.Headers.Add("Cookie",&"设置为你自己的COOKIE");&&&&&&&&&&&&wc.DownloadFile(string.Format(urlTemp,&beginId&+&i),&(beginId&+&i).ToString());& & & & }& & 第三步 分析已抓取文件中的数据 & 用到了简单的正则表达式。本例中所处理的对象为JSON,我们采用Newtonsoft.JSON进行处理。将分析结果保存到Dictionary&string,int&数据结构中,同时更新统计的总场次。 &&&///&&summary&&&&&&&&&///&读取之前所抓的文件内容&&&&&&&&///&&/summary&&&&&&&&&///&¶m&name="l"&&/param&&&&&&&&&public&void&ReadFiles(long&l)&&&&&&&&{&&&&&&&&&&&&var&sr&=&File.OpenText(l.ToString());&&&&&&&&&&&&string&content&=&sr.ReadToEnd();&&&&&&&&&&&&&//正则表达式提取出HTML文件中的JSON&&&&&&&&&&&&var&m&=&Regex.Matches(content,&"HeroList.*]",&piled);&&&&&&&&&&&&if&(m.Count&&&0)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&//将JSON变成Record类&&&&&&&&&&&&&&&&var&list&=&JsonConvert.DeserializeObject&List&Record&&(m[0].ToString().Replace("HeroList&=&",&""));&&&&&&&&&&&&&&&&foreach&(var&item&in&list)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&if&(!dicMvp.ContainsKey(item.heroname))&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&dicMvp.Add(item.heroname,&item.mvp);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&dicMvp[item.heroname]&=&dicMvp[item.heroname]&+&item.&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&//累计场次&&&&&&&&&&&&&&&&&&&&BattleCount&+=&item.lost&+&item.win&+&item.&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}& 第四步 制作直观的统计结果 & 软件的用户怎么查看程序运营的结果呢?一般无外乎就是文本文件、网页、图片。我们先写个简单的文本文件吧!。(如果写个漂亮的HTML5页面,相信效果会非常好哦)注意在输出结果前,先把Dictionary&string,int&排序一下,可以使用到简单的lambda表达式。 &&&&&///&&summary&&&&&&&&&///&分析结果&&&&&&&&///&&/summary&&&&&&&&&private&void&GetResult()&&&&&&&&{&&&&&&&&&&&&var&sw&=&File.CreateText("result.txt");&&&&&&&&&&&&StringBuilder&sb&=&new&StringBuilder();&&&&&&&&&&&&foreach&(var&item&in&dicMvp.OrderByDescending(p&=&&p.Value))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&sb.AppendFormat("{0}:{1}\n",&item.Key,&item.Value);&&&&&&&&&&&&}&&&&&&&&&&&&sw.Write(sb.ToString());&&&&&&&&&&&&sw.Write("\n\n总统计场次:"&+&BattleCount);&&&&&&&&&&&&sw.Close();&&&&&&&&} & 运算结果是这样的:
在已统计的数十万场比赛中,最容易获得MVP的英雄前十名依次为:神灵武士、屠夫、嗜血狂魔、赏金猎人、幽鬼、影魔、山岭巨人、召唤师、敌法师、先知。 当然,如果统计范围再大一点(把抓取数据的程序跑一整天即可),涉及场次达到千万级,结果会更加准确。 怎么样,非常简单吧?嘿嘿,之前说过了,本文只做抛砖引玉,为那些初学.NET找不到练手项目的人增加一些思路。您可以根据本文很轻松地制作出“最容易打钱的英雄”“杀人数最多的英雄”“最容易推塔的英雄”“最坑爹的英雄”等等等等。。。 & 关于Dota辅助程序 其实,当您熟知了本文所提及的这些“基础知识”以后,您会发现11对战平台的统计数据可以做非常多的事。 关于Dota辅助程序是我一位同事提出的,可以是各种对战平台(不限于11)的插件形式。可以做的事情有: 1.根据海量统计数据,在某场Dota比赛开始后,根据场上10个英雄,告诉玩家哪个英雄最容易获得MVP。 2.根据海量统计数据和场上已选的9个英雄,告诉玩家应该选哪个英雄更容易打出好的成绩。 3.根据海量统计数据告诉玩家此局应该怎么出装备、怎么升级能甚至整体策略。
4.根据海量统计数据(尤其是天梯的数据),告诉玩家在CM模式(或其他组队模式)应该怎么选英雄搭配(还可以结合对方选的英雄实时运算新策略)。 ………… 砖已经够多了,玉就靠你们了。 o(∩_∩)o 有任何问题,欢迎咨询,(新浪微博)知无不言,言无不尽。文中原代码下载地址/azure/11Stat.rar&&
阅读(...) 评论()您现在的位置:
[专题] 最适合新手的十大英雄 火***赫然在列
[专题] 最适合新手的十大英雄 火***赫然在列
[]&[]&[]&[]&[]&[]&[]&[]&[]&[]
点击英雄或技能图片即可查看该英雄详细资料及相关攻略
&&&&& DotA至今已经发展到了6.59D版本,这期间历经了无数次的改动与变革,同时也衍生了无数主流与非主流的打法,但对于新进玩家而言,再选择英雄和英雄打法上却很难突破,所以经过数天的整理和网友票选,本专题诞生了。
TOP 10&&众神之王Zeus
&编者引言: 众神之王是那些装A人的天敌,为什么呢?因为大家都说&装A遭雷劈&- - !作为神族老大,入选是必须的,但票选结果仅排第十名,或许是ZUES打法多样,能力太强,大家对他的期望值更高些吧,宙斯能够通过高伤害的魔法以及额外伤害让敌方英雄战战兢兢啦。一个不小心,宙斯就能双杀甚至三杀啦,甚至有的敌方英雄是正在往温泉赶的路上!就是因为他太强了,所以建议新人要完整的研读一下攻略。
&&&&& 每次提到众神,都不由得想起他那可怕地雷击,爆发力强者是他最大的优势,通过闪电链还可以线上收割,雷击技能更有打断和反隐效果,大招更是追杀和侦察的的法宝。大家要记住Zues他是一个万金油型的英雄.什么是万金油?就是他什么都可以做,他可以溶入任意战术,他可以与大多数英雄产生化学反应.所以他的装备和打法是灵活运用的,也是多种多样的。需要根据阵容和实际情况的变化,随机调整。
发表您的评论(文明评论 违者屏蔽
请勿争吵)
Copyright &
武汉超玩在线科技有限公司版权所有

参考资料

 

随机推荐