设为首页收藏本站

塞爱维(CIV)文明联盟

 找回密码
 注册
查看: 17282|回复: 77

[原创] neverblade的全自动开图小帮手(按键精灵版)(完工了,喜欢的进来看看~~)

[复制链接]
发表于 2009-3-27 22:06:44 | 显示全部楼层 |阅读模式
在CC众的威逼利诱下…………(主要是利诱拉~~)

在某版的残酷引导下…………   

我终于在某个风雨交加的夜晚决定公布这个东西………………

写在最前面的话:本人不对本程序造成的后果负一切责任,欢迎任何人,在任何地方转载此帖,写不写作者无所谓,但是请著明:塞爱维首发

开始的开始,所有准备用这个东西的同学先估摸下自己的机器…………如果是重开图要花个2,3分钟的最好还是不用了……本程序是在文明4之外独立运行的,所以如果跑个文明4就勉强,还是量力而为…………

目录,大概准备这么写

一楼,核心基础,同图片内多张相同图片比对

二楼,重要周边,确认比对,以及自动保存

三楼,非重要周边,自动开图,以及其他


当然,各位同学请自行下载个按键精灵~~~

前言:说实话,这东西非常简单,对于大多数CC众来说,动动脑筋半天就能写出来,毕竟玩文明的智商都不可能在平均水平以下吧………………

另外,我平身最讨厌的就是只知伸手不知思考的生物…………

因此本教程不会是个复制粘贴就能用的傻瓜程序,我尽量把每一条命令的作用写清楚,完全弄明白了才是自己的知识……

老鸟其实也就比菜鸟多懂一点东西而已…………


[ 本帖最后由 neverblade 于 2009-8-21 16:43 编辑 ]
 楼主| 发表于 2009-3-27 22:07:10 | 显示全部楼层
首先,我们要做的就是截图…………进游戏,别关WB开张图,然后进WB把你可能需要用到的资源都编辑上,然后截下来,就象这样:



然后用画图板处理下,让它们变成这样注意请不要剪切到灰圈以外的部分,这有可能让图片比对变的不准确……另外,所有的图片保持大小统一……方便日后使用~~



这东西是要扔到“按键精灵安装目录/script”这个文件夹里的~~~

有了比对图片,现在开始正题,在限定范围内比对同一图片数量请注意,按键精灵只支持BMP格式的图片比对,文明4默认的截图格式是JPG,截图后需要转下格式

说实话,按键精灵对于图片比对方面做的并不好,只有如下一个公式可用……

VBSCall Call FindPic (x1,y1,x2,y2,filename,similar,x3,y3)

简单解释下,公式名FindPic是关键字,动了就不能用了,前面的VBSCall 和Call我没搞明白是啥东西,有一个能用,有两个也能用,好象没有就不能用
x1,y1,x2,y2分别代表了取样空间的左,上,右,下的范围,即x1,y1是取样区域的左上角坐标 x2,y2是取样区域的右下角坐标
filename 需要比对的样本名字(就是处理过的截图,再次强调,只支持BMP格式)
similar 相似度,从0.5到1 数值越大越精确,1为完全一致
x3,y3把获得的相似图片的坐标存储在这两个数值中


试例:在屏幕范围内寻找宝石个数


x1 = 0               //定义并且初始化扫描开始点的X坐标
y1 = 0               //定义并且初始化扫描开始点的Y坐标

gem = 0            //定义并且初始化宝石的个数记录

While{x1 < 1024}       //循环,直到横轴坐标到达1024  (我这里用的是1024*768的扫描,这个x1以及下面那个y1可根据自己的屏幕大小,甚至窗口模式的窗口大小自行调整)
     xfind = 0      //这个是用来定义本个纵轴扫描有没有发现宝石的

     While{y1 < 768}    //循环,直到纵坐标到达768
          intX = 0     //定义并且初始化扫描到的宝石X坐标           //这里开始就是核心部分,要添加各种各样其他的比对都需要从这行开始
          intY = 0     //定义并且初始化扫描到的宝石Y坐标

          Call FindPic(x1,y1,x1+xa,y1+ya,"gem.bmp",0.9,intX,intY)
                  //在由x1,y1,x1+xa,y1+ya的范围内比对图片(xa,ya是指图片本身的宽和高,gem.bmp就是样图
                  //用0.9的精确度没有特殊意义,其实我自己一直用的1)
                  //上面这行代码的实际意思就是,只在一张图片的范围内寻找是不是有符合这张图片的内容
         
          If intX > 0 and intY > 0        //因为intX,intY是用来记录找到的图片的坐标的,所以如果他们大于0,那么就有新的符合条件的图片位置给找到了
               gem = gem + 1              //宝石数量加1
               xfind = xfind + 1             //本纵列搜索到数量加1
               y1 = y1 + ya-1                //直接跳过ya的距离(即样图高度)继续搜索
          EndIf                                   //核心部分到此结束
         
          y1 = y1 +1        //这个纵坐标循环每执行一次,纵坐标就会往下移一格,直到768
     EndWhile

     If xfind > 0             //如果在本纵列中找到过至少1次的目标物体
          x1 = x1 +xa-1    //直接跳过xa的距离(即样图的宽度)继续搜索
     EndIf

     x1 = x1 + 1            //这个横坐标循环每执行一次,横坐标就会往右移一格,直到1024
EndWhile           //全部循环结束

Call MessageBox(gem)            //弹个窗口出来告诉你有几个宝石



一楼到此结束,如果没看明白…………饿——我也不知道怎么办

[ 本帖最后由 neverblade 于 2009-3-28 04:27 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-3-27 22:07:52 | 显示全部楼层
话说两天没来了…………继续继续


上一骗已经看到了,我设置了一个变量GEM用来记录有多少个宝石矿,实际上,我自己用的设定中只用了4个变量,来控制开图的价值判断

rich = 0            //贵金,包括宝石,金子和毛皮
food = 0           //食物,包括所有的农业食物和所有牲口,以及鹿
seafood = 0      //海产,不用多解释了吧……
stone = 0          //石头,其实是2种石头加上大象

复制核心段的内容,加上图片以后,可以改为任何资源数量的判断,我后面写的判断公式例子就是基于以上4种资源分类来定的

清除楼上尾部的 Call MessageBox(gem) 这其实也是一个判断,只不过是告诉你有几个宝石而已


If food > 1 and rich > 0        //如果有2个以上粮食,1个以上贵金
     MoveTo X,Y       //移动到X,Y这个是文明4菜单按钮在屏幕上的位置,请自行更改
     LeftClick 1          //点下左键,开菜单
     Delay 500
     MoveTo X,Y       //移动到X,Y这个是在菜单里保存的位置,请自行更改
     LeftClick 1          //点下左键,进入保存画面
     Delay 500
     MoveTo X,Y       //移动到X,Y这个是在保存画面中输入框的位置,点哪里无所谓,最好是点最前面,请自行更改
     LeftClick 1          //点下左键,让输入框进入可输入状态
     SayString t         //在刚才选顶的地方输入变量t
     Delay 500
     MoveTo X,Y        //移动到X,Y这个是保存画面中保存按钮的位置,请自行更改
     LeftClick 1           //点下左键,确认保存,如果是已经存在的存档还要再让鼠标去点一次确认……
     t = t + 1             //t 增值,下次输入就是后面一个号码,t需要在程序最开始定义
EndIf                  //结束整个命令

以上是最基本的一个判断

这样如果这图符合条件就会给自动保存…………

如果看不明白………………


[ 本帖最后由 neverblade 于 2009-4-3 21:16 编辑 ]
 楼主| 发表于 2009-3-27 22:08:46 | 显示全部楼层

本段代码,如何自动重开图………………看完了会发觉其实很简单很简单……

在所有判断语句完成之后,(也就是说,楼上的判断给复制粘贴了N次,并且更改了部分条件之后)

     MoveTo X,Y       //移动到X,Y这个是文明4菜单按钮在屏幕上的位置,请自行更改
     LeftClick 1          //点下左键,开菜单
     Delay 500
     MoveTo X,Y       //移动到X,Y这个是在菜单里重制的位置,请自行更改
     LeftClick 1          //点下左键,重制游戏地图
     Delay XXXX        //XXXX代表了你机器重新开一次图的时间,我的机器用的是2000即2秒…………
     KeyPress 13,1     //地图重制之后按下回车键一次,因为很多时候地图重制不会把镜头对着出生地的………………

就这么完了………………

这楼够简单吧……没有看不懂的理由了吧………………


[ 本帖最后由 neverblade 于 2009-4-3 21:28 编辑 ]
 楼主| 发表于 2009-3-27 22:09:30 | 显示全部楼层

以上三个部分便是我自己的机器人的组成结构(当然更高级的带WB的开图功能就不说了

如果有一点编程基础的应该很容易就能学会了(我说的基础是指曾经用过按键精灵在WOW里钓过鱼,排过战场那种…………)

如果再不行……考虑上传程序和自己的比对图了………………


[ 本帖最后由 neverblade 于 2009-4-3 21:37 编辑 ]
发表于 2009-3-27 22:10:13 | 显示全部楼层
什么情况,我是路过的
发表于 2009-3-27 22:12:12 | 显示全部楼层
前排了,难道又是教学贴?
发表于 2009-3-27 22:50:08 | 显示全部楼层
赞啊。。参观一下~~~

刚才不小心插入了。。第一时间自宫鸟~~~
发表于 2009-3-27 22:52:20 | 显示全部楼层
热烈的期待中
发表于 2009-3-27 23:03:33 | 显示全部楼层
哈哈 开图男是个好伙计,摸一下
发表于 2009-3-27 23:04:42 | 显示全部楼层
水圣同不同意此贴算一精华,让开图男凑齐八精华拿个勋章呢?
发表于 2009-3-27 23:07:20 | 显示全部楼层
开到好图我就会忍不住想抢奇迹,抢完奇迹基本上就是蘑菇的命了

所以不能开好图啊……
 楼主| 发表于 2009-3-27 23:17:08 | 显示全部楼层
发现个很晕的问题……论坛不让上传BMP格式的图片,还要自己手动转格式
发表于 2009-3-27 23:22:45 | 显示全部楼层

回复 #13 neverblade 的帖子

转吧,转转更健康
发表于 2009-3-27 23:23:36 | 显示全部楼层

回复 #11 san_moshou 的帖子

看看反响吧,反响热烈的话我帮LZ去要勋章。
 楼主| 发表于 2009-3-27 23:25:02 | 显示全部楼层
谢谢楼上两位………………
发表于 2009-3-27 23:30:24 | 显示全部楼层
连采集脚本,都只会用普通录像的漂过。
发表于 2009-3-27 23:30:56 | 显示全部楼层
现在我似乎是CC的勋章受理人了,近年的大部分勋章都是我找飞沙要的。
发表于 2009-3-27 23:47:03 | 显示全部楼层

回复 #18 dragne 的帖子

头衔可以改勋章仲裁官了
发表于 2009-3-27 23:48:08 | 显示全部楼层

回复 #19 军师 的帖子

等我从飞沙那弄到个银鹰勇士勋章再说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|塞爱维(CIV)文明联盟    

GMT+8, 2024-3-29 05:14

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表