好的,所以我浏览了这个网站以及其他一些网站(但如果有类似问题的链接,请告诉我),我会了解库存系统应该如何运作的所有细节。我的问题来自一个非常广泛的,一般性的观点。这仅适用于控制台文本RPG。我应该如何构建项目的类?到目前为止我的想法是:
// Item.h
class Item {
public:
int Id;
std::string Name;
bool CanUse, CanEquip;
virtual void Use();
}
class Weapon: public Item {
public:
int Attack, Defense, Health; // stat changes when equipped
void Use() { std::cout << "Can't use\n"; }
}
class Sword: public Weapon {
// constructor defining stat changes for a sword
// and to define Name = "Sword"
}
那么我应该继承那么多次,还是我可以做的更容易?最终,我会有其他各种各样的武器,但在我看来,从Weapon
继承它们比我可能做的其他方式更加麻烦?
也许我可以在Weapon
中定义一个枚举或结构来定义每种类型的武器?如果我像上面的代码一样,我可能会将virtual void Use();
函数移动到类class Consumables: public Item
中,因为这些应该是唯一“可用”的东西。
提前感谢愿意提供帮助的任何人。我通过书籍和在线教程自学了所有我知道的东西,所以我很缺乏经验:)
答案 0 :(得分:0)
所以我最终决定这样做:
enum class ItemType {
Sword,
Axe,
Health_potion,
Helmet,
Random
}
Item CreateItem(ItemType Names) {
Item item;
if (Names == ItemType::Random)
{
Names = (ItemType)Rand0toN1(4); // just a function spitting
} // out a rand number 0 to N-1
switch (Names)
{
case ItemType::Sword:
item = Item("Sword", 5, 0, 0, 0, false, true, 6);
break; // constructor Item(Name, attack, defense, health
case ItemType::Axe: // maxhealth, canUse, canEquip, slot)
item = Item("Axe", 3, 1, 0, 0, false, true, 6);
break;
case ItemType::Helmet:
item = Item("Helmet", 0, 3, 0, 1, false, true, 4);
break;
case ItemType::Health_potion:
item = Item("Health Potion", 0, 7, 0, 0, true, false, 0);
break;
default:
break;
}
return item;
}
做这样的事情有什么不对吗?我没有拥有所有这些继承的类,而是拥有了Item类。