王子炫技时刻到了:

自动采集,自动造兵,自动进攻,自动要兵,自动捐兵,自动升级城墙,自动进攻又包括屌丝,弓法蛮,偷黑和八本龙流冲杯几种,闪黑下王开技能。

捐兵是可以智能识别请求的,按需捐兵,而且是全兵种按需求捐。

就捐兵这点,应该比大多数的脚本都要强。打钱打黑的效率也是杠杠的,有图为证!

本王子的号,八本到十一本,只剩十一本科技和防御没满(但是王墙都满了)。


为什么要开源呢?我并没有太多时间可以花在维护脚本上,今年春节以后,就没加过新功能,除了修bug和更新一些图片识别代码。考虑之后,想着还有其他COC脚本开发爱好者,他们可能会对这个脚本有兴趣,我就开源给大家分享吧。如果别人能从源码中获得点帮助,感觉也算做了一件好事。

一直以来我并不怎么关注按键精灵的更新(哈哈哈,这和我的官方背景无任何关系,纯属个人情感表达),也有可能代码里有些我自己实现的东西按键精灵已经提供了。但是,我对自己的垒码技巧还是有自信的,有些地方还是可以拿出来和大家分享(xianbai)的。

源码在此,回复可见!来点有深度的评论:奖励【黄金之翼】勋章一枚!
以下为本帖隐藏内容

==============================

点击在线阅读代码(电脑端、手机端均可阅读)
注:打不开网页就多刷新几下,多多刷新必有回响!

脚本源码下载:
http://bbs.anjian.com/showtopic-697288-1.aspx

==============================
干货
先说说几个经验,如果大家有更好的解决办法,欢迎讨论

如何判断捐兵请求

第一反应是做字库,每个兵种做几个关键字,比如”蓝胖“,”法“什么的。但是,但是,按键精灵的字库很烂,真的很烂,不是一般的烂,识别起来问题很多,错误率非常高(哈哈哈,别以为我不敢在这里吐槽,吐槽也是希望产品能优化得更好,一个好产品永远是被骂出来的)。我做0-9这十个字的字库时都要哭了,别说二十几个兵种了。那咋办?怎么办呢?

答案是用多点找色。这个识别请求比字库靠谱多了。怎么找?我研究了一下几个主流安卓模拟,发现COC的字体在这些模拟器里都是一样的。所以,我可以发个聊天信息,把兵种都说出来;兵种名字间用个豆腐块符号分割,比如“▍蛮 ▍弓 ▍法 ▍巨 ▍”;然后截图;然后找豆腐块,两个豆腐块之间就是一个兵种名字的图片;对每个兵种名字的图片,扫描每行,在每行上找到字的边缘,在边缘两边各取一个像素,然后把这些像素合起来做这个字的多点找色匹配值。当然,这些都是用脚本完成的,并不费力。有兴趣可以看看源码里CreateWordPatterns这个函数。

还有一些细节,比如同一兵种不同叫法,“胖“和”巨“,是要识别成同一种兵的。再比如,脚本得区分"龙"和“小龙”,“蓝胖”和“胖”,“巨石投手"和“石”,需要对找到的字符做一下匹配优先级,比如小龙的优先级比龙高。最后需要识别“随”和“不”字。“随”字好理解,很多请求是“随便”,”随意“,对这种请求,脚本也需要识别一下,然后按照设定捐默认的兵种;识别“不”字是因为有些请求是“不要胖子”这样的,智能的脚本是不会捐胖子找茬的。

有些地方还没有做得太细,比如十本十一本发“狗球”,明显是要一狗一球,但是现在还不会识别已经捐了多少,如果没有狗就会全部捐球。。但是脚本还是有一点智能的,它会优先捐体积大的,如果有狗,会优先捐狗;同样道理“弓法”优先捐法。另一种情况是请求里带有数量的,比如“五法二胖”,目前也没办法精确满足。

但是从实际的状况看,效果已经非常好了。在一个活跃部落,二十四小时可以捐3000的人口。部落战时也不用担心不在线没法及时给兵。

捐兵实现里还有其他的一些细节,比如捐完自动补兵,向上翻页找请求之类的,没什么好讲的。

如何判断资源采集里有多少资源

这个我是花了不少功夫的。

首先要判断采集器的等级,如果放到最大,采集器的等级很好判断,但是这样的话很难确定采集器的坐标,这个坐标会关系到下兵的位置。最好是把画面缩放到最小,再判断采集器的位置。

缩放到最小麻烦的地方在于COC画面有一些平滑处理,在上下边缘还有颜色渐变(变暗)。平滑处理会使物品在移动非整数像素后,物品上同一个地方的像素颜色发生变化。如果知道一点图片缩放知识,知道显示的图片是插值的,就会理解。这样一来,如果对一个采集器做好了多点找色的匹配模板,很可能换个位置就找不到了。这也是为啥多点找色要找周围色彩相近的地方取点做匹配,而且匹配颜色的每个分量要给一个范围的原因。问题是,COC的采集器,尤其是10级11级12级金矿采集器,在缩到最小后,他们之间的差别都在色彩变化非常剧烈的地方,就是那堆金灿灿的的地方。匹配模板不好找啊。

为了解决这个问题,我花了不少时间,最后写了一个python程序,比较同样等级采集器的十几张不同截图,然后自动生成一个使所有图片都能匹配的多点找色匹配值。这样,对不同等级的采集器总算能区分得很准了。等级低的金水采集器(低于7级)由于资源不多,我就不管了。但是黑水是宝贵的,1级采集器都会识别。

第二个难点是判断采集器里到底有百分之几的资源。我们知道金水采集器的上限从12级往下依次是200000, 150000, 100000, 75000, 50000,…采集器里资源大概有多少百分比是可以通过外观判断的。网上有教怎么判断外观,但是没有给出具体数值范围。我通过大量实验(对,我就是这么勤劳)总结出了大致范围。黑水采集器有四种状态,每种状态的资源百分百比大概是:0-10% 10%-25% 25%-50% 50%-100%。金水采集器有五种状态,资源百分比大概是:0-4% 5%-35% 36%-65% 65%-95% 96%-100%。 金水采集器被抢的话大约会损失50%的资源(这个似乎和大本等级差值没什么关系)。黑水被抢是75%,比如,6级黑水采集器容量是1800,所以经常看到死鱼的采集器里能抢到1800*75%=1350黑。

判断百分比其实比判断资源采集器等级还难。因为地图缩小后,显示资源百分比的地方是很小很小的一块,肉眼都不一定能看出区别来。金矿采集器尤其困难,半满和大半满看上去一样,识别率实在太低,我只好曲线救国,用圣水采集器的百分比,反推金水采集器的百分比----他们经常是差不多的。但是黑水和圣水百分比是精确判断的。

为什么要判断得这么准?因为这个脚本需要智能下兵,并非像某些脚本四面一框下兵,傻子都知道不是人在下兵。这个脚本,如果不是太纠结下兵频率,是看不出来是脚本在下兵的。所有的兵都下在资源采集器或者大本边上,目的明确。需要准确识别的另外一个原因是,闪黑的时候,至少知道能闪到多少黑吧?对着空黑水矿闪,怎么看怎么傻。

如何判断死鱼

找坟墓,超过15个坟墓就假设它是死鱼。

如何判断打还是不打

这个可以设置的,比如只打死鱼不打活鱼;比如采集器资源超过多少才打,采集器还必须是在外面,藏在里面的不算;再比如要不要打外置大本。

如何定位建筑

之前说到定位建筑需要缩放到最小。这个是因为我刚开始开发的时候,地图缩放到最小,左右两边是正好没法移动的,只有上下可以移动,这样建筑坐标就好确定,只需要将地图移到最上端,找到建筑坐标;再将地图移到最下端,找到另一些建筑坐标,加个竖直方向的偏移量就可以了。但是,但是,某个版本以后变了,缩放到最小后,地图左右两边还有少许空间,而留的这少许空间还不是一个固定值;据我观察,是一个登录时确定的随机值。也就是缩放比例的最小值和以前不一样了,是一个不确定的值了。

我严重怀疑这个变化是supercell故意给脚本找麻烦的。不然为啥缩放比例最小值每次登陆还不一样?

当时想了一个办法解决了这个问题,在地图缩放到最小时,左右移动地图直到两边,算出左右移动的距离,然后折算出当前的缩放率,用这个缩放率来校正截图,并且用来校正找到的建筑物的坐标。代码里有调用SetScreenScale,就是干这个的。有一个问题,怎么算移动距离呢?办法就是当地图在最左时,在画面上选一行,在这行上选几个点,读取它们的像素,当作多点找色的匹配值;然后右移地图,移动后再找那几个点,算出移动了多少距离。只靠一行可能不准,那就多找几行,问题是由于识别错误,每行给出的移动距离可能不尽相同。那就对移动距离投个票,选票数最多的移动距离。

建筑物用多点找色来找,和确定采集器等级的方法差不多。目前判断的建筑物有:采集器,大本和防空炮台。防空炮台是给八本龙流冲杯用的。

进攻的时候,建筑物边缘一格内是不能下兵的,会有红色的阴影在草地上。通过判断草地的颜色,就可以知道哪里是建筑物的边缘。

把上述的都识别了以后,脚本可以把整个地图画出来,标注出找到的建筑和整个阵的轮廓。

一些细节:

地图是45度的

这个增加了游戏的真实感,但是也加大了脚本的处理难度,最后建筑物坐标都得转换成45度的坐标系。

“点击或按住屏幕可以派出部队”

不知道大家进攻的时候有没有留意到这句话。这句话在屏幕下方靠近底部的位置。有的时候,它非常恶心的挡住了那个位置上的大本或者其他建筑。所以脚本如果没有找到大本,会稍微移动一下屏幕,再判断一次大本的位置和等级。

下雪特效

冬天建筑屋会覆盖上一层雪,这真是蛋疼,我不得不修改多点找色的匹配值。

如何判断哪些草坪可以下兵
用多点找色会比较麻烦,很可能不准,因为草的颜色是复杂变化的。而且还必须区分开被红线覆盖的草坪。我的办法是,在地图每个小块的正中选一个小片,统计里面有多少个像素是在指定的颜色范围里的(绿色),如果大于40%,就算草皮。这样做的效果非常好,准确度很高。

一些奇技淫巧

统计用户数

发布以后,按键精灵并没有告诉我有多少人用我的脚本。但是我有我的办法。有个命令叫URL.Get可以发送一个HTTP请求。这一利用这个。怎么做?有一些网站给其他的网站提供流量统计服务,比如友盟。这些网站会要求客户在他们的网页里嵌入一段程序,这段程序会发一个请求给那个网站,所以每当用户打开客户的网页,就会发一个请求给那个网站,那个网站会记下来谁来访问了,把搜集的访问统计一下,就是客户网页的访问次数了。有的时候客户的网页上可能不能嵌入程序(不允许运行javascript),如果是这样的话,流量统计网站就得让客户网页直接发HTTP请求给他们,比如客户在他们的网站上放一个用户不可见的图片,然后图片地址是指向流量统计网站的。我们也可以利用这个,假装用户打开了一个页面,主动发请求,地址就是这个不可见图片的地址。

说了这么多不理解也没关系。办法就是:

1.在https://statcounter.com注册一个账号(不要钱,提供一个邮箱地址即可)。

2.建一个project。

3.在设置里选默认的安装指南。

4.选”基本“的选项,然后在显示的一堆代码里找到一个类似于//c.statcounter.com/1222323/0/12312323/0/的地址。

5.在按键精灵脚本的开始位置写一行URL.Get “http://c.statcounter.com/1222323/0/12312323/0/”(注意加上http;最好另起一个线程调用这个,因为这个调用会比较慢,在主线程里会卡)。可以只发一次,也可以每天发一次,取决于要不要统计日活跃用户。

6.登陆statcounter.com就可以看到用户统计了,时间,IP,甚至连用户在哪里都给你在地图上画出来。statcounter.com网站提供有中文翻译,虽然很烂。不行就找中文的流量统计网站,大致思路是一样的。

脚本死了怎么办

脚本其实不怎么死,安卓模拟器也不怎么死机了。之前倒是经常发生模拟器死机现象,现在不知为啥稳定了很多,可能模拟器优化了吧,我脚本的代码确实是一点没变。但是无论如何,如果要长时间挂机(一周甚至一个月),万一挂死了要重启挂会相当麻烦和耽误事的。解决办法就是,让脚本定期给电脑上另外一个程序发心跳(heartbeat),如果那个程序长时间没收到heartbeat,就重启模拟器,然后等模拟器重启了再自动重启脚本。这样就需要两个额外的东西,一个是电脑上运行的监视程序,脚本可以通过IP地址10.0.2.2和电脑上的监视程序通信(做安卓开发的应该知道);另外一个是“开机自动启动脚本”的app,我不知道按键精灵手机版现在有没有提供开机自动运行的功能,但我当时是自己做了一个的app,开机后会自动运行脚本。这个app还会自动点击跳过广告和开始运行等按钮----我相当于自己做了个按键精灵╮(╯_╰)╭
初衷是要确保脚本长时间运行,但是后来发现脚本和模拟器相当稳定,连跑一周都没有问题,这些东西都不需要了。可是有些遗迹还在代码里没有删掉。

自动识别游戏运行包

有些脚本需要在设置里指定游戏版本,这个真是十分没有必要。因为不同版本的游戏运行包名字都是com.supercell.clashofclans.xxxx(除了最近的TX版),xxxx可以是uc,可以是kunlun,或者是其他别的。简单的扫描手机里所有的安装包,然后找到名字是以com.supercell.clashofclans开头的那就是游戏的运行包了。山海插件提供了扫描安装包的功能。当然,如果安装了多个游戏版本,还是要选运行哪个版本的。

先写这么多。编程有意思,人人可为师!祝按键繁荣昌盛,早日上市!阿弥陀佛!真主伟大!——果壳王子(Gukoo)

王子炫技:COC开源解读相关推荐

  1. 看完阿逗比年度炫技大会,我什么都不敢信了

    栗子 乾明 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一年一度,阿逗比(Adobe)又来炫技了. 许多魔法,曾经只在论文里出现,没有给麻瓜玩耍的通道,如今都能一键解锁. 比如,一键调 ...

  2. 云风:不加班、不炫技,把复杂的问题简单化

    小学时跟随母亲去成人大学学习编程,初中开始参加信息学奥赛,高中写出人生中第一个成熟软件--Cview,大学发布开源软件风魂系列,后用于网易开发的<大话西游><梦幻西游>等热门游 ...

  3. Python 炫技操作:条件语句的七种写法

    作者 | 写代码的明哥 责编 | 屠敏 来源 | Python编程时光 有的人说 Python 入门容易,但是精通难的语言,这点我非常赞同. Python 语言里有许多(而且是越来越多)的高级特性,是 ...

  4. 黑客少年手机编 10 万行代码,恶意篡改 App 只为了 “炫技”?

    作者 | 伍杏玲 出品 | 极客宝宝(geek_baby) 正所谓"善与恶是同一块钱币的正反两面",对于技术来说,如何使用技术的这把"双刃刀"便是技术人的&qu ...

  5. AI生成新春祝福海报,AIGC从“炫技”走向日常

    在ChatGPT的带动下,AIGC可以说是过去一年里最火的概念. 就在临近春节的日子里,一款名为"写作蛙"的微信小程序正在悄然流行.简单输入几句祝福语,就能自动生成图文并茂的祝福海 ...

  6. 阿里架构师的炫技与克制:代码的两种味道与态度

    本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等 虽然你代码可能已经写得不少了,但要真正提高代码水平,其实还需要多读代码.就像写作,写得再多,不多读书,思维和认知水平其实是很难 ...

  7. 探索编程的极限:挑战炫技代码

    程序员常常被视为具有超强技术能力的人才,而他们手中的代码也往往充满了令普通人惊叹的炫技操作.作为程序员的我,将和大家分享一些炫技的代码写法 一.编程语言介绍 本人主攻Java.下面我将介绍一下Java ...

  8. Python 炫技操作(九):调用函数的九种方法

    系列导读 Python 炫技操作(一):条件语句的七种写法 Python 炫技操作(二):合并字典的七种方法 Python 炫技操作(三):判断是否包含子串的七种方法 Python 炫技操作(四):连 ...

  9. 程序员炫技:探索高级编程之美

    程序员常常被视为具有超强技术能力的人才,他们的代码充满了令普通人惊叹的炫技操作.在这篇文章中,我们将一起探讨程序员的炫技代码写法,分享一些高级编程技巧,同时提供一些学习建议,让你也能成为编程高手. 一 ...

最新文章

  1. JQuery果然是神器,这里顺便测试一下我发现的那个漏洞!
  2. IDEA打开父类的接口方法快捷键
  3. 一个我自己建的程序员资料分享站
  4. logo qt添加_Qt官方示例-窗口标志
  5. 【生信进阶练习1000days】day22-复习day1~day14的知识点
  6. php smarty 配置,php Smarty详细配置
  7. WinHTTP实现文件下载 C++程序
  8. 最好用的三款软件,满足你对截图的所有需求!
  9. Ubuntu16.04系统下FastDFS+Nginx安装配置
  10. linux非连续内存,(转)linux高端内存管理之非连续内存区(分配和释放)
  11. 数据库知识整理 - 并发控制(封锁、两段锁协议、意向锁)
  12. vs2019,C#,MySQL创建图书管理系统3(管理员相关页面的布局和设计实现,图书显示,图书添加)
  13. python使用numpy的np.mod函数计算numpy数组除以某一特定数值剩余的余数(remainder)、np.mod函数和np.fmod函数对负值的处理方式有差异
  14. 鲲鹏大数据解决方案拆解:用硬实力跨越技术与应用的鸿沟
  15. Docker容器之搭建本地私有仓库
  16. USB to TTL python 本地测试串口通信
  17. char类型的大小范围
  18. layui数据表格分页无法正常显示
  19. python求解100以内的素数并输出(递归)
  20. 成都小哥在蔚一名车汇改装奔驰C200柏林之声分享

热门文章

  1. GL/gl.h: No such file or directory # include GL/gl.h cannot find -lGL
  2. 图书馆智能照明控制系统设计介绍 安科瑞 许敏
  3. 称之幸运的ブドゥー人偶
  4. 第八章 Groovy 动态编程
  5. 三国群英4传的隐藏内容
  6. 前端媒体查询知识梳理
  7. 真机iOS 系统升级后xcode不能进行真机调试
  8. 吴伯凡-认知方法论-认知中的“月亮与六便士”
  9. “WIFI数据线”,手机和电脑无线传输文件,无需电脑客户端。
  10. 试题 基础练习 矩阵乘法