我試圖創建一個基於文本的冒險遊戲。我想我想讓地圖由不同的節點表示,其中每個節點對應一個不同的位置,並且有指向另一個節點的節點指針變量(左,前,右)。我試圖把它作爲一個鏈表來實現,但是通過這個數據結構,我只能讓每個節點指向另一個節點。我希望每個節點指向其他三個節點。我可以使用哪種數據結構來實現這一點,或者甚至可以實現?C++基於文本的遊戲 - 「地圖」實現
回答
您可以實現自定義的數據結構鏈接與地圖上的鏈接位置是這樣的:
struct Map_Node{
Map_Node *left;
Map_Node *right;
Map_Node *forward;
/* other needed field*/
};
然後,你需要做的內存管理你自己的。例如通過使用智能指針。
std::shared_ptr<Map_Node> entry{ new MapNode };
std::shared_ptr<Map_Node> hallway{ new MapNode };
entry->forward = &*hallway;
//and so on
獲取下一個文件更簡單但效率更低的是std :: map。如果每個位置 具有其唯一的ID,例如一個字符串,您可以存儲相鄰字段的ID並使用該ID在地圖上自由移動。
struct Map_Node{
std::string name;
std::string left;
std::string right;
std::string forward;
/* other needed field*/
};
std::map<std::string, Map_Node> map;
Map_Node entry;
entry.name = "entry";
map[entry.name] = entry;
Map_Node hallway;
hallway.name = "hallway";
map[hallway.name] = hallway;
//links between:
map["entry"].forward = "hallway";
我幾乎只是寫這個(儘管我用N,S,E,W) – Baldrickk 2014-10-29 10:23:30
@Baldrickk對於像N,S,E,W這樣的簡單方向,人們可能會想到關於使用簡單的二維日期結構(向量,數組或其他)。 – tgmath 2014-10-29 10:26:13
嗯,我的意思是我用了N,S,E,W而不是左邊,右邊......使用一個矢量雖然很好,例如:你可能決定有多層,在這種情況下,節點(向上和向下)。在這種情況下,你可能想要存儲一個'std :: vector
鏈接的數據結構會做這樣一個好工作,你想要什麼:
例如:
class location
{
std::string loc_name;
std::vector<std::pair<std::string,location*>> connections;
std::string description;
public:
bool add_link(location* loc, std::string dicription_to, std::string dicription_from);
//other parameters + functions to manage class
}
這將允許您創建,如地點:
location* loc = new location("graveyard");
loc->description = "A spooky graveyard on a hill, a cool mist floats amongst the gravestones and monuments";
loc->add_link(crypt /*previously defined*/,
"An imposing mausoleum with an open door, steps inside lead down into darkness",
"Moonlight filters down from the top of some steps, a way out?");
loc.add_link(spooky_house /*previously defined*/,
"The North gate of the graveyard",
"The entrance to the house's spooky graveyard");
我推薦創建一個你可以閱讀的地圖文件。可能使用的模板是這樣的:
位置文件:
/*locations, format = "name; description"*/
Spooky House; house_description
Crypt; crypt_description
Graveyard; A spooky graveyard on a hill, a cool mist floats amongst the gravestones and monuments
鏈接文件:
/*links, format = "index # (from); index # (to); description (from->to); description (to->from)"*/
3;2;An imposing mausoleum with an open door, steps inside lead down into darkness; Moonlight filters down from the top of some steps, a way out?
3;1;The North gate of the graveyard;The entrance to the house's spooky graveyard;
載入地圖是那麼簡單,閱讀中的所有位置,並推入一個矢量存儲,然後添加鏈接來連接它們。
當我嘗試構建程序時,出現錯誤:'bool location :: add_link(location *)'是私有的 – GreatBambino 2014-10-29 14:24:08
類的成員默認是私有的,您需要添加一個'public:'lable使他們可訪問(更新的答案顯示一個'add_link'函數) – Baldrickk 2014-10-29 14:28:08
- 1. C++基於文本的遊戲
- 2. C#基於文本的遊戲項目
- 3. C++ 32767基於文本的遊戲
- 4. 基於文本的遊戲
- 5. 基於文本的遊戲的基本保存遊戲
- 6. (基於文本)C++練習遊戲
- 7. 如何最好地實現基於文本的遊戲的房間?
- 8. 構建基於iOS的地圖遊戲
- 9. 基於文本的遊戲運動
- 10. 遊戲樹的C++實現
- 11. 基於Python文本的遊戲縮進
- 12. scala基於文本的冒險遊戲
- 13. Python基於文本的遊戲顯示
- 14. 基於文本的冒險遊戲
- 15. 基於文本的瀏覽器遊戲
- 16. 基於多人遊戲的文本遊戲
- 17. 創建一個基於文本的遊戲GUI(c#)
- 18. C#簡單的2D遊戲 - 製作基本的遊戲循環
- 19. 基於文本的遊戲中的C++輸入
- 20. C++基於文本的遊戲(未知錯誤)
- 21. 呈現基於着色器的遊戲
- 22. 用於基於文本的遊戲的多維數組
- 23. 基於Servlet的基於遊戲的遊戲
- 24. 基本文本格鬥遊戲的JavaScript
- 25. GUI(基於文本的遊戲)中的Java文本框
- 26. 關於實現遊戲多人遊戲的信息?
- 27. 基本的C++骰子游戲
- 28. 基於級別的遊戲
- 29. 實現基於回合的網頁遊戲
- 30. 使用MVC/Javascript實現基於回合的網頁遊戲
修改您的數據結構以使四個節點指針指向左側,右側,前進和下一個。 – 2014-10-29 09:52:23
您不需要名稱來實現數據結構。只要讓每個節點指向另外三個節點即可。或者,也許是四個,如果你想讓你的角色能夠回去。 – 2014-10-29 09:53:26
如果每個節點都有三個指針,我將如何將每個指針添加到列表中?每次生成地圖時,地圖都必須相同。 – GreatBambino 2014-10-29 09:55:17