文章目錄
- 前言
- 一、概述
- 1、游戲背景
- 2、游戲圖片
- 3、修改思路
- 4、工具準備
- 二、效果呈現
- 1、修改關卡
- 2、修改游戲幣
- 三、java代碼
- 1、修改關卡類
- (1)匯入包
- (2)方法
- 2、修改游戲幣類
- (1)匯入包
- (2)方法
- 3、主方法
- 四、總結
前言
上篇文章中我們通過二進制編輯器Hex Editor Neo實作通過修改游戲存盤資料已到達修改游戲關卡和游戲中銀幣的功能,本章節將嘗試使用Java程式來編輯游戲在本地存盤的資料,
請參考文章:《植物大戰僵尸》游戲資料修改
一、概述
1、游戲背景
《植物大戰僵尸》是一款策略類游戲, 游戲分為 僵尸 與 植物 兩方,僵尸將入侵房屋,而玩家則需要種上必要的植物來攻擊,抑或抵擋入侵的僵尸,
此游戲內僵尸的種類有很多,面對不同種類的僵尸,玩家需要選擇不同功能、不同攻擊性、不同防御性的植物,以消滅所有入侵的僵尸,保護自己,
一個看似簡單實則極富策略性的小游戲.可怕的 僵尸 即將入侵你的家庭,你唯一的防御方式就是您栽種的 植物 ,
一款新奇的游戲即將登陸PC平臺,名稱為《 植物大戰僵尸 》, 武裝您的49種植物,切換他們不同的功能,諸如 櫻桃炸彈 或強悍的 食人花
,更加快速有效的將僵尸阻擋在入侵的道路上,
不同的敵人,不同的玩法構成五種不同的游戲模式,加之夕陽、屋頂、濃霧以及泳池之類的障礙增加了其挑戰性 奇特的游戲樂趣永無止境,
2、游戲圖片
游戲首頁
3、修改思路
上篇文章中我們用二進制編輯器對游戲資料進行修改,這里我們不妨用java將資料檔案dat讀出來,再用DataOutputStream將需要改動的資料寫入到指定的基本輸出流中,
4、工具準備
使用工具:IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains
游戲鏈接:植物大戰僵尸-提取碼:Huah
二、效果呈現
1、修改關卡

我們用java將關卡修改至5-1關,我們打卡游戲看看:
我們成功將游戲修改至5-1關!
2、修改游戲幣

我們將游戲幣修改至100000
我們看到游戲幣已增加到100000了
三、java代碼
1、修改關卡類
(1)匯入包
import java.io.DataOutputStream;//資料輸出流
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
(2)方法
public void level() {
String file = "C:\\ProgramData\\PopCap Games\\PlantsVsZombies\\userdata\\user1.dat";//游戲資料存盤路徑
byte[] data = new byte[1024];
Scanner sc = new Scanner(System.in);
System.out.println("請輸入修改的關卡(1-5)");
int big = sc.nextInt();
System.out.println("請輸入該關卡的小節(1-10)");
int small = sc.nextInt();
while (big < 1 || big > 5 || small < 1 || small > 10) {
System.out.println("您的輸入有誤");
System.out.println("請重新輸入修改的關卡(1-5)");
big = sc.nextInt();
System.out.println("請重新輸入該關卡的小節(1-10)");
small = sc.nextInt();
}
byte trans = (byte) ((big - 1) * 10 + small);//將輸入的關卡轉換為16進制存盤到第04列
data[4] = trans;
System.out.println("成功修改至" + big + "-" + small + "關!");
try {
DataOutputStream dat = new DataOutputStream(new FileOutputStream(file));
try {
dat.write(data);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
2、修改游戲幣類
(1)匯入包
import java.io.DataOutputStream;//資料輸出流
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
(2)方法
public class GameCurrency {
public void silver(){
String file = "C:\\ProgramData\\PopCap Games\\PlantsVsZombies\\userdata\\user1.dat";
byte[] data = new byte[1024];
Scanner sc = new Scanner(System.in);
System.out.println("請輸入您需要修改至多少銀幣");
int money = sc.nextInt() / 10;
while ( money < 0 || money > 999999999){
System.out.println("您的輸入有誤!");
System.out.println("請重新輸入您需要修改至修改至多少銀幣");
money = sc.nextInt();
}
for (int i = 8; i < 12; i++) {//將修改金幣的數量按16進制存盤到08-11列
data[i] = (byte) (money % 256);
money /= 256;
}
System.out.println("修改成功!");
try {
DataOutputStream dat = new DataOutputStream(new FileOutputStream(file));
try {
dat.write(data);
dat.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
3、主方法
import java.util.Scanner;
/**
* @author Huahua
* @version 1.0
*/
public class Application {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
CheckPoint ch = new CheckPoint();/*將關卡類實體化*/
GameCurrency ga = new GameCurrency();/*將游戲幣類實體化*/
System.out.println(" 歡迎修改植物大戰僵尸游戲資料!");
System.out.println();
loop : while(true){
System.out.println(" PlantsVsZombies @Auther:Huahua");
System.out.println("===================================================");
System.out.println("************** 請輸入1修改關卡 ****************");
System.out.println("************** 請輸入2修改游戲幣 ***************");
System.out.println("************** 輸入exit退出程式 ****************");
System.out.println("===================================================");
System.out.print(":");
String in = sc.nextLine();
switch (in){
case"1":
/*修改關卡*/
ch.level();
break;
case"2":
/*修改游戲幣*/
ga.silver();
break;
case"exit":
break loop;
default:
System.out.println("您的輸入有誤請重新輸入");
}
}
System.out.println("感謝您的使用!");
}
}
四、總結
本次通過java實作修改游戲資料還是比較簡單的,這邊只介紹了修改關卡和游戲幣,其實還能由更多的功能,大家可以參考我上篇文章,再試試通過java修改無限陽光等功能,只要肯嘗試,相信大家做得會比我更好!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340556.html
標籤:其他




