面向团队系统的OOP问题

我不太清楚如何创建我的“团队系统”。 比方说,我有2个球队和4名球员在那里。 球队是蓝队和红队。 一个团队知道其成员的数量,分数(每个团队将获得球员获得的积分),也可能是HUD的一些细节。

我知道的解决scheme就是创建带孩子TeamRed和TeamBlue的父类队伍,并将队员添加到队伍中。 (通过玩家获得玩家的团队也很棒 – >例子: Player.GetTeam() == TeamBlue?

但是由于红色和蓝色车队实际上已经退出了相似的状态,只有不同的HUD设置,所以我对这个devise还不太确定。 另一个可能性是只需要一个class级Team,并创建Team teamRed; &Team teamBlue;

你们觉得怎么样? 有更好的解决方

考虑以下关系

  • 一个球队球员
  • 红队是一个团队
  • 一个球员与一个球队相关联

所以,下面的方法应该给你一个很好的提示。

红队和蓝队是一个团队的实例,具有相同的属性,但是它们的不同。 除非需要为每个团队实施不同的行为(成员函数),否则只需要一个具有数组/列表的Team类来存储玩家。

每个玩家可以将其团队分配为枚举数字指针variables。 随你便。


为什么我建议这种方法? 想象你有法术。 每个人都有可能不同的属性值(也许他们有不同数量的属性),他们也performance出完全不同的彼此(除非一个从另一个派生)。 这样你就可以拥有父类抽象类Spell,然后为每个类指定特定的属性和行为(想象一个虚拟成员函数,例如cast )。

您不应该混合定义事物外观的视图,如团队的HUD与团队模型,数据结构或类实例。

像@pctroll说的那样,团队可以是一个Team类的实例。 在我看来, Team类应该是一个荣耀的阵容和一些统计得分的方法。 玩家类应该有一个指向它的团队的指针。

警告这是代码:

 //so the function of adding a player could be like this: class Team { . . . vector<Player> players; addMember(p : Player){ p.team = this; players.push(p); } } 

视图样式可以是交给团队构造函数的类HUD的一个实例。