2

好的,现在我有一个基于文本的 rpg 的骨架。

你知道通常:健康怪物位置黄金攻击等

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

我想我的问题是,如何为“随机武器”(如伪随机)创建一个清单 + 有没有人解释如何将多个 .cpp 文件一起使用来保存代码的不同部分。

请记住,我已经阅读了多个描述和操作方法,但大多数要么让我头疼,要么只是鲁比斯,什么也没解释。

如果您愿意,我可以将我的代码复制并粘贴到 paste-bin 中供您查看,因为我知道它总是可以改进和修改的。

4

1 回答 1

3

我觉得你的问题太笼统了。但无论如何我都会提供一个建议。

据推测,作为 RPG,您可以找到许多项目。有些是武器,有些是盔甲,有些有其他价值,有些只是没用。如果我正在接近这个,我可能会选择有一个类来代表它们并调用它Item。我什至可以从中派生出类型:Weapon, Armour, Trinket, ...

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

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

现在,这个武器注册表/存储库将是我认为合理的任何类型的容器。它可能只是一个 C 风格的数组 a vector,或者它可能是 amap或允许名称查找的东西。它甚至可能是你自己创建的一个可以做其他好事的类。所以让我们这样做(在内部你可能只使用 a 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;
}

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

于 2012-09-17T03:14:13.427 回答