程序员版--致青春(二)——11平台dota胜负预判器

程序员版--致青春()——11平台dota胜负预判器

    之所以取“致青春”这个名,是因为我的大学要结束了。想起之前写了一些小工具,但没写博客,因此现在补上,以此纪念我即将逝去的青春。 

         这个工具是今年2月份做的。做这玩意的初衷是,打dota时,队友太坑,很难赢。因此能否弄一个程序,可以根据双方的实力自动预判哪边胜利?

    11是一个游戏对战平台。它的天梯系统里存着每个玩家的游戏数据,这些游戏数据是可以反映该玩家的水平的。比如天梯积分,胜率,mvp数量,各种名将值。5v5匹配时,11是根据天梯积分尽可能的匹配平衡。其实天梯积分已经能较好的反映一个玩家的水平了,但是由于这两个原因,不能单纯根据天梯积分来预判:1 匹配时,11平台让双方的平均积分尽可能接近 2 开小号(新号)的玩家不少,天梯积分反映不了水平,或许胜率,mvp等数据更能反映水平。

    下面分两部分,第一部分描述我实现的,第二部分描述一下我yy的。

    已实现的:思路是先从dota游戏进程(魔兽争霸)中读出十个玩家的id名称,然后根据这些名称在天梯积分系统中查找到对应玩家的游戏数据(积分,胜率,mvp数,名将值),然后数学分析一下这些数值,最后展示有用的信息给用户,让用户看信息判断。

    Yy的:下面所说的功能是自己当初想弄的,后来由于时间和实力的问题,没有实现。1 收集许多场数的游戏记录,分析一下那些玩家数据(天梯分,胜率,mvp)对胜负的影响各自的权重,然后根据权重来预判。由于收集游戏记录难做,分析数据应该要数据挖掘的知识,当初数据挖掘学得较水,所以没实现。 2 影响游戏的胜负,除了双方的实力水平,还有其他因素,比如英雄阵容。要弄这个,也需要数据挖掘的知识来分析哪些英雄组合容易得胜,哪些英雄组合克哪些组合。有点遗憾,不准备读研究生,没机会再学数据挖掘的课程了,当初大三小学期学了一个星期,感觉都没入门。我打算工作后自己学了,挺有意思的。

    最后,说一下我所实现的功能的技术细节。

    1 如何读十个玩家id名称。当初做之前有2个想法,读内存或者网络截包。后来是读取魔兽争霸的进程的内存。首先是用反汇编工具OD和CE来跟踪游戏进程内存,找到玩家id的内存地址。当时找了很久。不过有一个思路,就是一般游戏数据的都是有几层的地址构成的,我们需要找到一个“基址”,然后算出动态地址。刚开始找基址时,我只用了ce一层一层跟踪,后来发现,还没有找到静态地址(在ce显示绿色的),就不能继续跟踪了。网上找了一下,逛了一些论坛,发现ce结合od比较强大,od可以看到汇编代码,根据汇编代码往下跟踪,当时学了一些跟踪方法,最后也花了不少时间终于找到了。最后当然是用c++结合windows api来写代码实现。

    2 如何根据玩家id查询玩家数据。11是有游戏社区的,从网页上我们输入玩家id是可以查到的。所以只需要模拟http请求,再解析一下网页结构,就可以查到了。由于当初用php写过第三方的网页版的飞信,所以对抓包分析,用cookie模拟登陆,发送post或者get,解析html文件等这些比较熟悉。那么这里直接用php实现了。Php的apache服务器可以在自己电脑,也可以另外一个服务器(我当时用了新浪服务器sae,后来貌似是nginx正向代理出了问题,用不了)。所以,整体是这样的,c++读玩家id,启动浏览器通过get方法把玩家id传到apache服务器,php获取玩家姓名后,跟11游戏社区战绩中心http交互,解析出数据。在分析一下数据,在浏览器展示给用户。

    C++加php实现,完全是为了自己方便,直接利用自己先前的知识。其实直接用c++也可以,不过貌似c++通过socket实现http协议挺麻烦的,网上又找不到现有的网络库(后来发现linux有许多c++版的http网络库,不过我这是在windows也不能直接用,有时间可以学习一下linux的实现,然后自己在windows实现一个)。所以其实最好的是用C#写,既可以调用win api读内存,又有现有的http函数库。

    就说这么多了。有些想法由于知识和时间的问题没实现,自己工作后有时间再弄一下吧。如果有读者想搞一个这样的11平台胜负预判器,如果需要我的代码可以联系一下我。其实我2月份搞了这个后。不久11平台推出了内挂:11平台dota小秘书,就是可以看是个玩家的游戏数据的。其实从游戏的公平性和健康性来说,这种东西是有负面影响的。11推这个,也许是为了赚点钱。


我的技术博客:http://linger.devhub.com/blog/1911619--11dota/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值