基于C ++文本的RPG库存

时间:2012-09-17 00:24:03

标签: c++ inventory

好的,现在我已经完成了基于文本的RPG的骨架。

你知道平常: 健康 怪物 地点 金 攻击 等

但是,我无法解决的一件事是类如何工作+使用多个.cpp文件来分割游戏,以便更容易管理。

我想我的问题是,如何为“随机武器”创建库存(如伪随机)+有没有人有任何解释如何使用多个.cpp文件来保存代码的单独部分。 / p>

请记住,我已经阅读了多个描述和操作方法,但大多数都让我头疼或者只是rubbis并且没有解释任何内容。

如果您愿意,我可以将我的代码复制并粘贴到粘贴框中供您查看,因为我知道它可以随时进行改进和修改。

1 个答案:

答案 0 :(得分:3)

我认为你的问题过于宽泛。但无论如何我会提出一个建议。

据推测,作为一名RPG,你可以找到许多物品。有些是武器,有些是盔甲,有些有其他价值,有些是无用的。如果我接近这个,我可能会选择一个班来代表他们,并称之为Item。我甚至可以从中推导出类型:WeaponArmourTrinket,...

我还会以某种方式在程序中注册我的所有武器。假设我有一个简单的构造函数......

Weapon::Weapon( const char *name, int cost, int minlevel, int damage, int speed );

现在,这个武器注册/存储库将是我觉得合理的任何类型的容器。它可能只是一个C风格的数组,vector,或者它可能是map或允许名称查找的东西。它甚至可能是你自己创造的一个可以做其他好事的课程。所以,让我们这样做(在内部你可能只使用vector)。

启动时,您需要注册所有商品。让我们假设您在注册表中为不同的项类型保留单独的列表。所以你可能有一个Add武器功能和另一个武器功能......

void Repository::Add( Weapon &weapon )
{
    weapons.push_back(weapon);
}

您的初始化可能就是这样。

Repository repository;   // A global somewhere, maybe...

repository.Add( Weapon( "Plastic Spork", 1, 1, 1, 10 ) );
repository.Add( Weapon( "M. C. Hammer", 5, 5, 5, 15 ) );
repository.Add( Weapon( "Stroustrup", 1000, 100, 0x7fffffff, 1 ) );
// etc...

现在您的存储库中有所有武器(和其他项目)。选择一堆随机武器现在非常容易。

Weapon Repository::RollWeapon( int minlevel )
{
    //...
}

也就是说,如果我正确理解你的问题。也许你想要随机统计数据生成武器。有很多方法可以做到这一点,但您可能需要考虑在Weapon(或确实Item)上设置一个函数,该函数随机化/扰乱已注册项目的统计信息。

virtual void Item::RandomizeStats();

此函数的武器版本可能只取默认damage值并将其改变+/- 20%。在这种情况下,它可能很简单:

virtual void Weapon::RandomizeStats()
{
    int amount = damage / 5;
    damage += (rand() % (amount * 2 + 1)) - amount;
}

你甚至可以将它构建到你的存储库中:

Weapon Repository::RollRandomizedWeapon( int minlevel )
{
    Weapon w = RollWeapon( minlevel );
    w.RandomizeStats();
    return w;
}

无论如何,希望这个答案中的某些内容对你有用。我有一点猜想......