|
发表于 2010-10-27 10:38:16
|显示全部楼层
昨晚抽空完成了下今天的教程,但时间比较晚了.所以没有发上来.今天趁上班空闲时间把教程发下.在上一讲中我给大家演示了如何登陆游戏.现在进入了游戏了.我们自然就得开始游戏了.像帝国这种游戏自然一开始就是自行建造房屋之类.所以这一讲我就教大家如何去用脚本自动建房屋之类.好了进入正题:
先看下我们当初进入的游戏界面:
上图中有一处房子就是昨晚我做测试时建的.现在还有几块空地.我们要建东西自然是要在空地上建的.所以我们的第一步应该是寻找游戏界面中的空地.然后随机选择其中的一块建我们想要建的东西.这里以建房屋为例
我们看游戏界面中,空地都是有空地二字做为标识的.我们查看源文件.发现空地的都是这样的代码:
<DIV class=normal_mask style="LEFT: 393px; CURSOR: pointer; BOTTOM: 5px; POSITION: absolute" onclick=building_click(this); jQuery1236910391968="550" m_position="9"><IMG class=bTG id=building_9 style="DISPLAY: inline-block; WIDTH: 115px; HEIGHT: 100px" src="images/blank.gif" jQuery1236910391968="551">
<DIV class=buildingLabel id=building_9_label style="RIGHT: 14%; BOTTOM: 2px; POSITION: absolute; normal: " jQuery1236910391968="552">空 地</DIV></DIV>
而像军事指挥所则是这样的:
<DIV class=normal_mask style="LEFT: 275px; CURSOR: pointer; BOTTOM: 280px; POSITION: absolute" onclick=building_click(this); jQuery1236910391968="529" m_position="2"><IMG class=bTG id=building_2 style="DISPLAY: inline-block; WIDTH: 115px; HEIGHT: 100px" src="images/blank.gif" jQuery1236910391968="530">
<DIV class=buildingLabel id=building_2_label style="RIGHT: 14%; BOTTOM: 2px; POSITION: absolute; normal: " jQuery1236910391968="531">军事指挥所: 1级</DIV></DIV>
可以看到它的所有的都是用点击后触发:onclick=building_click(this);
我们要在空地上建东西,自然就要找到一块空地的ID然后点击它就会在右下角出现建造的功能页:
现在思路清了就开始动手吧.我们用正则来取界面中所有的空地:
var placereg=/<DIV class=buildingLabel.+?地<\/DIV>/ig;
var aplace =document.body.innerHTML.match(placereg);
复制代码
上面两句就是取空地的DIV然后得到一个空地的数组付给了aplace;
我们可以用
for(var i=0;i<aplace.length;i++){
alert(aplice);
}
复制代码
查看是否取正确了.上面总共得到八块空地.我们只需要有一块就好了.所以呢我们就选择第一块;而如果一块空地也没有我们就应该告诉用户说无法建东西了.因为没有了空地.代码如下:
//寻找空地并建筑房屋
function build_home(){
var placereg=/<DIV class=buildingLabel.+?地<\/DIV>/ig;
var aplace =document.body.innerHTML.match(placereg);
if(aplace.length>0){
getbyid(getdivid(aplace[1])).click();实行 //注意这里的getdivid这个函数是用来得到获取的空地的DIV里的id号用的.
}else{
alert('已经没有空地');
}
}
getdivid这个函数的代码如下:
//取ID号
function getdivid(str){
var re=/building_\d+/ig
var id=str.match(re);
return id;
好了现在我们已经选择了一块空也并且点击了.也让右下角出现了建筑的功能表.现在我们就要造房子了.还是一样的,分析源文件.知道建造房屋的启发动作是:
button_event('289',pos)
这个289代表的是房子的等级和建筑的类型.而pos则是告诉服务器建筑是放在了哪一个点上.所以呢我们还要传一个pos参数给它.而分析了相关的数据包后发现.其实这个pos就是id里的那个数字.如我们的ID号是building_4_label
那么这个pos就是4 所以这里写上一个函数来得到这个pos点.代码如下:
//得到对应的位置点
function getdgjpos(str){
var re=/\d/ig
var pos=str.match(re);
return pos;
}
好了一切都满足了就可以去造房子了.但是为了今后的扩展性.我们还得查下,当前我们的各项资源是否够建这房子的.如果不够显然是无法成功的.所以我们要得到各项资源.这里如何得到我就不细说了.一样的查看源文件.这里的代码如下:
//得到当前的食物
function getfood(){
return getbyid('food').innerHTML;
}
//得到当前的木材料
function getwood(){
return getbyid('wood').innerHTML;
}
//得到当前的黄金
function getgold(){
return getbyid('gold').innerHTML;
}
//得到当前的石头
function getstone(){
return getbyid('stone').innerHTML;
}
//得到当前的能力
function getcapacity(){
return getbyid('stone').innerHTML;
}
//得到当前的人口
function getperson(){
return getbyid('person').innerHTML;
}
我们在建房子之前先检测下是否资源够.够就可以建.代码如下:
//寻找空地并建筑房屋
function build_home(){
var placereg=/<DIV class=buildingLabel.+?地<\/DIV>/ig;
var aplace =document.body.innerHTML.match(placereg);
if(aplace.length>0){
getbyid(getdivid(aplace[1])).click();
var pos=getdivid(aplace[1]);
var flag=1
if(getfood()<150){
flag=0;
alert('食物不够150');
return;
}
if(getwood<37){
flag=0;
alert('木材不够37');
return;
}
if(getstone<75){
flag=0;
alert('石头不够75');
return;
}
if(getgold()<112){
flag=0
alert('黄金不够112');
return;
}
if(flag==1){
setTimeout("button_event('289',pos)",1000); //点击建筑房屋的按钮.此时会跳出一个对话框.要求确认
setTimeout("confirm_build();",3000); //为了照顾网络延时这里我延迟三秒再点确认按钮.
}
}else{
alert('已经没有空地');
}
}
//建筑东西时点击确认按钮
function confirm_build(){
getbyid('submit_dialog').click();
} |
|