好的,现在我已经完成了基于文本的RPG的骨架。
你知道平常: 健康 怪物 地点 金 攻击 等
但是,我无法解决的一件事是类如何工作+使用多个.cpp文件来分割游戏,以便更容易管理。
我想我的问题是,如何为“随机武器”创建库存(如伪随机)+有没有人有任何解释如何使用多个.cpp文件来保存代码的单独部分。 / p>
请记住,我已经阅读了多个描述和操作方法,但大多数都让我头疼或者只是rubbis并且没有解释任何内容。
如果您愿意,我可以将我的代码复制并粘贴到粘贴框中供您查看,因为我知道它可以随时进行改进和修改。
答案 0 :(得分:3)
我认为你的问题过于宽泛。但无论如何我会提出一个建议。
据推测,作为一名RPG,你可以找到许多物品。有些是武器,有些是盔甲,有些有其他价值,有些是无用的。如果我接近这个,我可能会选择一个班来代表他们,并称之为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;
}
无论如何,希望这个答案中的某些内容对你有用。我有一点猜想......