我正在創建一個基於僞回合的在線策略瀏覽器遊戲,其中許多人在相同的世界中玩了很長時間(幾個月)。爲此,我想要有64000x64000瓦片= 40億瓦片的地圖。我需要每塊瓷磚大約6-10個字節的數據,總共大約30GB的數據用於存儲地圖。用於存儲巨大瓷磚地圖的選項
每瓦應該有這樣的類型(水,草,沙漠,山地),資源(木材,牛,金)和playerBuilt(道路,建築物)
客戶端將只需要大約訪問屬性100x100瓷磚在同一時間。
我已經處理了客戶端控制下的地圖。我面臨的問題是如何在服務器端存儲,檢索和修改此映射中的信息。
所需的功能:
- 創建,存儲和修改64000x64000 tilemap的。
- 向客戶端顯示地圖的100x100部分。
- 在地圖上進行修改,例如道路,建築物和耗盡的資源。
我至今認爲:
- 程序生成:在程序上取其所需的飛行地圖的一部分生成。確保給定相同的種子,它總是生成相同的地圖。我遇到的主要問題是遊戲過程中會對地圖進行修改。注意:在遊戲過程中,少於1%的圖塊會被修改,並且可以將座標修改存儲在外部數組中。將它們加載到程序代之上。
- 數據庫:在遊戲開始時生成地圖並將其存儲在數據庫中。一位朋友告訴我這樣一個巨大的瓷磚地圖,並告訴我,我可能想將它存儲在內存中。
- 將所有內容保留在服務器端的內存中:將其保存在內存中的數據結構中。看起來像是一個很好的方式來做到這一點,如果地圖較小,但是40億個地圖塊要記憶很多。
我打算使用java + mysql作爲此項目的後端。如果需要,我仍處於早期階段,可以開始改變技術。
我的問題是:哪三種方法上面似乎可行的和/或有其他辦法做到這一點,我還沒有考慮過?
歡迎來到SO!您可能會爲這個問題得到一些有用的答案,但總的來說,這個網站實際上太寬泛了。正確的答案將取決於數十個關於遊戲設計的因素。如果您可以更具體地瞭解您在每個解決方案中看到的問題,並詢問如何解決問題,那麼您可能會獲得更好的信息。如果你對此太寬泛,不要感到驚訝。 – sprinter
每個瓷磚大約有多少數據?每個瓷磚8位的解決方案將與每個瓷磚1 mb大不相同... – Pikalek
Sprinter - 感謝您的歡迎,我會盡力讓它在未來更加簡潔。 Pikalek - 每個瓷磚大約有16個字節的數據。 – ChooseTheRedPill