修改植物大战僵尸游戏存档(Java实现版)

目录

一、实现思路

二、实现过程

1. 创建Java类

2. 实现读取数据方法

3. 实现修改数据方法

3.1. 修改关卡数

         3.2. 修改金币数

3.3. 解锁所有模式

3.4 解决输入错误

4. 实现写入数据方法

 三、实验测试

 四、完整代码


上次任务已经使用Hex Editor Neo工具成功修改游戏存档,具体实现探索和步骤请参考:修改植物大战僵尸游戏存档——跳关并快速实现财富自由,本次任务目的将使用java代码替换工具,实现同样的修改功能。

一、实现思路

  1. 读取数据:修改的user1.dat文件的本地路径已知,使用IO流知识读取数据并存放在程序中。
  2. 修改数据:利用控制台输入,获取用户修改意向,并根据任务的不同采取不同的修改策略。
  3. 写入数据:将修改后的数据重新写入到原文件中。

二、实现过程

1. 创建Java类

按图示创建Java工程。

 之后在创建好的Java工程src目录下创建Java类。

输入类名称就可以进行敲代码啦。如下图,定义两个全局变量,分别是可变数组userIndex,用来存放.dat文件下读取出来的数据、.dat所在的本地路径。并设为static类型,可以不用创建类对象就能使用。

2. 实现读取数据方法

有两种读取文件方式,读取文本形式使用Reader,读取二进制数据使用InputStreamFileInputStream是InputStream的一个子类。顾名思义,FileInputStream就是从文件流中读取数据。BufferedInputStream继承于FilterInputStream,提供缓冲输入流功能。缓冲输入流相对于普通输入流的优势是,它提供了一个缓冲数组,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源(譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容部分或全部返回给用户。由于从缓冲区里读取数据远比直接从物理数据源读取速度快。代码如下:

//    从二进制文件中读取数据(读取到的数据从十六进制数据自动转成十进制)
    public static void readData(){
        try
        {
            FileInputStream fis= new FileInputStream(fileName);
            BufferedInputStream br = new BufferedInputStream(fis);
            int record = -1;
            while((record = br.read()) != -1)
            {
                userIndex.add(record);  //将读到的数据添加到可变数组中(全局变量)
            }
            System.out.println("从文档中读取第一行数据显示(十进制):");
            for(int i=0; i<16; i++){
                System.out.print(userIndex.get(i) + " ");
            }
            System.out.println();
        }
        catch(Exception e)
        {
            System.out.print(e.toString());
        }
    }

 3. 实现修改数据方法

修改数据思路是:主方法中先用Scanner获取用户输入的任务类型,将用户输入数据以参数方式传给changeData方法,在方法内部判断,根据类型采取不同的修改方式。具体措施如下:

3.1. 修改关卡数<

  • 50
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值