我的目标是创建一个游戏成就系统,您可以在其中添加玩家(具有名称、整数id、他们玩的游戏)、游戏(具有名称、整数id、成就列表)和成就(具有名称、整数id以及成就所属的游戏id)。
我不是要求任何代码,我是问这个计划将如何理想的结构。乍一看,我会有一个简单的玩家列表,每个玩家类包含他们玩的游戏,每个游戏类包含成就。但问题是玩家本身必须有成就,他们玩的每个玩家的游戏必须引用同一个游戏,而不是每个玩家的同一个游戏的单独副本。
构建这样一个程序的最好方法是什么?
发布于 2014-01-24 07:01:15
因此,您希望将玩家游戏的句柄存储在player类中,而不是实际的游戏本身(它们将存储在其他地方)。句柄可以是一个指针(可能是一个智能指针),一个数组或vector之类的索引,或者其他一些引用游戏的抽象层。
发布于 2014-01-24 09:04:44
我知道课堂上会有几个设计。这可能是其中之一。我只是使用std::list,并想展示一个基础和简单的设计,不实用。因此,在应用到您的情况之前,您必须考虑到这一点。
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;
}https://stackoverflow.com/questions/21321045
复制相似问题