看板 mud 關於我們 聯絡資訊
首先來一張簡單的 m x n 的地圖(底下是 7x7) x-x-x-x-x-x-x | | | | | | | x-x-x-x-x-x-x | | | | | | | x-x-x-x-x-x-x | | | | | | | x-x-x-x-x-x-x | | | | | | | x-x-x-x-x-x-x | | | | | | | x-x-x-x-x-x-x | | | | | | | x-x-x-x-x-x-x 先隨機戳幾個洞,就變如下.. x-x-x-x x-x-x | | | | x-x x-x-x | | | x-x x-x-x | x-x x-x-x | | | | x-x-x-x-x x | | | | | x-x-x-x-x-x | | | x x-x-x-x 然後把地圖編號一下 001-002-003-004 005-006-007 | | | | 008-009 010-011-012 | | | 013-014 015-016-017 | 018-019 020-021-022 | | | | 023-024-025-026-027 028 | | | | | 029-030-031-032-033-034 | | | 035 036-037-038-039 接著依這個地圖產生出區域房間.. > ls 1 001.c 1 007.c 1 013.c 1 019.c 1 025.c 1 031.c 1 037.c 1 002.c 1 008.c 1 014.c 1 020.c 1 026.c 1 032.c 1 038.c 1 003.c 1 009.c 1 015.c 1 021.c 1 027.c 1 033.c 1 039.c 1 004.c 1 010.c 1 016.c 1 022.c 1 028.c 1 034.c 1 005.c 1 011.c 1 017.c 1 023.c 1 029.c 1 035.c 1 006.c 1 012.c 1 018.c 1 024.c 1 030.c 1 036.c 最後,確認產生的地圖有沒有錯誤 > runmap > 地圖產生完成...     │ 對照區          │        口─口─口─口 口─口─口  │ 001-002-003-004 005-006-007     │   │ │ │  │ | | | |   口─口   口─口─口  │ 008-009 010-011-012   │ │   │      │ | | | 口─口 口─口─口      │ 013-014 015-016-017     │          │ |   口─口   口─口─口  │ 018-019 020-021-022   │ │   │ │    │ | | | | 口─口─口─口─口 口    │ 023-024-025-026-027 028   │ │ │ │ │    │ | | | | |   口─口─口─口─口─口  │ 029-030-031-032-033-034   │ │   │      │ | | |   口 口─口─口─口    │ 035 036-037-038-039 以上結果全部用程式產生。這麼做有幾項好處.. 一、節省製作區域的人工及時間 二、不需要向玩家徵地圖稿 三、區域產生的同時地圖也自動畫好,不需手動畫 四、不會產生地圖矛盾情況(不應該重疊的兩格卻重疊在一起) 最大的好處是今天假設我用這程式產生一個區域叫「破魔洞窟」 ,我在 11/06 日開放它,我可以在一週後的 11/13 號,再用程 式產生另一張地圖→區域,把入口連結到這個新區域,名字一樣 叫破魔洞窟,然後每個禮拜我就換一張新圖,這就是一種專門對 付萬年自走型機器人用的方法,起碼它很難一個萬年觸發就可以 從 001 走到 039。 因為圖片產生後還可以修改, 最終位置 039 不一定要在右下.. 035 036-037-038-039 ↓ 035 036-039-038-037 改完圖再產生區域就可(也就是還可任意變更001->039的走法) 適合的區域類型 一、類似 D2 ACT.1、ACT.2 裡頭跟洞窟、下水道有關的任務 二、類似仙劍奇俠傳裡頭跟地下、洞窟有關的區域 三、類似 RO 裡頭跟轉職有關,封閉型、畫面單調的區域 四、類似神龍之謎裡頭蕾娜一行人要取得大破邪咒文所走的地下區域 五、想要經常變換路線圖的區域 一點心得,跟大家做個分享。 Laechan@Sanc -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.253.164.97
cholid:推推~真的超有心的 按個讚XD 是說房間敘述才是難點XD 11/06 00:58
cholid:然後想的超辛苦的 說不定玩家也沒在看XDD 11/06 01:00
sephirx:所以全都是同一個敘述 這裡是破魔洞窟 四周一片陰暗 明顯. 11/06 06:42
laechan:房間敘述有一個 solution, 只是我還沒寫 11/06 07:50
還沒寫,不過基本上要寫不難。 我想的 solution 是「三段敘述生成法」,它的概念很簡單.. string *desc1=([]),*desc2=([]),*desc3=([]); desc1=({"這裡是一個陰暗的洞窟,", "這裡看起來很陰暗,", "洞窟裡頭非常的昏暗,",......}); desc2=({"洞窟內不時傳來腥臭的味道,", "洞窟內不時傳來恐怖的氣息,", "洞窟內不時傳來奇特的聲響,",......}); desc3=({"四週的洞壁疑似留有人類與怪物打鬥過的痕跡。", "地面上偶爾還會踢到一些人類或是生物的殘骸。", "似乎前方存在著什麼危險的怪物正在虎視著你。",......}); void init() { if(!query("long")) { string str="",str2=""; int i,j; str+=desc1[random(sizeof(desc1))]; 取第一段訊息 str+=desc2[random(sizeof(desc2))]; 取第二段訊息 str+=desc3[random(sizeof(desc3))]; 取第三段訊息 j=strlen(str); for(i=0;i<j;i=i+56) // 假設一行定為 56/2 = 28個中文字寬度 str2+=str[i..i+55]+"\n"; // 分行 str2+=str[i..j-1]+"\n"; /* 這時出來的訊息就類似底下 這裡是一個陰暗的洞窟,洞窟內不時傳來恐怖的氣息,似乎前方 存在著什麼危險的怪物正在虎視著你。 */ set("long",str2); } } 也就是說,該房間只有生物進入時(觸發 init)才產生出 long, 而這個 long 會存在一段時間直到房間被 reset。 (也就是說這次出現的 long 跟下次的 long 會不一樣) 這時候 desc1、desc2、desc3 儲存的資料量越多,房間敘述就 可以越多樣性,而且多個性質類似的洞窟還可以共用同一個資料 庫。 ※ 編輯: laechan 來自: 111.253.164.97 (11/06 08:14)
fr373969:推 專業 11/06 23:12