我正在用java开发一个基于文本的冒险游戏,我试图找出一种方法来检查玩家拥有什么武器,并适当地设置他们的伤害输出。
以下是我目前的设置:
项目对象:
Item (String name, String type, String description, String location)
("Assault Rifle", "rifle", "A rifle that goes pew pew.", "armory")
玩家清单:
HashMap<String, Item> inventory = new HashMap<String, Item>()
现在,我可以使用if语句获取对象的名称,并为其设置伤害修饰符:
if (player.getInventory().containsKey("Assault Rifle")) {
player.setMaxAttackDmg(55);
player.setWeaponModifier(2);
}
我想做的是匹配项目类型,而不是名称。我假设我需要某种循环来遍历播放器的清单,但是我不知道如何匹配hashmap值,因为它是item类型的对象。所以它会有这样的东西:
for (item in inventory) {
if (item.getType().equals("rifle")) {
player.setMaxAttackDmg(55);
player.setWeaponModifier(2);
}
有没有办法,或者更好的办法?
3条答案
按热度按时间2g32fytz1#
我会做一个
Weapon
Enum
具有以下特性maxAttackDmg
. 然后您可以简单地获取枚举的属性,而不知道它是什么示例。如果武器需要有复杂的行为,并且不仅仅是数据类,那么这些应该是常规类,而不是枚举。kd3sttzy2#
您可以遍历Map的值来检索项,然后应用测试:
这当然不是最面向对象的方法;)但它做你想做的。
您可能需要查看map类的其他访问器,例如
keySet
以及entrySet
查看库存的其他方法。一旦您有了工作,您可能还想研究java8流,它以一种更加优雅和可读的方式支持这种功能。
7xzttuei3#
你已经知道如何使用循环,你的方法是有效的。
从Map中检索此值的更好方法是使用流并筛选出第一次出现的值,然后在玩家的资源清册中包含此值时执行操作。
例如:
此外,我建议您以更面向对象的方式重构代码,例如,根据您提供的代码片段,您可以创建一个名为武器的项目子类,并有一个方法亲自装备您的武器并增加您的属性,例如: