好的,现在我有了基于文本的rpg的基本知识。

您知道通常的情况:
健康
怪兽
位置

攻击
等等

但是,我永远无法解决的一件事是,类的工作方式+使用多个.cpp文件来拆分游戏,因此更易于管理。

我想我的问题是,如何为“随机武器”创建 list (如在psuedo-random中一样)+是否有人对如何将多个.cpp文件一起用于保存代码的不同部分有任何解释。

请记住,我已经阅读了多个说明和操作方法,但大多数都让我头疼,或者只是 ruby ,什么也没解释。

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

最佳答案

我认为你的问题太广泛了。但是我还是会提个建议。

作为一个RPG,大概可以找到许多项目。有些是武器,有些是盔甲,有些具有其他值(value),有些只是没用。如果要解决这个问题,我可能会选择创建一个类来表示所有内容,并将其称为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;
}

无论如何,希望此答案对您有所帮助。我有很多猜想...

关于c++ - C++基于文本的rpg list ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12451838/

10-09 23:14