巧用chrome扩展程序

   

       由于因特网和浏览器的广泛普及,网页应用程序的开发价值越来越大,它比任何一种开发语言和环境更容易让用户接触和使用到。 此时对于开发者而言,浏览器已经不仅仅是浏览信息的工具了,还是开发环境或者说是编译器吧。所以最近开始学chrome的扩展程序设计。 

      对于chrome扩展程序的制作网上已经有比较多的说明和示例了,我也不必要在多累赘了。chrome扩展程序有什么功能呢? 其实这已经由浏览器和网站设计语言决定了。 例如根据浏览器的通讯能力,可以制作客户端、服务端通信的应用; 利用javascript语言制作动态网页的功能为特定的网站添加特效,当然还可以制作一些小游戏和其他小应用,具体的大家可以看看chrome的应用商店。

     这几天,我就在给游戏写外挂,国内典型的伺服游戏OGame。 通过chrome的扩展程序,可以利用javascript语言从游戏网站的源代码中获取必要的信息。例如获得各种资源的代码如下:


function getquantity() {
    m_metal = document.getElementById("metalx").innerHTML;
    m_stone = document.getElementById("crystalx").innerHTML;
    m_gas = document.getElementById("deuteriumx").innerHTML;
}

      其次,在从网页中获取金属厂,晶体矿和重氢合成厂的建造等级:

function getrate() {
    var p = -1; //暂时表示位置
    var count = 0; //表示已经找到的数目
    var rate = new Array(5); //表示四个建筑物等级
    var x = document.getElementsByTagName("td"); //获取所有关于td标签的值
    for (var i = 0; i < x.length; i++) {
        if (x[i].className == "k")//表示找到 了相应的标签
        {
            p = x[i - 1].innerHTML.indexOf("等级");
            if (p >= 0) //表示找到了相应的标签
            {
                if (x[i - 1].innerHTML.charAt(p + 4) == ')')//表示等级是个位数时
                    rate[count] = x[i - 1].innerHTML.charAt(p + 3);
                else
                    rate[count] = x[i - 1].innerHTML.substring(p + 3, p + 4); //表示等级是2位数时
            }
            else
                rate[count] = 0; //表示还没有建造
            count++
        }
        if (count > 5)
            break;
    }
    r_metal = rate[0]; r_stone = rate[1]; r_gas = rate[2]; r_solar = rate[3]; r_nuclear = rate[4];
}

    由于游戏里面各种参数都有计算公式的,根据公式就可以计算出一些量了,例如计算太阳能的实际需求量和目前的产量:
function getenergy() {
    var practical = 20 * parseInt(r_solar) * Math.pow(1.1, parseInt(r_solar)); //太阳能电厂每小时的发电量
    m_solar = practical.toString(); //转换成字符串
    practical = 0;
    practical += 10 * parseInt(r_metal) * Math.pow(1.1, parseInt(r_metal)); //金属耗能
    practical += 10 * parseInt(r_stone) * Math.pow(1.1, parseInt(r_stone)); //晶体耗能
    practical += 20 * parseInt(r_gas) * Math.pow(1.1, parseInt(r_gas)); //重氢耗能
    n_solar = practical.toString(); //转换成字符串
}

然后还可以求出建造当前建筑物所需要的资源数量:

function getNeedMS() {
    var num=0;
    num = 60 * Math.pow(1.5, parseInt(r_metal));
    n_metal[0] = num.toString();
    num = 15 * Math.pow(1.5, parseInt(r_metal));
    n_stone[0] = num.toString();
    
    num = 48 * Math.pow(1.6, parseInt(r_stone));
    n_metal[1] = num.toString();
    num = 24 * Math.pow(1.6, parseInt(r_stone));
    n_stone[1] = num.toString();
    
    num = 225 * Math.pow(1.5, parseInt(r_gas));
    n_metal[2] = num.toString();
    num = 75 * Math.pow(1.5, parseInt(r_gas));
    n_stone[2] = num.toString();
     
    num = 75 * Math.pow(1.5, parseInt(r_solar));
    n_metal[3] = num.toString();
    num = 30 * Math.pow(1.5, parseInt(r_solar));
    n_stone[3] = num.toString();
    
    num = 900 * Math.pow(1.8, parseInt(r_nuclear));
    n_metal[4] = num.toString();
    num = 360 * Math.pow(1.8, parseInt(r_nuclear));
    n_stone[4] = num.toString();
    
}

最后就要决定需要建造那个东西了,这是需要一个简单的决策,这是玩家自己设定的,例如我的策略是:

function decideOne() {
    if (parseInt(r_metal) - parseInt(r_stone) <= 2)//r_metal-r_stone<=2时,应该继续建造金属厂
        flag = 0; //表示金属
    else {
        if (parseInt(r_stone) - parseInt(r_gas) <= 3)//当r_stone-r_gas<=3时应该继续建造晶体厂
        {
            flag = 1; //表示建造晶体矿
        }
        else
            flag = 2; //表示建造重氢合成厂
    }
}

  选定好需要建造的东西后,就需要对当前资源的量和需要的量进行判断,然后具体决定建造那个:

 

//开始建造建筑物
function BUILD() {
    if (parseFloat(n_solar) > parseFloat(m_solar))//当太阳能不足时
    {
        if (parseFloat(m_metal) * 1000 > parseInt(n_metal[3]) && parseFloat(m_stone) * 1000 > parseInt(n_stone[3]))//表示建造资源足够时
            window.location = "?cmd=insert&building=4"; //建造太阳能电厂
        else
            return;
    }
    //当太阳能足够时
    else {

        flag = -1;
        decideOne(); //先选择一个目标
       // alert(flag.toString());
        switch (flag) {
            case 0: if (parseFloat(m_metal) * 1000 > parseInt(n_metal[0]) && parseFloat(m_stone) * 1000 > parseInt(n_stone[0]))//注意金属、晶体和重氢的实际量需要转换成浮点数并且乘1000
                    window.location = "?cmd=insert&building=1"; //金属资源够时建造
                break;
            case 1: if (parseFloat(m_metal) * 1000 > parseInt(n_metal[1]) && parseFloat(m_stone) * 1000 > parseInt(n_stone[1]))
                    window.location = "?cmd=insert&building=2"; //资源够时建造
                break;
            case 2: if (parseFloat(m_metal) * 1000 > parseInt(n_metal[2]) && parseFloat(m_stone) * 1000 > parseInt(n_stone[2]))
                    window.location = "?cmd=insert&building=3"; //资源够时建造
                break;
        }
    }
}

 这样外挂关于建筑物的部分就粗略完成了,大家可以参考该模式继续写科技研究,进攻防御等模块了。 只要网站一打开,脚本就会自动运行哦。 不动手,就可以当银河帝国里面的强者了哦!

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值