由于因特网和浏览器的广泛普及,网页应用程序的开发价值越来越大,它比任何一种开发语言和环境更容易让用户接触和使用到。 此时对于开发者而言,浏览器已经不仅仅是浏览信息的工具了,还是开发环境或者说是编译器吧。所以最近开始学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;
}
}
}
这样外挂关于建筑物的部分就粗略完成了,大家可以参考该模式继续写科技研究,进攻防御等模块了。 只要网站一打开,脚本就会自动运行哦。 不动手,就可以当银河帝国里面的强者了哦!