当前,作为我的第一个Java认真项目,正在创建一个MUD游戏,我已经设置了知识和背景知识,我只需要开始实际的代码即可。我首先尝试创建像这样的敌人集:
// Name, HP, MP, ATK enemies[] = {"Weak Skeleton:", 100, 0, 100; "Blue Slime:", 50, 0, 25; "Novice Rogue Mage:", 25, 100, 0;}
但是我显然不能在Java中那样做。在Java中是否可以为字符串分配一个值(类似于python中的键/值对,但是将多个值分配给一个字符串),如果可以,我可以通过一种方式来访问和操作分配给字符串的整数值字符串?
答案 0 :(得分:2)
最合适的方法是让一个对象代表您所拥有的值的组合;
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;
}
}
然后根据需要在地图上显示;
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);
尽管,我建议使用一些枚举来识别每个敌人,但是尝试使用名称为String的访问不是最佳实践。
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;
}
}
并将其用作地图中的名称/键。
如果您愿意,可以选择Lombok,将其链接到设置程序,而且它会减少很多样板代码(getter,setters,构造函数)。用@Data
检查@Accessors(chain = true)
答案 1 :(得分:1)
您可以在Java中使用Map
。
Map<String,List<Integer>> enemies1 = new HashMap<>();
enemies1.put("str1",list1);
enemies1.put("str2",list2);
enemies1.put("str3",list3);
答案 2 :(得分:1)
两种方法:一种是仅使用数组。要在Java中获得“丢失”的语义,只需使用{month:regex(\\d{2}):range(1,12)}
。这行得通,但不是很好。
Object[]
如上所述,一个更好的主意是创建一个更语义化的类型,例如Object[][] enemies1 = {{"Weak Skeleton:", 100, 0, 100},
{"Blue Slime:", 50, 0, 25},
{"Novice Rogue Mage:", 25, 100, 0}};
并创建该类型的新对象。
Enemy
答案 3 :(得分:1)
在更改语言时,您需要更改方法以考虑数据。
您想要实现的目标,可以通过以下方式实现:
class Data{
//Choose your access-specified as per your need
public int hp, mp, atk;
public Data(int h, int m, int a)
{ hp = h; mp=m; atk=a;}
}
...
HashMap<String,Data> dataSet = new HashMap<>();
dataSet.put("val1", new Data(50,40,30));
...
Data d = dataSet.get("val1");
System.out.println("Value of HP is:" + d.hp);
...
答案 4 :(得分:0)
您可以创建代表敌人的课程
public class Enemy {
private int hp;
private int mp;
private int atk;
public Enemy(int hp, int mp, int atk) {
this.hp = hp;
this.mp = mp;
this.atk = atk;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getMp() {
return mp;
}
public void setMp(int mp) {
this.mp = mp;
}
public int getAtk() {
return atk;
}
public void setAtk(int atk) {
this.atk = atk;
}
}
然后像这样使用它:
HashMap<String, Enemy> map = new HashMap<>();
map.put("Weak Skeleton", new Enemy(100, 0, 100));
map.put("Blue Slime", new Enemy(50, 0, 25));