站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题手机游戏修改之单机版修改

手机游戏修改之单机版修改

摘要: 手机游戏修改之单机版修改
<tr><td>

[本文章最后由 rocks 在2006-06-16 00:06:59编辑过]

http:///tech/article2118.html
[转载于纸墨聊斋]
[]

将本需联网下载内容的手机游戏改为单机是个节约GPRS流量费以及为部分神州行用户考虑的好方法。目前游戏通过网络下载资源主要是2种:
1、图片资源
主要是一次性的图片资源,下载完毕后就不需要再次下载了

2、场景文件
类似仙剑这种游戏进行到一定的时候通过下载场景文件来将游戏内容灌输入程序中。

无论哪种,所用的无非都是HTTPCONNECTION的方法,不过在细节上,有很多不同,这里就不多说了。

基本原理:
将需要通过HTTP下载的文件下载后拖入jar文件包内,并且修改其下载路径。
例如我们把原本需要联网下载的img.dat先下载后拖入jar包根目录,然后将其原本的下载路径:http://xx.xxx.xxx.xxx/img.dat更改为file:///img.dat就行了。

OK,这是最基本的原理,但不是说每个游戏都是这么简单的。基本上这样做能够成功的游戏很少,《江湖侠情》(下载场景类)这样做就可以成功了。

有的游戏则十分另类,例如《蝴蝶迷案》,他的程序在载入图片时会自动搜索根目录下是否有此文件,如果有则就自动载入,这样的游戏通过上面的办法也可以轻易搞定。

游戏有验证:
大多数游戏还是会在游戏中进行验证,不过关的坚决不会通过。这样做是为了防止程序出错。这个时候我们不得不分析原代码进行进一步修改。以《古玩收藏家2》为例:

//这一段是图片下载的路径,我们可以用IE敲入以下2个地址直接下载到图片资源。程序判定在下载成功时ch=1,地址错误则ch=2,内存空间不够则ch=3
if(ch == 0)
try
{
_mthif("http://www.ptwchina.com/guwan2/nokia40/10.png";);
_mthif("http://www.ptwchina.com/guwan2/nokia40/15.png";);
ch = 1;
}
catch(IOException ioexception)
{
ch = 2;
}
catch(RecordStoreException recordstoreexception)
{
ch = 3;
}
[]break;

//这一段是HTTP下载操作,以上这2段是联网游戏中常见的部分
private void _mthif(String s1)
throws IOException, RecordStoreException
{
HttpConnection httpconnection;
InputStream inputstream;
httpconnection = null;
inputstream = null;
httpconnection = (HttpConnection)Connector.open(s1, 1, true);//连接URL地址s1,方法为GET,true表示下载完成后断开链接)
httpconnection.setRequestMethod("GET");
if(httpconnection.getResponseCode() != 200)//getResponseCode() 表示返回结果,200表示正常。这里如果不是200(非正常)则抛出异常
throw new IOException();

使用基本的修改路径的方法,我们发现游戏仍然报告下载失败。于是我们要继续分析代码,看看其对PNG是如何操作的,我们发现以下代码:
av = new Image[i1];
[]try
{
for(j1 = 0; j1 < i1; j1++)
if(j1 != 10 && j1 != 15 && j1 != 14 && j1 != 13 && j1 != 12 && j1 != 6 && j1 != 7 && j1 != 8 && j1 != 9)
av[j1] = Image.createImage("/" + j1 + ".png");

}
[]原本联网需要下载的图片是10.png和15.png,在这里,他的含义是只要不是6-15.png的图象文件就可以被创建,虽然还不太明白他为什么要这么做处理,但是我们正好利用一下,于是将10和15这2个数字改掉,改为大于17的就可以了(游戏本身PNG命名为1-17.png)。目的在于让他把10.png和15.png载入并创建。

好了,图片是正常载入了,但是这个异常还是可能被抛出,那么我们就把:
catch(IOException ioexception)
{
ch = 2;
}
这里的ch = 2 改为ch = 1,表示读入正常来骗过程序。
把修改后的class文件替换掉原文件,整个游戏就不需要联网来下载图片了。

联网修改单机还存在诸多难题,尤其对于S40V1来讲容量的限制是最致命的。和修改按键一样,不同的游戏根据其代码有着不同的修改方法,没有一个统一的定论。
http:///tech/article2118.html
</td></tr></table></td> </tr> <tr> <td background="/pic/split.gif" height=1></td> </tr> <tr> <td class="tdMargin1">
↑返回目录
前一篇: 手机游戏修改(1)概述
后一篇: 二重构造