实现简易植物大战僵尸修改器的历程(2)
植物大战僵尸修改器(仅仅是关卡 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,自己用c#调用api写了一个植物大战僵尸修改器: 2,可以修改阳光值,金钱,花肥,杀虫剂,树肥,巧克力等属性: 3,自动拾取(冒险模式有效),无等待建造: 4,可以选择不同模式的跳关: 5,僵尸游 ...
- 植物大战僵尸 php,植物大战僵尸修改器使用方法 PHP __autoload函数(自动载入类文件)的使用方法...
这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例子: 复制代码 代码如下: class ClassA{ ...
- VB版 植物大战僵尸修改器
植物大战僵尸这个小游戏做的还真不错,我看到了几个版本的植物大战僵尸修改器,如C++版,C#版,所以就改写了一个VB版本的,以下是源码 '界面中有两个按钮,分别是cmdSunUnlimited(capt ...
- win10玩cf不能全屏_一些全屏游戏在Win10运行问题的解决(以植物大战僵尸+修改器为例)...
<植物大战僵尸>是一款十分经典的游戏,由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售. 问题解决 WindowsRegistryEditorVersion ...
- Qt|C/C++植物大战僵尸修改器(用户版)
此教程原理基于基础版,请阅读此篇教程的同学请先阅读基础版 链接如下:http://blog.csdn.net/qq78442761/article/details/54670630 用户版思路: 在基 ...
- **C1-1任务解析**——植物大战僵尸-修改游戏进度和金币(用户存档文件)
C1-1任务解析 植物大战僵尸-修改游戏进度和金币(用户存档文件) 一.软件安装准备 1.植物大战僵尸安装包 https://pan.baidu.com/s/1jEhpBlotLbUeCKTWJfOh ...
- python植物大战僵尸辅助器手机版_GitHub又放大招,Python版本的植物大战僵尸还能作弊玩!...
<植物大战僵尸>游戏它是一款极富策略性的小游戏,集成了即时战略.塔防御战和卡片收集等要素,玩家控制植物抵御僵尸的进攻,保护这片植物园.记得小编刚工作的时候抱着IPAD经常玩到深夜. 最近在 ...
- 初识数据编码,从 0 开始的进阶之路 ! ~ 内附:植物大战僵尸修改游戏存档、金币 演示~
学习目标: 任务一: 在code.org完成计算机像素相关内容练习,理解计算机二进制存储图片的底层原理. 任务二: 掌握使用进制编辑器. 学习内容: 任务一(用 0 和 1绘图): 1. 使用使用0和 ...
- CE实战:植物大战僵尸修改阳光并制作辅助(小试牛刀)
该教程为新手入门教程,大牛借过不要浪费时间 在学习CE基础篇内容时,我们一直是对CE提供给我们的Tutorial-i386.exe来完成练习的,是不是感觉没有啥意义呢,接下来的实战篇,将带领你把这些关 ...
- C1任务01植物大战僵尸修改
这里写目录标题 目录 挑战 说明 内容 一.任务实现工具: 游戏:植物大战僵尸中文版 十六进制编辑器:Hex Editor Neo 二.任务实现过程 1.修改关卡 2.修改金币数量 3.解锁所有模式 ...
最新文章
- 在开发游戏过程中遇到的一些错误(很基础的错误)
- java t没有缩进,Github上Java Eclipse项目的奇怪缩进
- [MATLAB学习笔记]view相机视角
- 【HDU - 4055】Number String(dp,思维)
- java代码隐藏面消除算法,java常面的几种排序算法
- matlab模拟砂轮形貌,基于多颗磨粒随机分布的虚拟砂轮建模及磨削力预测
- android怎样判断插入数据是否成功_Android 端 V1/V2/V3 签名的原理
- CVPR学习(五):CVPR2019-人体姿态
- 95后公务员晒3004元工资引群嘲:安逸过了头,人生也就止步了
- ADI交替差分隐格式求解二维热传导方程
- 计算机字体管理软件,字体管理软件有哪些?字体管理软件推荐
- 《圈子圈套2》—— 读后总结
- qpython3l下载_QPython3下载
- 2013武汉住房公积金新政详解
- URL中文参数错误解决方法
- 【Codeforces】2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015) A Adjoin the Netwo
- 中国白领最苦累的六大城市
- 显卡掉驱动 不用重启
- 外国用户和国内用户看待浏览器的问题
- 敏涵控股集团董事长刘敏:品牌敏涵 用心做企业
热门文章
- websocket与http优缺点
- 为什么美篇打不开显示服务器错误,评论为什么打不开
- 自学Python+Selenium自动化测试
- 判断矩形相似C语言,C++判断矩形相交的方法
- mysql 对象名无效_数据库 表 对象名无效
- ok6410linux开发环境搭建,OK-6410的裸机开发环境配置
- 再次风靡春节的《熊出没》,究竟下了哪些硬功夫?
- 计算机组成原理:MIPS
- 前后端利用accessToken与refreshToken无感刷新
- \r,\n,\r\n的区别