第九章日常外挂制作(下)
游戏界面全屏,而且背包展开面板位置也是固定的,那么可以按照背包格子大小,分割整个屏幕,然后屏幕就是一个个矩形网格。计算背包所有格子在在屏幕上的坐标,鼠标位置也可以轻易获取。那么接下来移动鼠标,点击左键或者右键,这些功能其实BD下载一个‘按键精灵’就可以解决这个问题。
不过刘飞对这些操作的准确性有更高要求,所以他需要进行对鼠标选中目标进行检测。在鼠标移动到背包某个格子上时,使用截屏器,将鼠标所在格子里的物品图标截取下来,然后将截取下来的图标与‘黑铁矿石’的图标进行对比,当然这期间使用的算法其实与‘二维码’扫描的原理差不多,不过更为复杂而已。
简单说一下原因,第一‘二维码’颜色只有两种-----黑白。第二‘二维码’的黑色码图其实是一个个小正方形黑色方块拼成的。而且小黑方块数量有限,都可数清楚,而且排列组合有规律可寻。
但是图片就不一样了,颜色多样,而且电脑识别颜色可不是红橙黄绿青蓝紫,然后加上黑白棕色,一套儿童水彩笔这么些。不同的电脑支持的色彩体系也不一样,具体体现也就是显示器的色位设置,一般有16位色(增强色)与32位色(真彩色)两种,现在的显示器大多使用的是32位色。
都知道红(red)、绿(green)、蓝(blue),也就是RGB三原色。油画调色:红蓝绿三种油彩按照不同比例能调出不同的颜色。如果计算机与显卡使用的是4位二进制码(0000-1111)显示与记录颜色(也就是16位色),16位色就是规定,红蓝绿三种油彩如果以1为单位,调制颜色时每种颜色颜料可以放0-16单位进入调色板。颜色记录方式R(0000-1111)G(0000-1111)B(0000-1111),颜色种类总数=16*16*16=4096种,也就是显示器能显示出4096种不同的的颜色。
32位色也就是计算机使用的是8位二进制码(00000000-11111111)了显示与记录颜色,红蓝绿三种油彩如果以1为单位,调制颜色时每种颜色颜料可以放0-256单位进入调色板。颜色记录方式R(00000000-11111111)G(00000000-11111111)B(00000000-11111111),颜色总数=256*256*256=16777216种,也就是显示器能显示出16777216种不同的的颜色。知道虚拟歌姬洛天依的应该知道#66CCFF(R-01100110,G-11001100,B-11111111)这个颜色标号,也就是著名的天依蓝!(但是一般不会真有这么多颜色,毕竟有些颜色靠得近,比如#454545与#454645这两号颜色,人们眼睛其实分别不出差异)
所以就这颜色数量,还有图像像素点数量,这两个方面,就使图片识别与二维码识别处于一个不同的难度维度。其核心也就是----算法!算法的优劣决定这图片识别能力。要知道刘飞的FeeFound搜索器,可是可以使用图片作为‘关键字’,用来搜索其他类似图片的。你可以随便在网上的一张图片上截取一小块,作为‘关键字’贴在FeeFound搜索器的搜索输入栏,FeeFound搜索器可以找到原图与包含这一小块截图的所有‘类似’图片。所以,‘图片识别器’刘飞有现成的源代码。基于‘图片识别’的‘背包里的黑铁矿定位器’,刘飞并没有花多长时间就写了出来。
于是,‘黑铁矿低品质矿石识别与数量计数器’,‘背包里的黑铁矿定位器’,在中午11点多一点就已经完成了,因为多是直接复制原来的源代码,稍加修改,所以并不需要刘飞花太多精力。
12点整,整个“低品质黑铁矿自动丢弃插件”已经完成!刘飞掏出便签本,在上面写上一条“20160506:物品信息收集模块”。然后起身穿好外套,出了寝室就直奔食堂。
因为刚刚下课,所以路上返回寝室与吃饭的人是慢慢越来越多了,等到刘飞慢悠悠到了第一食堂的时候,食堂里已经人山人海了。喧闹的食堂里对于喜欢平静的刘飞来说,实然不是一个好去处,在寝室坐了一上午,于是准备先去食堂对面的足球场走两圈,疏松一下筋骨,放松一下精神。
刘飞直接进了体育馆,随后穿过体育馆来到了体育馆后的足球场。可能是刚上完体育课的原因,操场上还是有不少人的,三三两两或坐在草地上,或结伴在草地上嬉闹。刘飞在跑道上走了两圈,也就找个地方坐一下,稍微歇息一会。
如果刘飞没记错的话,今天是一个多云转晴天气,五月份不冷不热,温暖舒适。足球场就在东湖边上,所以这里一直微风拂面,天上的太阳有云朵的遮挡,也是十分的温柔,刘飞双手捂着后脑勺,在靠足球门柱坐着,好不惬意。
二十来分钟一晃就过去了,已然12点50过两分了,刘飞看了一眼手表。没迟疑直接起了来,拍了拍裤子上的草屑,然后就径直往食堂去了,休息的时间也够了,因为下午刘飞的任务还是很重的。
“信息收集模块”主要功能就是将消息从客户端发到服务器端,这些消息主要就是比如挖了多少矿,背包的状态,人物的状态等等,而且其中包含了注册模块(也就是客户端向服务器注册,类似于QQ登录模块。也就是建立客户端与服务器端的网络链接,这样才可以进行信息传递。当然服务器也就要有注册验证模块了,不过那是后面几天要做的事情。
“信息收集模块”要求客户端必须先从游戏获得“挖了多少矿,背包的状态,人物的状态”等等这些信息,也就是监视分机游戏运行状态。刘飞为了不麻烦,直接将“功能控制模块”嵌入到了“信息收集模块”之中。于是“信息收集模块”肩负着链接“自动分解矿”与“自动丢弃低价值黑铁矿”这两个功能模块的作用,也就是这两个功能进行控制。比如“信息收集模块”发现‘背包满了’,就直接调用“自动分解矿”功能,然后“自动分解矿”模块控制游戏人物停止挖矿,将矿锄更换为开石刀,分解矿石。分解完矿石,发现“低品质黑铁矿计数器”记载了背包里有一定数量的低品质黑铁矿石,于是调用“低品质黑铁矿自动丢弃”功能,自动丢弃低品质黑铁矿。然后换回矿锄继续挖矿。
再比如“信息收集模块”发现矿锄‘耐久度’为零了,调用“自动分解矿”模块里的自动更换矿锄功能,丢弃零耐久矿锄,然后更换新矿锄。
刘飞如果没有‘天大’的事情,吃饭就会一直慢吞吞的,细嚼慢咽。于是一份盖饭吃了半个多小时,一直到1点半才回到寝室。照常拿起哑铃,在寝室里一边走来走去,一边消食,一边来回举起放下哑铃。十多分钟后才坐回到自己的凳子上,开始了下午的任务。
因为“信息收集模块”需要根据‘实际情况’来收集数据,处理数据。刘飞一样按照‘低品质黑铁矿识别’那样,分析游戏数据,找到获得矿石与符文等等的数据,然后解析出来。最后就是要写一个模块记录与显示这些数据,这需要新建一个数据库,并且还需要附带一个数据阀值监控器。
刘飞先静下心来在自己脑海里打了个草稿,回忆了一下从前写过的类似的程序,然后打开了自己的函数库,将等一下估计要用到的算法函数,提前复制到了当前的项目目录里面,以免等一会写起代码,途中停下来去函数库找。
当然了刘飞是不可能自己创造一门‘计算机编程语言’的,虽然他曾经有过这个想法,但是研究了一下,这个“工程”太庞大了,远不是一个人短时间能开发出来的。不过刘飞却是不可能还使用Microsoftvisualstudio6.0/C++编译器的。毕竟这个也不过是一个程序而已,虽然这个开发工具集完整而且强大,但是刘飞毕竟用不上那么多功能,而且出于算法加密与安全考虑,刘飞也必须自己开发一个编译器。当然不可能全部是刘飞自己开发的,程序编译器与调试调解器多是参考现今流行的,然后加入了一点自己的需求从而开发出来的,也就是加了算法加密器,并且定义了一些自己习惯的语法逻辑。说白了,也就是‘山寨’了一发!
整个“挖矿大师”项目框架很久之前就已经搭建好了,不过现在首要是现将“信息收集模块”的代码补全。然后将“信息收集模块”、“黑铁矿低品质矿石识别与数量计数器”、“背包里的黑铁矿定位器”,还有已经在卖了的“矿石自动分解器”,几样整合起来就是“挖矿大师”的客户端就完成了。不过这样大杂烩,特别是“矿石自动分解器”还是另外一个独立的项目。所以最后的“测试”阶段,刘飞心里已经估计最少需要4到7天了。
不过程序员嘛,不就是是干这些事情的么?当然按照“正统”的程序设计流程一步步来的话,开发体量类似这个“挖矿大师”的商用程序(比如一个网管系统),一些相关的文档,估计刘飞就要整理一两个星期。