栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用JAVA实现对游戏《植物大战僵尸》游戏数据进行修改

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用JAVA实现对游戏《植物大战僵尸》游戏数据进行修改

文章目录
  • 前言
  • 一、概述
    • 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;


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修改无限阳光等功能,只要肯尝试,相信大家做得会比我更好!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/355855.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号