好的,现在我有了基于文本的rpg的基本知识。
您知道通常的情况:
健康
怪兽
位置
金
攻击
等等
但是,我永远无法解决的一件事是,类的工作方式+使用多个.cpp文件来拆分游戏,因此更易于管理。
我想我的问题是,如何为“随机武器”创建 list (如在psuedo-random中一样)+是否有人对如何将多个.cpp文件一起用于保存代码的不同部分有任何解释。
请记住,我已经阅读了多个说明和操作方法,但大多数都让我头疼,或者只是 ruby ,什么也没解释。
如果您愿意,我可以将我的代码复制并粘贴到paste-bin中,以供您查看,因为我知道可以随时对其进行改进和修改。
最佳答案
我认为你的问题太广泛了。但是我还是会提个建议。
作为一个RPG,大概可以找到许多项目。有些是武器,有些是盔甲,有些具有其他值(value),有些只是没用。如果要解决这个问题,我可能会选择创建一个类来表示所有内容,并将其称为Item
。我什至可以从中派生类型:Weapon
,Armour
,Trinket
,...
我也将以某种方式在程序中注册我所有的武器。假设我有一个简单的构造函数...
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/