首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何构建这个C++程序?

我应该如何构建这个C++程序?
EN

Stack Overflow用户
提问于 2014-01-24 06:54:40
回答 2查看 110关注 0票数 0

我的目标是创建一个游戏成就系统,您可以在其中添加玩家(具有名称、整数id、他们玩的游戏)、游戏(具有名称、整数id、成就列表)和成就(具有名称、整数id以及成就所属的游戏id)。

我不是要求任何代码,我是问这个计划将如何理想的结构。乍一看,我会有一个简单的玩家列表,每个玩家类包含他们玩的游戏,每个游戏类包含成就。但问题是玩家本身必须有成就,他们玩的每个玩家的游戏必须引用同一个游戏,而不是每个玩家的同一个游戏的单独副本。

构建这样一个程序的最好方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-01-24 07:01:15

因此,您希望将玩家游戏的句柄存储在player类中,而不是实际的游戏本身(它们将存储在其他地方)。句柄可以是一个指针(可能是一个智能指针),一个数组或vector之类的索引,或者其他一些引用游戏的抽象层。

票数 1
EN

Stack Overflow用户

发布于 2014-01-24 09:04:44

我知道课堂上会有几个设计。这可能是其中之一。我只是使用std::list,并想展示一个基础和简单的设计,不实用。因此,在应用到您的情况之前,您必须考虑到这一点。

代码语言:javascript
复制
using namespace std;

class Achievement
{
  public:

  Achievement(string name, int id) : name_(name), id_(id) {}

  string    name_;
  int       id_;
};

typedef list<Achievement> ACHIEVEMENT_LIST;
class Game
{
  public:
  Game(string name, int id) : name_(name), id_(id) {}

  string    name_;
  int       id_;
  ACHIEVEMENT_LIST achievement_list_;
};

typedef list<Game>  PLAYED_GAME_LIST;
class Player
{
  public:

  Player(string name, int id) : name_(name), id_(id) {}

  string    name_;
  int       id_;
  PLAYED_GAME_LIST  played_game_list;
};


int main()
{

  //firstly, player A, B joins 'dungeon' Game
  Player a("A", 01);
  Player b("B", 02);

  Game dungeon("dungeon", 1001);

  //when game finishes, create achievement
  Achievement hero("hero", 100001);

  //and, add to achievement_list in Game
  dungeon.achievement_list_.push_back(hero);


  //add 'dungeon' to played_game_list.
  a.played_game_list.push_back(dungeon);
  b.played_game_list.push_back(dungeon);

  //Player a,b have same game reference 
  Game a_played_game = a.played_game_list.front();
  Game b_played_game = b.played_game_list.front();

  cout << "GAME : a_played_game.name_ = " << a_played_game.name_ << ", b_played_game.name_ = " << b_played_game.name_ << endl;

  //we can access achievement in player class
  Achievement a_achive = a_played_game.achievement_list_.front();
  Achievement b_achive = b_played_game.achievement_list_.front();

  cout << "ACHIEVEMENT : a_achive.name_ = " << a_achive.name_ << ", b_achive.name_ = " << b_achive.name_ << endl;


  getchar();

  return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21321045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档