“我遇到的难题是如何将一个 Pokemon(我们以 Pikachu 为例)分配给玩家(或我正在战斗的敌人)并编辑那个 Pokemon 的状态、等级、经验等。我不想改变游戏中所有 Pikachu 的等级,只想改变特定的 Pikachu 对于玩家和敌人而言。你明白我的意思吗?”
好吧,你需要在某个地方有一个 Pokemon 类,其中包含这些字段:
class PStats {
int defense = 1;
int attack = 1;
}
class Pokemon {
int level = 1;
long xp = 0;
PStats stats = new PStats();
}
然后,您需要决定Pokemon的类型和潜在属性,无论是将Pokemon作为超类和子类化还是具有这些字段并从Java外部加载它们。
然后,您的玩家将拥有一个ArrayList,您将访问该列表。
如果您希望玩家能够保存游戏并加载他们的Pokemon,则必须发明一种简单的文件格式,并每次保存/加载。如果您想保存混合类型而不必自己进行所有字节格式化,则DataOutputStream和DataInputStream可能适用于此。
例如,您可能有一个文件结构看起来像这样:
header, UTF (8 bytes) [FILE]
int, 4 bytes [number of Pokemon]
1st Pokemon chunk id [PKMN]
int, 4 bytes [level]
long, 8 bytes [experience]
[other fields...]
2nd Pokemon chunk id [PKMN]
[level]
and so on...
您可以像这样创建一个简单的UTF头:
static final char[] PKMN {
'P', 'K', 'M', 'N'
};
尽管通常标题/字段 ID 是 ASCII,您可以使用字节来实现:
static final byte[] PKMN {
0x50, 0x4B, 0x4D, 0x4E
};
文件头可以自定义,以便识别您的文件,不要依赖于文件扩展名。
当您想保存文件时,只需遍历数组并将字段写入文件即可。然后,当您想从文件加载时,将具有以下基本结构:
while () {
Pokemon pToAdd = new Pokemon();
pToAdd.level = dis.readInt();
pToAdd.xp = dis.readLong();
playerPokemon.add(pToAdd);
}
重新创建玩家拥有的一切,通过根据文件指示创建对象。
如果您采用这种方式,我建议您在纸上勾画出文件结构,这样在编写IO时就可以把它放在面前。