植物大战僵尸修改器(仅仅是关卡 Java实现)

    • 第一步 、读取数据文件
  • 第二步 修改集合元素
    • 第三步 导入数据到数据文件
    • Java代码 没有加判断

1、Java写一个修改器 通过翻阅别人博文发现 我发现我的上次使用Java写的半成品(也不算 )的设计理念本身就有问题 首先我们已经通过hex 编辑器 已经知道了修改的位置 而程序的实现是要求简单高效 我上次 竟然想通过比较两个文件的不同来确定操作位置并修改,虽然并没有成功。 但如果成功了 这样的操作无疑是费时且效率低下的 ,此次实训使我认识了: 程序设计要偏向于高效率,低成本 才能使你的开发更快乐

2、前面我们已经通过hexeditor 16进制编辑器的方式来修改植物大战僵尸 ,然后Java已经学到了io流 可以对文件进行一些基本的操作 所以想到了可以用Java写一个简易版本的植物大战僵尸修改器

3、实现思路:首先我们利用io流读取文件的操作 将数据读取到集合中 我们采用了 ArrayList 集合 因为它可以按照顺序来存放元素 并且可以存放相同值 能够很好的修改数据

第一步 、读取数据文件

io流的知识 我以前的博客虽然写的不好但是还能将就看~~~

package Tool;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class ReadDataFile {public static List<Integer> arrayList = new ArrayList<>();//数据保存在这一个集合中 共享这个集合 增加了修改的方便性private static String path = "C:\\ProgramData\\PopCap Games\\PlantsVsZombies\\userdata\\user1.dat";public static void acquireGameData(){FileInputStream in = null;try {in = new FileInputStream(path);int i = 0;while ((i = in.read()) != -1 ){arrayList.add(i);//存取数据变量。}System.out.println(arrayList);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}}
}
//我们首先测试一下这样的代码
//以下为输出结果

第二步 修改集合元素

之后我们只要修改集合中的元素 再将集合中的元素写入植物大战僵尸的user1.dat 文件中就可以完成这个修改操作 我们测试一下修改集合元素的操作

package Tool;import java.util.List;
import java.util.Scanner;public class ChangeData {int checkpointInformation;//已经知道了关卡的修改位置 只要修改对应位置的数值即可public  void change(){System.out.println("请输入要修改关卡  10关1大关 例如 31 代表第 2 - 1 关");Scanner sc = new Scanner(System.in);checkpointInformation = sc.nextInt();ReadDataFile.arrayList.set(4,checkpointInformation);}
}

我们发现已经修改成功了

第三步 导入数据到数据文件

首先我们试一下 如果将集合现在直接写入数据文件会发生什么情况。

出现了类转换异常

package Tool;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Scanner;public class ChangeData {int checkpointInformation;//已经知道了关卡的修改位置 只要修改对应位置的数值即可public  void change() throws FileNotFoundException {System.out.println("请输入要修改关卡  10关1大关 例如 31 代表第 2 - 1 关");Scanner sc = new Scanner(System.in);checkpointInformation = sc.nextInt();ReadDataFile.arrayList.set(4,checkpointInformation);FileOutputStream fileOutputStream = new FileOutputStream(ReadDataFile.path);ListIterator it = ReadDataFile.arrayList.listIterator();while (it.hasNext()){try {fileOutputStream.write((byte)it.next());} catch (IOException e) {e.printStackTrace();}finally {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}}
}
//这是出现异常的代码

然而当我再次运行时

我的数据文件已经被损坏了

我们将原来文件删除 重新运行一下游戏 生成新的数据文件 改变我们的思路试试

使用包装类的方法是否可行?

我们将语句注释掉换为下面的套娃转换法

 //  fileOutputStream.write((Byte)it.next());fileOutputStream.write(Integer.parseInt(Integer.toHexString((Integer) it.next())));

好~ ~ 又报错了 看来这样不可行

      byte[] b = Integer.toHexString(it.next()).getBytes();fileOutputStream.write(b);
// 修改成功

但又出现了这样的问题、没有拼接的结果 有踩坑了 应该拼接。

拼接之后16进制文件可以正常打开了但是关卡并没有修改成功。

我想应该是拼接在源文件后面了 我又加了个文件清除的操作。

他也是终于没报错 我们看一下结果

永远在踩坑的过程中。。

最后翻阅博客找到了一个DataOutPutStreatm流 是我以前没有接触过的 代码放在下面了

这里只做了关卡的修改 其它方法类似。。。

Java代码 没有加判断

TOOL包下

package Tool;import java.io.*;
import java.util.ListIterator;
import java.util.Scanner;public class ChangeData {int checkpointInformation;//已经知道了关卡的修改位置 只要修改对应位置的数值即可public void change() throws FileNotFoundException {System.out.println("请输入要修改关卡  10关1大关 例如 31 代表第 4 - 1 关");Scanner sc = new Scanner(System.in);checkpointInformation = sc.nextInt();if (checkpointInformation > 0 && checkpointInformation <= 40 )ReadDataFile.arrayList.set(4, checkpointInformation);DataOutputStream outputStream = null;FileClear.clear();ListIterator<Integer> it = ReadDataFile.arrayList.listIterator();try {// outputStream = new FileOutputStream(ReadDataFile.path);
//                   fileOutputStream.write((Byte)it.next());
//                byte[] b = Integer.toHexString(it.next()).getBytes();
//                fileOutputStream.write(b);outputStream  = new DataOutputStream(new FileOutputStream(ReadDataFile.path));for (Integer integer : ReadDataFile.arrayList) {outputStream.write(integer);outputStream.flush();}} catch (IOException e) {e.printStackTrace();} finally {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("修改关卡成功!");}}package Tool;import java.io.*;public class FileClear {public static void clear(){FileWriter out = null;FileInputStream in = null;try {in = new FileInputStream(ReadDataFile.path);out = new FileWriter(ReadDataFile.path);int i = 0 ;while ((i = in.read()) != -1){out.write("");}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {in.close();} catch (IOException e) {e.printStackTrace();}try {out.close();} catch (IOException e) {e.printStackTrace();}}}
}
package Tool;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class ReadDataFile {public static List<Integer> arrayList = new ArrayList<>();//数据保存在这一个集合中 共享这个集合 增加了修改的方便性public static String path = "C:\\ProgramData\\PopCap Games\\PlantsVsZombies\\userdata\\user1.dat";public static void acquireGameData(){FileInputStream in = null;try {in = new FileInputStream(path);int i = 0;while ((i = in.read()) != -1 ){arrayList.add(i);//存取数据变量。}System.out.println(arrayList);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}}
}

小测一下

package Test;import Tool.ChangeData;
import Tool.ReadDataFile;import java.io.FileNotFoundException;public class Test1 {public static void main(String[] args) throws FileNotFoundException {ReadDataFile.acquireGameData();ChangeData c = new ChangeData();c.change();}
}

此时进入游戏

我们发现已经修改成功为相应的关卡

在测试一下


实现简易植物大战僵尸修改器的历程(2)相关推荐

  1. 汉化版植物大战僵尸修改器

    1,自己用c#调用api写了一个植物大战僵尸修改器: 2,可以修改阳光值,金钱,花肥,杀虫剂,树肥,巧克力等属性: 3,自动拾取(冒险模式有效),无等待建造: 4,可以选择不同模式的跳关: 5,僵尸游 ...

  2. 植物大战僵尸 php,植物大战僵尸修改器使用方法 PHP __autoload函数(自动载入类文件)的使用方法...

    这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例子: 复制代码 代码如下: class ClassA{ ...

  3. VB版 植物大战僵尸修改器

    植物大战僵尸这个小游戏做的还真不错,我看到了几个版本的植物大战僵尸修改器,如C++版,C#版,所以就改写了一个VB版本的,以下是源码 '界面中有两个按钮,分别是cmdSunUnlimited(capt ...

  4. win10玩cf不能全屏_一些全屏游戏在Win10运行问题的解决(以植物大战僵尸+修改器为例)...

    <植物大战僵尸>是一款十分经典的游戏,由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售. 问题解决 WindowsRegistryEditorVersion ...

  5. Qt|C/C++植物大战僵尸修改器(用户版)

    此教程原理基于基础版,请阅读此篇教程的同学请先阅读基础版 链接如下:http://blog.csdn.net/qq78442761/article/details/54670630 用户版思路: 在基 ...

  6. **C1-1任务解析**——植物大战僵尸-修改游戏进度和金币(用户存档文件)

    C1-1任务解析 植物大战僵尸-修改游戏进度和金币(用户存档文件) 一.软件安装准备 1.植物大战僵尸安装包 https://pan.baidu.com/s/1jEhpBlotLbUeCKTWJfOh ...

  7. python植物大战僵尸辅助器手机版_GitHub又放大招,Python版本的植物大战僵尸还能作弊玩!...

    <植物大战僵尸>游戏它是一款极富策略性的小游戏,集成了即时战略.塔防御战和卡片收集等要素,玩家控制植物抵御僵尸的进攻,保护这片植物园.记得小编刚工作的时候抱着IPAD经常玩到深夜. 最近在 ...

  8. 初识数据编码,从 0 开始的进阶之路 ! ~ 内附:植物大战僵尸修改游戏存档、金币 演示~

    学习目标: 任务一: 在code.org完成计算机像素相关内容练习,理解计算机二进制存储图片的底层原理. 任务二: 掌握使用进制编辑器. 学习内容: 任务一(用 0 和 1绘图): 1. 使用使用0和 ...

  9. CE实战:植物大战僵尸修改阳光并制作辅助(小试牛刀)

    该教程为新手入门教程,大牛借过不要浪费时间 在学习CE基础篇内容时,我们一直是对CE提供给我们的Tutorial-i386.exe来完成练习的,是不是感觉没有啥意义呢,接下来的实战篇,将带领你把这些关 ...

  10. C1任务01植物大战僵尸修改

    这里写目录标题 目录 挑战 说明 内容 一.任务实现工具: 游戏:植物大战僵尸中文版 十六进制编辑器:Hex Editor Neo 二.任务实现过程 1.修改关卡 2.修改金币数量 3.解锁所有模式 ...

最新文章

  1. 在开发游戏过程中遇到的一些错误(很基础的错误)
  2. java t没有缩进,Github上Java Eclipse项目的奇怪缩进
  3. [MATLAB学习笔记]view相机视角
  4. 【HDU - 4055】Number String(dp,思维)
  5. java代码隐藏面消除算法,java常面的几种排序算法
  6. matlab模拟砂轮形貌,基于多颗磨粒随机分布的虚拟砂轮建模及磨削力预测
  7. android怎样判断插入数据是否成功_Android 端 V1/V2/V3 签名的原理
  8. CVPR学习(五):CVPR2019-人体姿态
  9. 95后公务员晒3004元工资引群嘲:安逸过了头,人生也就止步了
  10. ADI交替差分隐格式求解二维热传导方程
  11. 计算机字体管理软件,字体管理软件有哪些?字体管理软件推荐
  12. 《圈子圈套2》—— 读后总结
  13. qpython3l下载_QPython3下载
  14. 2013武汉住房公积金新政详解
  15. URL中文参数错误解决方法
  16. 【Codeforces】2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015) A Adjoin the Netwo
  17. 中国白领最苦累的六大城市
  18. 显卡掉驱动 不用重启
  19. 外国用户和国内用户看待浏览器的问题
  20. 敏涵控股集团董事长刘敏:品牌敏涵 用心做企业

热门文章

  1. websocket与http优缺点
  2. 为什么美篇打不开显示服务器错误,评论为什么打不开
  3. 自学Python+Selenium自动化测试
  4. 判断矩形相似C语言,C++判断矩形相交的方法
  5. mysql 对象名无效_数据库 表 对象名无效
  6. ok6410linux开发环境搭建,OK-6410的裸机开发环境配置
  7. 再次风靡春节的《熊出没》,究竟下了哪些硬功夫?
  8. 计算机组成原理:MIPS
  9. 前后端利用accessToken与refreshToken无感刷新
  10. \r,\n,\r\n的区别