目前正在创建一个 MUD 游戏,这是我在 Java 中的第一个正式项目,我已经设置了知识和背景,我只需要开始实际的代码。我首先尝试创建一组这样的敌人:
// Name, HP, MP, ATK enemies[] = {"Weak Skeleton:", 100, 0, 100; "Blue Slime:", 50, 0, 25; "Novice Rogue Mage:", 25, 100, 0;}
但我显然不能像那样在 Java 中那样做。有没有一种方法可以在 Java 中为字符串分配一个值(有点像 python 中的键值对,但多个值分配给一个字符串),如果有的话,我有没有办法访问和操作分配给字符串?
最佳答案
最恰当的做法是让一个对象代表您拥有的值的组合;
public class Enemy {
private String name;
private Integer healthPoint;
private Integer manaPoint;
private Integer attackPower;
// getter, setter, constructors
// example constructor
public Enemy(String name, Integer hp, Integer mp, Integer ap) {
this.name = name;
this.healthPoint = hp;
this.manaPoint = mp;
this.attackPower = ap;
}
}
如果您愿意,可以用 map 表示;
List<Enemy> enemies = new ArrayList<>();
enemies.add(new Enemy("Weak Skeleton", 100, 0, 100));
enemies.add(new Enemy("Blue Slime", 50, 0, 25));
enemies.add(new Enemy("Novice Rogue Mage", 25, 100, 0));
Map<String, Enemy> enemyMap = enemies.stream().collect(Collectors.groupingBy(Enemy::getName));
因此,如果您需要访问和编辑任何值,很容易通过;
enemyMap.get("Weak Skeleton").setAttackPower(75);
或者添加一个新的敌人;
Enemy dragonBoss = new Enemy("Dragon Boss", 1000, 500, 250);
enemyMap.put(dragonBoss.getName(), dragonBoss);
不过,我建议使用一些枚举来识别每个敌人,尝试使用名称字符串访问并不是最佳做法。
public enum EnemyType {
WEAK_SKELETON("Weak Skeleton"), BLUE_SLIME("Blue Slime"), NVC_ROGUE_MAGE("Novice Rogue Mage");
private String name;
public String getName() {
return this.name;
}
private EnemyType (String name) {
this.name = name;
}
}
并将其用作 map 中的名称/键。
你最好使用 Lombok,如果你愿意,可以链接 setter,而且它减少了大量样板代码(getter、setter、构造函数)。检查@Data
与 @Accessors(chain = true)
关于java - 如何使用数组为 Java 中的单个字符串分配多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53274690/