【发布时间】:2020-12-26 00:01:18
【问题描述】:
我正在尝试创建一个 D&D 遭遇模拟器。 因此,我创建了一个名为“Actor”的类来模拟玩家和怪物的行为。问题是,虽然该类目前只有 3 个成员变量,但随着模拟变得更加准确,有必要添加更多成员变量以最好地模拟怪物和玩家的统计数据,例如力量、灵巧等(可能超过 10 个成员变量) 这导致构造函数有很多参数,所以问题就变成了;有没有更好的方法来组织这些数据,因为它会随着 Actor 类的每个实例而变化?
现在用户需要手动输入所有状态,但我计划稍后可以读取怪物的文件,因为怪物的统计数据仅因怪物类型(龙、骷髅等)而异。
注意:这些统计数据非常重要,用于计算“Actor”类在遭遇战中可以采取的每个动作的结果。
编辑: 很多人建议使用继承,但事实是(怪物和玩家)从来没有不同的统计数据,像玩家这样的怪物是由玩家控制的(游戏大师)这是一个桌面游戏,模拟器应该有帮助游戏主平衡遭遇比真正的游戏更早。
演员.h
#ifndef actor_h_
#define actor_h_
#include "dice.h"
class Actor
{
private:
signed int hp;
signed int ac; // Armor Class
signed int dmg;
public:
Actor( signed int hp, int ac, int dmg);
~Actor();
signed int getHP( void );
signed int getAC( void );
signed int getDmg( void );
void setHP(signed int newHP);
void setAC(signed int newAC);
void setDmg(signed int newDmg);
void attack(Actor* target);
};
#endif
Actor 构造函数
Actor::Actor(signed int hp, signed int ac, signed int dmg)
{
this->hp = hp;
this->ac = ac;
this->dmg = dmg;
}
Actor::~Actor(){}
【问题讨论】:
-
在我看来,Actor 应该是一个虚拟类——“PC”、“NPC”和“Monster”类继承它......因为并非所有这些类都需要相同的参数。
-
你可能是对的,但问题是在 D&D 战斗中,怪物和 PC 使用相同的统计数据,因此它们需要相同的参数,而 NPC 不是一个因素,因为它们在战斗中由 PC 控制还利用与 PC 相当的统计数据
-
有一本书叫做iOS Swift Game Development Cookbook,它讨论了处理这种情况的各种策略。信息很好,即使您必须从平台和语言中抽象出来。 (我知道,你可能不是为 iOS 编程,也不是在使用 Swift 编程。)也许有一本适用于你的平台和 C++ 的“游戏开发食谱”。
-
@MortenKristensen 所以你说的是有一个“CombatActor”,它拥有所有的战斗数据——然后是其他类型的演员
-
@UKMonkey 游戏是一款桌面角色扮演游戏(游戏不是在PC上玩的),故事和NPC由游戏大师控制,在游戏中玩家可以在战斗中遇到敌人遭遇。唯一的目标是给游戏大师一个模拟这些遭遇结果的工具,以确保遭遇不会太容易或太难。游戏的所有其他方面都与模拟器无关。
标签: c++ class constructor member class-design