地圖隨機演算法
⑴ 開放世界游戲中的大地圖背後有哪些實現技術
你好,一、程序技術篇:演算法和架構(Programming Algorithms & Architecture)
1. 無限循環的平鋪地圖(Infinite Tiling)
2. 可預測隨機數和無限宇宙(Predictable Random)
3. 精度問題解決方案
4. 超大地形的處理 (Terrain Visualization)
4.1 古典演算法(從 GeoMipMapping,Progressive Mesh 到 ROAM)
4.2 層次的藝術(Quadtree 和 Chunked LOD)
4.3 以GPU為主的技術(從 Paging,Clipmap 到 GPU Terrain)
5. id tech 5 的 megatexture (超大地表上的非重復性海量貼圖)
6. 過程式的內容 (Proceral Content Generation)
6.1 過程式紋理(Proceral Texturing)
6.2 過程式建模(Proceral Modeling)
二、內容製作篇:設計和創造(Content Design & Creation)
1. 隨機地圖類游戲 (Diablo II) 中地圖的拼接
2. 無縫大世界 (World of Warcraft) 中區域地圖的拼接
3. 衛星地質數據的導入,規整化和再加工(一些飛行模擬類游戲)
4. 超大地圖的協同編輯:並行操作,數據同步,手動和自動鎖的運用
三、異次元篇:我們的征途是星辰大海
1. 終極沙盒(EVE):當規模大到一定程度——宇宙級別的混沌理論與蝴蝶效應
2. 打通兩個宇宙(EVE & Dust):發現更廣闊的世界——宇宙沙盒游戲和行星射擊游戲聯動
⑵ 推箱子游戲怎麼隨機生成地圖
推箱子可以隨機生成地圖
因為從推箱子的解答步驟可以還原關卡地圖,所以可以隨機生成過關步驟從而生成關卡地圖
⑶ 在我的世界里的隨機地圖是無限大的,為什麼不需要無限大的存儲空間
這里說的無限大是說「地圖的生成」是沒有限制的。地圖是實時,隨機生成的。換句話說你在游戲里跑的地方越遠越多,地圖也會慢慢越來越大,不是說一進去就是無限大了。
為了避免內存不足造成游戲崩潰的情況,現在很多啟動器都內置了地圖生成的最高限制。但從理論上講,的確是無限大的,存儲空間也是一樣。
⑷ 怎麼製作迷宮圖
方案一:主路扭曲型
1、首先,按照下圖的間隔規則來生成基礎的大地圖,1為陸地,0為水域。
2、然後,選擇一個靠近邊緣的1作為起點,在它的周圍隨機找另一個黃色的1(這里的「周圍」指的是上下左右4個方向,斜邊不算)。找到就把他們聯通,即把兩個1之間的0變成陸地,這里用紅色來表示。
3、把上一步「終」的格子作為新的一個「起」格子,不停循環第二步的過程,直到找不到周圍有黃色的1。
4、這時候,原路往回走(即不停去找前一個格子),直到找到一個格子,這個格子周圍有黃色的1,那麼從這個格子開始重復前兩個步驟。
5、接下來就是不停重復上面的步驟,找到就聯通,找不到就往回走。
6、填充完整個地圖之後,迷宮就算是製作完成了,根據需求加上終點即可。
總結一下,這種方案生成的迷宮會有一條明顯的主路,即一條特別長、貫穿大部分區域的路線,同時,迷宮的路線一般比較扭曲。
方案二:自然分岔型
這個方案的雛形來自於隨機prim演算法,具體步驟如下:
1、跟方案一一樣,生成一個基礎地圖。格子先用黃色1和灰色0來表示,暫時不區分水陸。
2、隨機取一個地圖邊緣的黃色1,把它標記為紅色1,即變成陸地。然後把它旁邊的灰色0標記成藍色0,表示「待定」。(注意的是,大地圖四周的灰色0固定不變,作為地圖邊緣而存在)
3、敲黑板了!!這里是重點!!!
隨機選一個藍色的0(這一步很重要,會使這個方案明顯區別於上一個方案),然後看紅色1隔著這個藍色0對面的格子,是否是黃色的1:
如果是,則把對面的黃色1標記成紅色1,即變成陸地,然後把藍色0變成紅色的0,即也變成陸地;
如果不是,就把這個藍色的0變成灰色的0。
最後,把新創建的紅色1周圍的灰色0,標記成藍色0。
4、繼續重復上面的步驟
5、對比上圖和下圖,這里取一個藍色0生成一個紅色1之後,新生成的紅色1旁邊,有兩個藍色0的兩邊都是紅色1了,那麼就根據第三步的規則,在稍後取到這些藍色0時,就會把他們變成灰色0。
6、繼續重復上述步驟,直到整個地圖沒有藍色0了,地圖就生成完畢。
總結一下,對比方案一,這套方案不會出現明顯的主路,迷宮相對比較自然,但迷宮的分岔路會比較多,所以迷宮可能會更復雜,即玩家需要做選擇的次數可能比較多。
方案三:塊狀分割型
上述兩個方案有個共同的特點,就是道路永遠都是1個格子寬,如果游戲需要給地圖創造一些小型地塊或者更寬的道路,需要在迷宮生成之後再用各種分布的規則來豐富迷宮。
而第三個方案則以小型地塊作為出發點來設計迷宮,這套方案的雛形來自於國外大神Bob Nystrom,有興趣的可以去查看他個人主頁。
1、首先,在大地圖(還是之前那個大地圖)上生成若干小型地形,保證邊長是奇數且不重合就好(示意圖全部使用了正方形,實際上可以做成長方形讓地圖更加自然)。注意頂點要在黃色1格子上即可,這里我用橙色1來表示這些小型地塊。
2、然後,根據之前方案一的迷宮生成方案,在非小型地塊的區域里,用迷宮來填充。這一步完成之後,迷宮和小型地形是分隔開來的。
3、在橙色1的小型地形周圍,隨機取點以連接黃色1,連接點的數量可以根據需要來確定,建議是不要吝嗇連接點的個數,因為這種地圖之下,分岔路遠比前兩種方案要少。
4、接下來是簡化地圖,目的是去掉一些死胡同,因為這種方案的核心在於小型地塊,沒有必要讓玩家在迷宮的路上繞。方法是把一些3邊都是灰色0的黃色1去掉即可,具體數量也根據游戲需求來制定,我這里只去掉了一部分。
5、最後,給地圖加上出口和入口,地圖就做完啦!
總結一下,這種方案比前兩種多了小型地塊,這一點比較適合設計玩家的階段性反饋。同時地圖的分岔路明顯減少,玩家在這種方案下的選擇次數會明顯降低。另外,由於這個方案的步驟相對多且獨立,所以對於設計者來講會比較容易控制地圖的結構。
⑸ minecraft中的地圖是怎樣生成的
地圖生成器根據種子碼生成的
具體過程:
——根據種子與生成器參數(偽)隨機生成等高線
——根據種子與地圖參數(偽)隨機生成生物群系
——根據種子生成的地形與生物群系,生成樹木礦物等
——根據種子與地圖參數(偽)隨機生成洞穴,湖泊等景觀
——根據種子與地形生物群系、生成器參數、地圖參數,結合建築物生成演算法,生成建築物
值得注意的是:
——偽隨機數生成演算法決定了:只要種子、生成器參數、地圖參數一致,就能生成確定的地形
——偽隨機數生成演算法決定了:你的地圖可以實時載入(跑到新的區塊時可以快速生成)
——同樣的,偽隨機數散發決定了,你的已經修改的地圖是不可能還原成一個種子碼的
⑹ 求隨機地圖的演算法
問題的關鍵是你要用這地圖來作什麼,以及需要用什麼數據結構表示地圖
如果說你需要上面的「圖片」本身,那拿來好像沒什麼用處
如果說需要作為游戲的地圖,那數據結構是真正重要的東西,地圖的形式只是一堆坐標即可,沒必要渲染成圖片(或者說渲染是游戲主體的任務,不在地圖生成器范圍)
⑺ 鬼谷八荒炙炎之域具體位置在哪
隨著社會經濟的不斷發展,在我們的現實生活中,我們對於游戲的玩法也是在不斷的增加,也正是因為我們每個人對游戲都有一種吸引力,所以我們每個人都會在現實生活之中選擇去玩游戲來讓自己的生活得到一定的改變,讓自己的心情能夠得到一定的放鬆,也正是在這樣的背景之下,所以我們會選擇玩鬼谷八荒這款游戲,因為這款游戲現在的火熱程度是非常高的,而且也吸引了很多的玩家,相信很多人在玩游戲的過程中,應該遇到這樣的問題,那就是找不到的炙炎之域位置在哪裡,下面我們就來看一下。
綜上所述,我們能夠明白,在這款游戲中,這個位置是沒有具體位置的,主要是因為這個地圖所採用的是隨機生成的演算法,而採用這種演算法,地圖本身就不是確定的,所以我們必須要去根據這個特徵來去進行相關的尋找。
⑻ 魔獸地圖編輯器的幾個問題:(請給出詳細解答)
第一個不太清楚......很少有人這樣做的,如果我猜得沒錯的話,樓主是做一個把特定物品給NPC然後觸發劇情是吧?放到指定區域貌似更方便呢。如果說硬要做的話,給你個信息,smart命令為右鍵點擊。
第二個問題,所有偽隨機都是一個意思,設置個隨機種子,比如說RND = 0 到 100 的隨機實數,然後條件句判斷此實數是大於70還是小於等於70,之後再替換不同的單位給觸發玩家。不過話說回來,變身技能最好是原版的,自己替換單位難免在動畫銜接或數值上有出入。同時,這個隨機演算法有明顯周期性,並不是很散亂,所以說不建議用到頻繁發生的事件(如攻擊)上,不過變身還是沒問題的。
⑼ MC世界種子的原理是什麼不都是隨機的嗎一串數字怎麼能描述那麼大的數據量
地圖種子的原理是:地圖生產是實時,隨機,可重現的
在相同版本的minecraft里,相同的種子生成的地圖是一樣的
地圖生產的細節:
種子:intseed = hashcode(xxxx);(這也是為什麼中文也可以生產地圖的原因)
動態生產地圖的公式是。
map = fun_map(intseed) = fun_天空(intseed)+fun_地形(intseed) + fun_方塊(intseed) + fun_建築(intseed) +fun_生物(intseed) + fun_礦物(intseed)
舉個栗子:
生成地圖函數:f(c)
如果f是一個確定的函數,那麼對於同樣的c值,f(c)的值一定是確定的。
c就是那個種子,f(c)就是生成的地圖。
地圖生成使用的隨機函數,當然是「偽隨機函數」
什麼是「偽隨機函數」?計算機進行的是確定性運算,不存在真正的隨機性,這意味著想要求計算機「獨立」(依靠外部輸入「例如磁碟存取、鍵盤滑鼠操作等」來獲得熵源的隨機數發生器不在討論范圍之內。)生成真正的隨機數,在理論上不可能。許多編程應用中想要隨機效果,使用的都是「偽隨機函數」,就是用某種非常復雜的演算法,來生成一系列看似毫無關聯卻又均勻分布的數字(例如 0.9024310185642406, 0.6399798616249142, 0.8728940712975358, ...),稱為「偽隨機數列」,以此來模擬隨機的效果。每次程序調用這個偽隨機函數的時候,就從這個數列中取出下一個數字返回給程序。這樣做在孤立來看是沒問題的,但是問題是如果你把程序關閉,重新啟動運行,你得到的還是原來那個數列,每次取隨機數取出來的還是跟上次一樣的那些數字,例如仍然是「0.9024310185642406, 0.6399798616249142, 0.8728940712975358, ...」。如果你依賴這個數列來生成游戲內容,那麼每次游戲所得到的的結果都會一樣,這就失去了隨機的意義。
為了解決這個問題,我們只能從「偽隨機函數」外面給它加入某種「擾動」,讓它在每次運行的時候結果不一樣,產生不同的「偽隨機數列」。「種子」就是最常見的一種擾動方式。相同的「種子」產生相同的數列,不同的種子產生不同的數列。如何保證每次運行的「種子」不相同呢?最簡單的辦法就是採用「系統時間」作為種子。相同的程序,上次運行和這次運行的時間肯定不一樣,這就確保了每次的種子不同。當然,如果你人為去修改系統時間,並且讓兩次運行時的系統時間嚴格一致,那麼還是會得到相同的運算結果。但是作為游戲來說,一般沒必要考慮這些。
Minecraft 裡面的地圖種子就是這樣的原理。地圖本質上是「偽隨機函數」生成的,跟別的游戲沒什麼區別,但是我們知道 Minecraft 是個比較 geeky 的游戲,它把種子的控制權交給你,允許你指定種子,那麼當你使用相同的種子的時候,游戲中所有本該「隨機」的元素都會變成「命中註定」。不僅生成的地形完全相同,連什麼地方會刷出什麼花草牛羊都一樣。如果玩家的玩法操作也完全嚴格相同的話(這個不太可能),那麼整個游戲完全就等於是在放電影,一切都是預定好的。
另外,在minecraft里,地形生成、建築生成、礦物生成是分開的,如果安裝了生成建築或者礦物mod,並不會干擾特定種子的形成特定的地形。