我的目標是製作一個遊戲成就係統,你可以添加玩家(有名字,整數ID,他們玩的遊戲),遊戲(有名字,整數ID,成就列表)和成就(有名字,整數ID以及該成就所屬的遊戲ID)。我應該如何構造這個C++程序?
我不是要求任何代碼,我問的是這個程序的理想結構。乍看之下,我只會列出一個玩家名單,每個玩家類別都包含他們玩的遊戲,每個遊戲類別都包含成就。但問題在於玩家本身必須具備成就,而且每位玩家所玩的遊戲必須參考相同的遊戲,而不是針對每位玩家的同一遊戲的單個副本。
構建這樣的程序的最佳方式是什麼?
我的目標是製作一個遊戲成就係統,你可以添加玩家(有名字,整數ID,他們玩的遊戲),遊戲(有名字,整數ID,成就列表)和成就(有名字,整數ID以及該成就所屬的遊戲ID)。我應該如何構造這個C++程序?
我不是要求任何代碼,我問的是這個程序的理想結構。乍看之下,我只會列出一個玩家名單,每個玩家類別都包含他們玩的遊戲,每個遊戲類別都包含成就。但問題在於玩家本身必須具備成就,而且每位玩家所玩的遊戲必須參考相同的遊戲,而不是針對每位玩家的同一遊戲的單個副本。
構建這樣的程序的最佳方式是什麼?
所以你想在玩家類中存儲一個句柄給玩家的遊戲,而不是真正的遊戲本身(它們將被存儲在別處)。一個句柄可以是一個指針(這將是一個指針),一個索引到一個數組或者vector
或者類似的東西,或者指向遊戲的其他抽象層。
我知道,會有幾種類的設計。這可以是其中之一。我只是用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;
}
玩家有成就,成就與遊戲有關。 –
由於我忘了提及,我還需要能夠列出玩家所玩的遊戲,即使玩家沒有取得遊戲成就。 – AggieDev