怎樣設計迷宮?


首次答題。詳細畫迷宮步驟的多圖答案。

這裡只介紹我常畫的一種手繪迷宮,算是我原創的迷宮風格吧,因為我沒在其它地方見過類似我這樣的迷宮。如有相似的,望告知,謝謝。

大家說的都是二維迷宮,其他的回答里有評論說想知道三維迷宮怎麼畫,我這裡就告訴大家怎麼畫三維迷宮。其實也不算三維迷宮,只是在二維的紙面上畫,腦補出三維的場景。

------------

先看一幅我以前畫的迷宮,嘗試走走:(迷宮答案在最後)

這種迷宮的優勢在於:

1.無法用「左手定則」或「右手定則」(在二維迷宮中,只要沿著左牆壁或右牆壁一直走,就能走到出口)。這種迷宮若用此方法,在入口進入會回到入口。

2.沒有斷頭路(在二維迷宮中,許多路是不通的,走到沒路了就返回分岔口走另一條路)。這種迷宮,每一條路都相通。

3.走著走著就會回到入口,以此捉弄玩家來取樂~

4.因為每一條路都是相通的,理論上有無數種走法都是正確答案。

5.相對來說沒有普通迷宮那樣會造成強烈的密集恐懼。

------------

下面向大家介紹怎麼畫。

首先要的美術功底:很簡單,只需能畫出類似公路俯視圖的直線和曲便可,如下圖這種。

(圖1)

若畫得不光滑或粗細不一,多練便可。

第一步:畫入口和出口,在紙面的任意位置的行。

(圖2)

(由於大部分迷宮在設計的時候,都是從入口開始畫,最後畫到出口。部分玩家喜歡逆過來玩迷宮,從出口進入,從入口出去,他們會覺得這樣剛簡單,其實也是有道理的,所以我在畫迷宮的時候,習慣從入口開始畫一半,從出口開始再畫另一半,最後在中間把它們接起來。這樣做,無論是玩家從入口開始玩還是從出口開始玩,難度都差不多。)

第二步:在入口處隨意畫一些分岔路,可以隨機發揮,不必太用心設計道路。

(圖3)

繼續隨意畫,可以不用思考到底哪一條路才是想要的正確道路。岔路太多的話,可以把部分岔路首尾相接起來。

(圖4)

第三步:增加迷宮的個性元素。例如同樣用這種道路的畫風畫出「知乎」二字,它們將成為迷宮道路的一部分。

(圖5)

把「知乎」與之前畫的道路相連接。

(圖6)

第四步:開始設計迷宮的正確道路。

這個例子是能進入「知乎」的左邊「矢」字的道路為「正確道路」。其餘分岔的道路為「錯誤道路」,讓它們首尾相接,這樣就把那些「錯誤道路」都解決掉了。注意畫那些「錯誤道路」的時候,別接到「矢」字上了。

(圖7)

(圖8)

此時,錯誤道路都首尾相連了,剩下「矢」字發出來的道路。

「矢」字發出來的道路,選擇一條「正確道路」,其餘為「錯誤道路」,延伸它們並讓他們首尾相接,又解決掉「錯誤道路」了。(選擇「正確道路」的時候,選那種你覺得玩家主觀上不會走的道路)

(圖9)

第五步:從出口開始畫,按照同樣的方法畫迷宮。

(圖10)

繼續隨意畫。剛才的畫「乎」字的道路還沒用完,可以將「乎」字的部分與出口延伸出來的道路相連。

(圖11)

選擇「乎」字的「丶」為正確道路,其他的首尾相接。

(圖12)

現在發現右上角多出一條分岔路,怎麼辦?

它是「錯誤道路」,讓它分岔成兩條,然後首尾相連。為了混淆玩家視線,可以繞地圖一小圈之後再回來相連。

(圖13)

(圖14)

第六步:把從入口延伸出來的「正確道路」與從出口延伸出來的「正確道路」相接。

(圖15)

完成

(圖16)

參考答案:(答案不唯一)

(圖17)

這幅迷宮,是我邊答題邊畫的,畫得不是很好,道路設計也比較簡單。這是用簽字筆快速畫成的,曲線不是那麼漂亮。有時間的話,可以用鉛筆慢慢畫,畫錯了可以擦掉,最後再用簽字筆勾邊。掌握這張方法後,就可以發揮畫出有趣的或者更複雜的迷宮。

以上。

------------

最後,附上開始第一幅迷宮的參考答案:

----------

再附一幅我在2010年底畫的迷宮,難度相對大一些:

(上面寫有2011 HAPPY NEW YEAR,忽略小字部分的錯誤拼寫和錯別字,以及那個丑到不想說的Logo......畢竟是多年前畫的了......)

(小字部分,Drink是我的英文名,和另一位朋友一樣,這個英文名上不了檯面,但我一直都沒想好正式的英文名)

至於這一幅迷宮,有興趣的可以嘗試挑戰一下。以後再放出答案。

首次答題,希望大家支持!


Oh太好了終於有一個我可以回答的問題鳥!寒假前上文科課時自己鑽研過。。

我把課堂上寫的提綱打出來修改一下,這是一個初畫迷宮者可以參考的步驟

以下是基於想把迷宮畫的盡量複雜的念頭做的,所以有些迷惑玩家的損招。。當時畫迷宮時尤其是想要繞同心環(我也不知道幹嘛取這麼不匹配的稱呼。。當時順手寫的,代表一個圈)時有覺得迷宮不能有那種天橋一樣的路真是不舒服。。轉不回去。。

如果有誰作出三維迷宮的話。。服了,完全解決這個問題,好像那個 立方體 就是一個。。

下面是我做的迷宮。。好高興好高興原本做完的那天下午搞丟了可想而知我有多想扁人。。然後幸運的失而復得嗷嗷。。

最短走出來的兩分鐘,最長十分鐘。。。我自己的話畫完後看都不想認真看它。。頭疼加密集恐懼。。

A,先把整個迷宮的佔地大致畫出來,比如你的迷宮是一張作業本紙這麼大小的,而且如盜夢裡那姑娘開頭畫的那種直角線條的,畫出面積大小,然後劃分成幾個區域塊,我把半張A4折了幾下分成了八塊

B,設好入口出口,然後從入口開始先畫那一小區域塊的,腦子裡確定好這一區域塊有幾個出口,記住要用鉛筆橡皮,因為後面大有可能會改動,然後可以畫路線了,不用先畫出一條路再把其餘地方補上的,要畫出拐彎啊什麼的,死路啊牆啊,因為這一小塊而已,難度不大不會搞頭暈的,那樣先畫出一條路的方法會很容易看破。

C,你要考慮一下整體,你想要只有一條通路還是有兩條三條?這條通路又與你手上正在畫的小區域塊的哪個出口相通?記得在出口處標記RW,防止搞混,還有要注意,就算你知道有一條路到不了出口你也要同樣認真的畫它

D,像上面那樣重複,畫滿一個個區域塊,這樣子只要你有精力,再複雜的迷宮都畫的出來,不過越到後面越要考慮更多東西,防止在無意識中畫出其他路。在這裡我所說的路均為到終點的通路,或者不到終點但繞很長能把你繞到死角里氣死的路,那些縮在一團繞啊繞的其實可以把他們看成堡壘,一眼就知道過不去。

E,到後面我是又從終點入手畫路,然後把兩部分連到一起的,你可以考慮用這種方法,這樣感覺更放心點,在你畫一部分時如果覺得怎麼這麼奇怪不太好不太舒服感覺很彆扭時相信自己的直覺這一塊全部擦了重畫會更能達到滿意的效果

然後我們來說說基本的畫迷宮的技巧和步驟,因為我根本沒看任何教程啥的當時手頭也沒任何資料下面的東西都算是筆記吧畫到有靈感就寫下來的,所以下面的專有名詞都是自己編的。。。我寫這篇也是因為早就想把那幾條打上電腦了。。

1。同心環,就是說你設計部分路線時可以把一條路線畫成一個大大的圈,最後又讓玩家回到這部分路線的初始位置,這個初始位置可以畫成十字或丁字路口的樣子比較自然,圈子要夠大啊,等玩家轉了一整張紙又回到原來那地方時wow。。。

2。盡量盡量少畫堡壘,就是我前面說的極明顯的死胡同,不止是死胡同而且還是佔地很大很明顯的死胡同,像是蝸牛殼上的花紋似的。。這種純粹是占空間用的,好的迷宮是不需要這些東西佔空間的,光用走的通走不通的路線填滿就行了。。。

3。正確的路口離開口遠一點,增加難度

4。多多多多一點叉路,死路和叉路務必要認真畫

5。活路周圍的裝飾,我是指能讓活路十分不明顯的那些東西,裝飾,用幾條漫長的死路比用極明顯的死胡同好。而且,如果一條漫長的活路和幾條漫長的死路靠的很近的話,玩家從其中一條走到最後發現。。居然。。和終點只有一牆之隔。。哈哈。。damn it。。

6。路線不要太直觀,那些曲里拐彎是非常有必要的,有時候斷頭路什麼的都是非常又必要的,紙上唯一的一條活路一定要轉了又轉拐了又拐,在最初設計時用虛的直觀的線畫出活路的大致位置,然後就要盡量加工的很很很繞彎子

7。開頭叉路多好過結尾叉路多,開頭叉路越多越好,每條路越長越好,但也要在自己能力範圍內,以免一開頭就頭皮發麻懶得往下做了。

8。雙面斷頭路慎重使用。這個說白了把它拉直就是一個矩形,你從頭到尾都進不去,比堡壘還沒用,但這個畫的拐彎一點長一點就可以很好的隱藏區域塊邊框。

9。區域塊邊框盡量要隱形,不容易啊因為很多路口都在區域邊框附近啊。。這個的話如果從開頭結尾兩部分分開畫,最後合在一起,中間接壤的區域塊邊框是最容易隱形的,而且多用橡皮擦,應該至少能做到一眼看不出來。還有啊,長死路的結尾部分也經常利用邊框邊緣結尾,正好有牆嘛。

OMG好久沒碼字了好有成就感啊!LZ別太感動。。這玩意是我自己感興趣做的。。兩天時間畫完了一張,然後那個虛脫感啊。。感覺這一年都不會再做第二張。。我還以為就我這麼2對這玩意感興趣來著。。。

還有啊我寫了這麼多尤其是數字編號開頭的那些你不一定全部顧及到的。。而且我寫的很。。不知道看不看得懂,意會吧。。自己畫一個試試,在實踐中學習!


啊,這是一篇長~~~長的回答。

設計迷宮這件事兒,本來並非讓我情有獨鍾。不過前幾天,某個節目組找到我,希望我來給選手們設計一個有難度的迷宮,我覺得這件事兒有點意思,就稍稍研究了下,結果發現,還真有點意思。

說到迷宮,首先映入我腦海的,是《盜夢空間》里的一個情節:

盜夢者 Cobb 為了考察候選的築夢師 Ariadne 的能力,讓她在 2 分鐘內畫出一個需要用 1 分鐘來解出的迷宮。Ariadne 足足用了 3 次機會才畫出來。前兩次,她分別花了一層和兩層的方形迷宮,看起來有模有樣的,結果卻都被 Cobb 秒殺。但在第 3 次,Ariadne 畫的迷宮看上去很簡潔,卻把 Cobb 難住了。迷宮是這樣的

這是一個環形迷宮。(P.S. 這個迷宮無解,此乃《盜夢空間》的一大bug)

《盜夢空間》的這則小插曲,告訴了我一些關於迷宮的深刻的道理:

【1】迷宮的難易不完全取決於複雜性

看上去複雜的迷宮,其實不一定難,可能「干擾路線」的干擾性很弱;而看上去簡潔的迷宮,如果設計精巧,也可以讓人暈頭轉向。所以一味地擴大迷宮圖的大小,讓其看起來密密麻麻,但如果不能有效利用整個迷宮圖,就未必能讓迷宮變得更難。

【2】迷宮設計時間與解出時的間比值應該儘可能小

如果給予足夠多的時間,人人都可以畫出一個足夠複雜的迷宮。但如果你花了 10 個小時畫出來的迷宮,被人用 5 分鐘就解出來了,那這個迷宮並不比用 2 分鐘設計,卻要用 1 分鐘解出的迷宮更好。

當然,對於迷宮的設計,還應當有一些其它顯而易見的準則:

【3】迷宮的解應當是唯一或者極少的

在本題下,Lai朱應的回答 很酷,我也點了贊,但是仔細研究可以發現,迷宮並沒有真正意義上的死路,通過好幾處從岔路走也可以通,在 匿名用戶的回答 中指出,很多岔路本質上還是「捷徑」:

在現實中,這樣的「無死路」迷宮可能會有點繞,但是在平面上,尤其是在標記已走路線的情況下,這可能反而會降低迷宮的難度。

迷宮中多出現環形路線確實會加大迷惑性,但這些最好設置在岔路上,在正確路線上設計環線一不小心就降低迷宮難度了。

【4】迷宮不容易被固定的方式解出

在平面上的、方方正正的迷宮,最被人詬病的一點是:如果迷宮的入口和出口均在外部,那麼只要你貼著牆走,總能找到正確的路線。如果身邊有工具的話,瞬間就可以找到出口。比如,在 於康的回答 中,用程序設計出的迷宮看起來很複雜:

然而,只要你身邊有一個「畫圖」工具,用簡單的「染色法」(把相連的牆壁染成同一種顏色),就可以一下子看清楚正確路線,把這個迷宮「秒殺」:

在「染色法」下,再令人迷惑的「干擾路線」都會立刻無影遁形。

【5】「倒走迷宮」和「正走迷宮」的難度相當

很多人在設計迷宮時,總想著在入口附近設計大量岔路,但卻沒在出口附近設計足夠多的岔路。這使得玩家在解題時傾向於「倒走」迷宮,從出口往入口找路線讓迷宮變得十分簡單。這在設計迷宮時是值得注意的。

以上五條準則,是我設計迷宮時需要考慮的問題。

********************

那麼,如何設計一個有趣、簡潔,並且有一定難度的迷宮呢?

一個容易想到的思路是,將迷宮從二維擴展到三維。

但三維迷宮的設計並不容易,其中一個困難是:如何讓它 易於展示 呢?

眾所周知,在三維迷宮中,《仙劍奇俠傳三》中的迷宮的難度一直被人津津樂道,但它的難度很大程度上源於它的動態性質,比如用複雜的操作步驟解鎖機關等。迷宮的靜態性質並不複雜,三維迷宮本質上只是多層迷宮,僅僅是將很多個二維迷宮拼在了一起罷了。

這時,我手中的魔方給了我帶來了一些靈感。

與此同時,我也受到了《異次元殺陣》的啟發:

在一個小立方體組成房間里,我們可以朝 上、下、左、右、前、後六個方向行走,如果把這一個個小立方體堆成一個像魔方一樣的大立方體,並且在小立方體里限制一些方向的通行,不就成為一個三維迷宮了了嗎?

嗯,就叫它 魔方迷宮 吧!

**********

P.S. 在淘寶上,的確有一種叫「魔方迷宮」 的玩意兒,如下圖所示。不過,雖然它看起來是立體的,但其實只利用了立方體的六個面而已,沒有利用到內部,不是真正意義上的「三維迷宮」。

**********

那麼,如何設計 魔方迷宮 呢?

【1】

首先,為了方便描述,給魔方標一下號:

圖中是一個三階魔方。每個小立方體最多有 6 個門,除邊緣外,最多有 54 個門。

更一般地,對於 n 階魔方,除邊緣外,至多有3n^{2}(n-1) 個門。 (留作習題)

【2】

接下來,我們可以分層來描述迷宮。一個簡單的例子如下圖所示:

三個九宮格代表每一層迷宮的平面圖。

downarrow 」 表示可以通過該格連接到下一層,「uparrow 」表示可以通過該格連接到上一層。

我們的目標是,從 1 號格進入,最終從 20 號格出去。

這是一個看起來特別簡潔的迷宮(僅僅佔用了 27 個單位,從佔用的空間上來看,比傳統的迷宮要少得多),但找到正確路線卻並不是特別容易。

聰明的你,試試看吧?

經過認真思考後,你會發現,這個迷宮也不是太難。

正確的路線是:

1—2—3—6—5—14—17—26—25—16—13—22—19—20。共經過 14 個小立方體。

主要干擾路線有:

5—8—7—4,14—15—24—25—21/23/27

這個迷宮的干擾項還是比較弱的,所以不算太難。

【3】

如何畫這個迷宮呢?

很簡單,只有三個步驟:

(1)畫出一條複雜度適中的正解路線

路線過於簡單會降低迷宮難度,過於複雜的話會限制岔路,同樣會降低迷宮難度。

本題的正確路線是:1—2—3—6—5—14—17—26—25—16—13—22—19—20

從層數上講,是 從 1—2—3—2—3—2,有一定的複雜性。

(2)設計岔路,應該有一定的長度

為了保證解答的唯一性(迷宮設計準則第 3 條),設計岔路時,要注意避開正確路線。

並且要注意,從入口開始的岔路和從出口開始的岔路不能相互連接!必須讓所有岔路都成死路或者自循環的情況。

之所以說這個迷宮並不是很難,是因為限於迷宮的規模,岔路都不是特別長,並且從出口往入口走,迷宮會簡單許多,這違反了迷宮設計準則第 5 條。

(3)檢查迷宮,確保沒有不能到達的「死格」

考慮到迷宮設計準則的第 1 條,我們應該充分利用迷宮的空間,讓迷宮的每一格都能到達。這在二維迷宮中不是問題,但在三維迷宮中則要動一下腦筋。

綜上所述,掌握了一定的方法,畫一個三階的魔方迷宮可能只要 3 分鐘,但它的正解好像也不是顯而易見的,解開它或許也需要 1 分鐘,這就符合了迷宮設計準則的第 2 條。考慮到這樣的迷宮也不易用固定模式解答,所以也符合迷宮設計準則的第 4 條。真是一個設計精妙的迷宮啊!

也許有人覺得,這個魔方迷宮並不難,但要知道,這只是一個三階的魔方迷宮,而且作為示例,它出得並不難(比如倒走就比較簡單)。如果擴大階數,比如,五階、七階,甚至十階,迷宮佔有的空間依然不大,但複雜度卻大大增加了。保守估計,一個設計精巧的七階的魔方迷宮,或許能折騰一個普通人 20 分鐘以上呢!

要不,先來熱個身吧!

我用十幾分鐘畫了一個四階的「魔方迷宮」, 聰明的你,需要用多久來解開呢?

* 這個迷宮新增了兩個概念:

  1. 蟲洞」。從圖中看,應該不難理解:13 和 33 是連通的。

  2. 單向門」,只能從其中一側到另一側的門,用橙色箭頭表示。比如,在圖中,只能從 50 到 49,但不可以從 49 到 50;可以從61到45,但不可以從45到61。

** 加大難度:如果要求你從入口到出口後,再從出口回到入口,你會怎麼做呢?

********************

【如需轉載(分享鏈接不論),請務必聯繫作者】


首先要明確你想畫什麼樣的迷宮。如果是正統意義上的迷宮,即:

1. 由MxN個方格組成,每個格子四面可能有牆;

2. 每個方格(包括出口)到入口方格有且僅有一條路徑。

也就是說@喬治娜回答中的環和斷頭路都不允許,那麼這是一個簡單的連通性問題,可以使用以下方法:

1. 畫迷宮的第一行。

第一行非常簡單,你可以隨意用豎線把這一行的空間分割成幾部分。接下來要給每部分編號。建議用寫上數字的小紙片,或者自己發明一種隱蔽的標記。

每個編號代表了迷宮的一個連通區域。只有區域0和入口相通。其它的區域暫時與區域0(即入口)不通,彼此也不通。

到迷宮完成時,

元規則1:所有區域都將連通。

元規則2:不能出現環路。

接下來的步驟可以保證這兩條元規則。2. 畫下一行。

接下來每行需要重複兩個步驟:畫橫向的牆;畫縱向的牆。

2.1. 畫橫向的牆。

這一步里你可以隨意給上一行底下加上橫線,並留出一些開口:

但有兩個規則:

規則1:不能完全封死一個連通區域。也就是說你不能把相同標籤的所有區域都封起來。否則這個區域就不可能與入口連通,產生了一個"死區"。

規則2:開口寬度不能大於1。否則會產生一個"大房間",雖然不影響連通性,但也不符合正統迷宮的要求。

接下來把標籤移到開口處。你可能需要製作一些新的標籤。

2.2. 畫縱向的牆。

和第一行一樣,你可以隨意畫豎線:

只有一條規則:

規則3:同一標籤的兩個開口間必須用豎線分隔。否則就形成了一個環路,你的受害者(或英雄)可能永遠在迷宮裡繞圈:

接下來你需要把標籤合併一下。如果兩個連通區域現在接通了,它們應該使用一個標籤:

3. 按照2的規則畫下一行:

我製作了三個新的標籤:5,6,7。你也可以重用剛才合併掉的1和2。

4. 再畫下一行:

我重用了之前合併掉的標籤1,以表示一個新的連通區間。

現在有的連通區間被分隔成相距比較遠的幾部分,注意規則1:不能完全封死一個連通區域。

5. 想畫多少行都可以。。。

6. 當你決定結束了(或者紙不夠了),最後一行的任務就是把所有不同的連通區間都接通。(依然需要注意規則1-3:

最終完成品:

這個方法的特點是你想畫多長都可以,不會增加畫每一行的難度。另外這種迷宮用"老鼠貼牆根走"的方法是一定能走通的。


僅供參考:迷宮生成演算法

代碼在這裡:

chenyukang/Maze 路 GitHub

走出迷宮的演算法: 路徑規劃,A*,沿著牆走。

走出迷宮-路徑搜索


好吧我來一個,雖然有那麼高票的答案在前,可是迷宮是我中學研究了六年的東西,有一些跟@喬治娜 不同的心得。我的初中課本、高中課本上都畫滿了各種樣式的迷宮,有圓的有方的,有用直尺輔助也有手繪出來象腸子一樣的,還有模仿一些風景圖案的,k

先貼上我畫的最後一張迷宮。

從左上角走到中心的旗子處,請各位計算一下完成花了多少時間。

以前我畫迷宮都是用圓珠筆,從來不用鉛筆。因為太難,要給別人用鉛筆在上面做標記的,然後再擦掉讓另外的同學重玩,所以只能用圓珠筆;那麼,就得一次成型,沒有修改的餘地。所以,和@喬治娜 不同,我就得對迷宮的每一條路都瞭然於胸,不能自己都搞不清楚哪條路是正確的。

儘可能讓玩家迷惑,當然是努力的重點。有如下幾種技巧:

畫出若干條通路之後,自己憑感覺試走,然後把最容易忽視的一條路預定為正路,其他路以後都一一堵死;

我的迷宮中常有大量之字形的路線,是為了訓練出玩家的思維定式,認為這種路線就會導致一個什麼樣的結果,有意識的讓玩家忽視某些東西;然後到了後期,玩家會對正路視而不見。

難度極高、讓玩家受不了的路必須有通盤的考慮,不能只是局部的設計。所以,在及早期從外往裡面畫的時候,就要開始打好埋伏,修一些緊貼著現在的路的路,但是現在不接上去,等埋伏夠深的時候,再製造一些假象,從玩家認為絕無可能的地方接進去。

很多玩家說,倒著走;這個,大家不妨試試看,從內往外跑,看看能不能走出來?完善的迷宮必須有防止倒著走的機制。其實並不難,留出很大空間,再從里往外畫,然後跟從外往裡畫的路線接起來。

-------------------

得了不少票,可是沒人來報告一下成績啊?

這個不是以分鐘為單位的,而是以小時和天為單位的,不做標記的話我遇到的最厲害的人走了兩個小時,而大部分人很快就放棄了,而且抱怨說肯定是死的,沒有通路。後來他們用上了ps等等各種美術工具,才證明了這條路的存在。

我不大會用ps, 這個我是用微軟自帶的mspaint畫的,兩個小時左右,畫的眼睛受不了了。


一行代碼生成偽迷宮,在bash下執行:

while true; do c=(╱ ╲);printf ${c[RANDOM%2]}; sleep .0001; done

或者,在Windows命令行下執行:

echo var c = ["╲", "╱"]; while(true) { WSH.stdout.write(c[Math.round(Math. random())]); WSH.Sleep(10); } &> %temp%maze.js cscript /nologo %temp%maze.js

在Windows下用點陣字體的效果還不錯:


這兩天寫了一個非常simple的迷宮遊戲

生成迷宮的演算法用到了並查集,就是隨機拆牆,直到起點終點屬於同一個集合為止。

用戶可以用滑鼠單擊的方式玩迷宮,只有點擊的格子和之前已經選中的格子能連起來時才會點亮。

用戶可以選擇給出答案,答案是DFS得到的,用紅線標出。

代碼:QtStudy/MazeStudy at master · bingbingzhenbang/QtStudy · GitHub


一個偏門的方法,不要單純用垂直的線條,用多種顏色混淆視線。

追加:根據曾加的解法我試了做了一下我之前的一個迷宮:

染色法解雖然解出來了,但是還是需要點時間= =。

另外,個人認為,唯一解並不一定是最佳方案,在迷宮中的正解迴環同樣可以達到迷惑的目的。


生成迷宮的過程實際上是給網格圖畫生成樹,因此可以用下面的方法生成這種形式的迷宮(隨機化 Kruskal 方法)

  1. 把所有的小房間都用四面牆圍起來

  2. 如果所有的小房間還沒連成一片:
    1. 隨機選擇一面牆(你可以讓選擇各面牆壁的概率不等來製造「風格化」的迷宮,比如有大量橫向牆壁的)
    2. 如果它的兩側的兩個小房間之間沒有通路,就把這面牆拆掉,否則什麼都不做。因為每次拆牆都會聯通兩個區域,所以整個迷宮裡的小房間最終都會連到一起。
  3. 隨機選擇起止點,由於所有的小房間已經聯通,因此兩者之間的通路總是存在

ps. 不同方法生成的迷宮,其到起點的路徑長度分布是不同的,比如(cf. Visualizing Algorithms)

隨機寬度優先生成的迷宮

隨機深度優先生成的迷宮

隨機 Prim 演算法生成的迷宮

循環擦除隨機行走生成的迷宮


方形迷宮,路線可以指定的畫法:

用這種方法可以把正確路線畫成字母或者圖案的樣子↓

看出是什麼來了嗎?是MAZE。 :-P

用這種方法也可以路線不是圖案和字母的迷宮,只要忽略畫圖案的部分就好。(我畫帶圖案的迷宮時,總感覺圖案附近的難度被畫得很低…)

下面是畫法啦:

要是不追求這種方方正正的感覺的話,可以隨手畫,只是會畫成左側畫了三排,右側畫了兩排這種情況。所以如果想要美觀,我們需要一張點點紙(不追求美觀的自動忽略)。

有了格點之後不論是直接畫牆壁還是先畫路線再畫牆壁,都會很容易做到整齊。

點點紙可以買一張、列印一張,或者自己畫一張。強烈推薦列印的,又方便又快,而且點的大小顏色疏密都可以調。(可以用Excel,表格里的內容是"·")

畫迷宮時,我們會用線把所有的點點連起來,形成迷宮的牆壁,所以不用擔心畫完後圖上會有剩下的點。如果有,那一定是浪費了一部分空間。

下圖分別是買的、列印的、自己畫(沒畫完)的點點紙:

(*點開圖片才能看到前兩張上面的點點*)

然後用鉛筆在上面畫上自己喜歡的圖案,比如:

哈哈,然後把它畫成迷宮路線的樣子。這些點連成的線是迷宮的牆,迷宮的路就在四個點圍成的小方格子里。畫完以後是這個樣子:

畫路線時要讓路線都在"格子"里,不要畫到點上,也不要一個格子畫兩條路:

這樣主路就畫完了,下面用同樣的方法畫一些支路,並且用牆壁把它們圍起來。支路也可以自由發揮一下,不畫出來,直接畫牆壁。(我比較喜歡直接畫牆,而且感覺這樣畫的反而比較曲折難走)

畫牆壁的時候用鉛筆用中性筆都行,看手上有沒有準兒了~(我沒有)

支路和牆壁:

有時我會同時畫好幾個支路,或者一個支路畫到一半不想畫了又不想結束,就打一個標記上去。

支路的形狀和難易程度我也不會把握,大概畫多了就能找到方法了吧…以前同學總是吐槽我的迷宮像腸子一樣(喜歡用長線而且畫得不整齊),走的時候一臉嫌棄(他雖然畫的也不整齊但是愛用短線),然而現在我用點點紙了~

下面是幾個4*3的矩形死路的畫法,感受一下,哪個更讓你感覺是死路?哪個更感覺能出去的樣子?哪個一眼看不出來?(雖然說一眼看不出來還是過分了點,但畫迷宮時可以用這種方法,圈出一個小區域,然後多畫幾遍,自己找一個看起來最複雜的結構畫上去。)

畫完後是這個樣子:

然後用中性筆和尺子描一下邊(最痛苦的事情):

擦掉鉛筆的痕迹:

噹噹當~走一下吧~

完成~

=======其實事實並不是這樣子的========

我怎麼把它堵上了?!

沒關係,我有它,和它!

輕輕地塗一點固體膠在畫錯的位置,然後用橡皮死命地擦!

就變成了這個樣子:

也許我擦得太用力了或者紙不好…以前這麼做都很成功的…其實遠處看還是不明顯的,比透明膠帶要好一點!

(但如果不及時擦掉可能會發現紙上有一小團黑)

然後再描一下周圍的線,就OK了~

這就是剛才的效果圖。

讓我們以shi為鑒,畫出自己的迷宮吧~

還有在畫字母和圖案的時候,要注意不要和迷宮其他部分的風格相差太多,比如會畫出來特別對稱的結構啦,還有畫字母的時候用到大量的直線啦,之類的。要做到不能在走之前看出來是什麼圖案,又不要使難度在圖案處下降太多,又不要使圖案太瓢,走完也看不出來。(其實我也做不到嚶嚶嚶!)

感覺畫字母尤其難畫,兩個字母連起來的時候是從上面連還是從下面連也要考慮(比如我MAZE中的M就會被誤認為W…),而且佔據和分割了太多空間,導致支路太短太簡單……

下面是我畫的兩個E的比較:

右邊比較容易走之前被發現,但畫出來的路徑好看一些是不是?~完~


——2015.8.27更新,更新的內容是原來未完成的第四層迷宮。以及新做出來的 @曾加的三階魔方迷宮。

真是巧了,像 @張航一樣我也曾經在minecraft里畫過一個迷宮 。當時是一個妹子問我會不會畫建築的圖紙,她對蓋房子挺感興趣。但是我哪會蓋房子,我明明學的是手機貼膜這種科技領域的東西好嗎!後來我就跟她說不如你去玩我的世界吧,反正都是蓋房子,想怎麼蓋怎麼蓋。但她好像不喜歡玩,我又賤賤的說不如我們一起玩吧,她就說好啊。後來我說那我先去研究研究怎麼聯機,研究好了她又有事情就沒玩成。但我在等她的時候沒事做,就想不如我先創建一個世界然後做點什麼,等她進來的時候給她看看。後來就想不如畫一個迷宮好了,然後我就畫了一個迷宮。再後來又想不如把迷宮畫在天上,後來就真的在天上雲層的高度畫了一個迷宮,畫完了她還是有事,然後我就想不如在迷宮上面加一層天花板。加了天花板以後發現好醜,扁扁的就想不如在上面再來一層,啊啊啊啊啊啊啊啊啊啊啊,算了,太啰嗦了!!其實就是我畫了一個三層的迷宮把自己困在裡面出不來了,雖然我提前留了地圖也沒能走出來!!!

以下分別是第一二三層的地圖

這是它的樣子:

這是內部

它的出口在這裡,發光的是當時還想繼續增加層數,但是妹子不玩了,我也就再沒玩。

最後放上一張日出

——————————————————————————————————————————

更新內容:

在這個答案之後我又重新把之前沒做完的迷宮梳理了一遍。又加入了一些新的想法,在第四層里,做了一些小小的障眼法用來干擾右手法則。做完了這個之後,有知友建議做做 @曾加大神的魔方迷宮,我就嘗試著做了一下曾加的三階魔方迷宮,就是這張

因為我的第四層做的過程中忘記了截圖,也就沒有辦法展示。所以主要介紹做魔方迷宮的過程。

最開始的時候,因為考慮到採光的問題決定用玻璃材質搭建,最後做完了發現透明的玻璃會干擾視線。以下是全過程。這是第一面框架,上面的彩色玻璃是試驗效果的 。

這是最框架底層

搭建整體框架的過程

然後是把裡面的內容按照原理圖一一對應的做出來。我覺得整個過程最難的就是這了,因為很容易找不到方向,必須非常仔細的去對照和辨別。還有一個問題是上下通道。最開始打算是用梯子,後來發現,在這裡玻璃表面是無法附著梯子的,最後只在天花板上打了個洞當做通道。所以這個迷宮必須是在上帝模式下才可以探索的 (哦,對,也只能在上帝模式下探索,因為它本來就在天上,哈哈哈)

再接著就是給外牆染色,做成魔方。

整個過程就是這樣。我進去轉了一下,效果不太好。非常容易看花眼,比我近視眼還難受。

但是不可否認這個迷宮非常有意思,可以發揮的地方有很多。

就這樣。


提供三個生成迷宮的代碼:

(1)Shadertoy BETA

void mainImage( out vec4 O, vec2 U )
{ O += .1/ fract( sin(1e5*length (ceil(U/=8.))) &< 0. ? U.x : U.y ) - O; }

只有一行代碼,可生成如下圖像:

(2)Shadertoy BETA

void mainImage( out vec4 O, vec2 U )
{ // conversion to hexagonal coordinates
float r = sin( 1e5* length( ceil( U *= mat2(12, -7, 0, 14) / 1e2 )));
O += .1 / fract( r &> .5 ? U.x : r &< -.5 ? U.y : -U.x-U.y ) - O; }

兩行代碼,生成如下圖像:

(3)Shadertoy BETA

void mainImage( out vec4 f, vec2 g )
{
f.xyz = iResolution;
g = (g+g-f.xy)/f.y * 9.;

g.x = atan(g.x, g.y) * 1.7 * floor(g.y = length(g));
f += step(.1/ fract( cos(6e4 * length ( floor(g) )) &< -.8 ? g.x: g.y ), .6) -f; }

這個複雜點,有四行代碼,生成的迷宮如下:

唉,有一種代碼叫別人家的代碼,牛B得不要不要的!


小學初中的時候迷戀迷宮= =自己在家畫,還出了個本子...然而已經找不到了

迷宮這東西走起來難畫起來不難,比較考驗耐心。

一般都是先確定正確路線,可以是隨機的路線,也可以是連起來的漢字或者英文什麼的,之後就是隨便畫了╰( ̄▽ ̄)╭可以設置許多入口或者在迷宮中插一些奇怪的東西【誤

貼一張初二畫的,六芒星是終點≡ ≡其他的都走失只有這一張了【請自行後期掉我鬼畜的線條


本來只想在知乎做一個安靜的讀者,但當看到最頂的回答,看到我小時候最喜歡畫的一種迷宮,忍不住要貼我一張十多年前丶還是小學生的時候畫的一幅迷宮。

我那時候稱這為"老樹盤根"式迷宮。

看到有回答表示這種迷宮多個解丶沒有死胡同的特性會大大降低難度。我個人反而認為這種迷宮最可怕的地方反而是這個特性。沒有明確的死胡同,玩家不知道自已是否正在走進"死胡同陷阱" (如果死胡同夠複雜的話),更不知道自已是否有進展。基本上畫到後面連我自已也走不出這個迷宮 :/

不過畫這種迷宮最怕的是,不小心畫了一條直達終點的高速公路。我的做法是,把迷宮分成幾個區域,一個連在一個的後面:

起點 --》區域 1 --》區域 2 --》?? --》終點

區域之間只有一條小路連接。因為是3D,所有區域能穿橫交叉丶重疊在一起。這樣,玩家分不出這些區域??如果夠用心設計的話。

這個做法的好處帶三個:

1. 確保迷宮的難度和解的長度,不會不為意地畫了一條直達終點的高速公路

2. 每一個區域本身就是一個大死胡同,增加迷宮的難度

3. 正走和倒著走難度會是一樣??如果後面區域和前面的區域一樣用心畫的話。

小時候一直想畫張很大的迷宮,去逼死密集恐懼症患者,但從來沒有耐心做到。這一張已經是我畫得最密集的一張,但還是有很多空白的地方,而且很多道路連接畫得很差很馬虎很難看。 最後用盡了小學生的耐心而放棄,連終點也沒有畫 =="。

如果有興趣玩的話,可以用左上角那支3號旗當作終點。另外因為帶後面的路畫得很媽虎,所以這張迷宮倒著走的難度應該比正走小很多。


中學時代流行過一段時間畫迷宮,可惜我的草稿大部分都已經遺失了,前段時間收拾東西發現了一張(2010左右),趕緊複印+拍照,保留下來了:

面積不大是因為那張紙就這麼大。

黑塊不是畫錯了,而是立交橋,限制只能通往對側。

箭頭表示單向通行,然而並沒有什麼卵用。

後來接觸了編程,做數據結構結業設計的時候做了一個迷宮程序(2007):

後來把它改成了一個屏保程序:

代碼位置:Shilyx/MazeScrnSave · GitHub回到題主的問題,如何畫迷宮?

手繪:

1、先在腦子中想一條大致的通路,要曲折和出人意料;

2、路線也不要太曲折漫長,因為那樣的話可能隨便找一個位置就是必經之路;

3、繞圈圈,不要把通路都留在圈圈的正中心,那樣看起來複雜,其實不難繞。要在圈圈的不顯眼的地方打開一堵牆;

4、引入高架橋、單行線等概念,我畫了很多之後逐漸有了這些概念,就像例圖中一樣;

5、更複雜的概念就是多層迷宮,當時比較了解熱血傳奇,豬洞就有好多層,因此我畫了好幾張紙的迷宮,每一張都有向下或向上的洞口,可惜找不到了;

6、畫迷宮很重要的一點是有人願意去破解,這樣才能相互促進,出題和解題的都不斷進步;

機器繪:

1、在一張全是牆的方格圖上選擇一個點開始隨機探索;

2、遇到牆且牆後邊沒有被探索過則打開牆;

3、四面都探索過了,回退;

4、保留四周的圍牆;

5、這樣就得到了一個迷宮,它有一個性質:從任何一點到任何另一點都有且僅有一條通路;

6、如果想讓迷宮可能無解,隨機建立一批牆;

7、如果想讓迷宮可能有多個解,隨機刪除一批牆;

8、選定開始點和結束點,可以是任意點,也可以選擇在邊緣形成入口和出口;

機器尋路:

1、從起點開始,向沒有牆的方向進發;

2、探索過的地方不再次進入;

3、無路可走則回退;

4、到達終點結束;

5、退回起點失敗,結束;


先畫一條複雜的路,然後用類似路的線條填充空白。越複雜越好。


考慮一個簡化版本:你不是畫牆壁,而是畫出可行的道路。你會發現這極其簡單。

隨手畫了一個,不好看,不過意思到了就好,畫一個這麼小的一分鐘都要不到。

原理相同,可以強迫自己畫方格子。下面這個右下角畫敗了,請無視。

你畫的東西在圖論上就是一棵樹。既然是樹,我們知道,只要隨便往圖上增加邊,並且確保一直沒有環,就可以了。當然,如果你不要求唯一解的畫,有一些環也沒問題。環太多了難度容易降低就是了。

那麼現在回到原問題,你會發現其實如果畫好了道路,構造一組牆是很容易的,而且也沒有任何需要思考的地方,只要在路和路之間都分開就好。

從圖論上看,想像兩張格子圖,一張是包含所有紅線的那個格子,一張是包含所有黑線的那個格子,則紅線圖的每個節點對應黑線圖裡的一個方塊,反之亦然。這兩張圖是對偶的。(Dual Graph -- from Wolfram MathWorld)

然後繪製的過程中你腦中想像黑線,但是不畫出來,直接畫紅線,就可以直接成型了。一般來說,畫牆的同時就留出來一些介面以便往外面接,比較方便省事:

(上圖是畫了一半的樣子,從這裡可以看到三個介面)

下面是完成圖,把三個介面繼續往外接,有時候掐掉一兩個,有時候再分個叉,最後確保活著的那個接到終點即可。注意這個流程有很多變化,你可以不用方形格子,你可以先畫好正解的道路(但是留很多介面出來以便接下來添加死路),你可以畫交叉道路,奇怪的外形等等等等。


可以看看暖通行業的「地暖盤管」圖,隨便加幾個或者打斷幾個枝節就是很好的迷宮平面圖了。


樓上各位都是數學角度(平面或立方體)對迷宮的解讀,這篇答案或許可以視為建築學意義迷宮的設計。

若將各位的平面圖視作投影,將其反推為空間,並將人置入【注意,從此處開始拋棄上帝視角,只討論人體感知】。按照博爾赫斯對迷宮的理解,最難的迷宮大概是兩種——處處在變的空間與處處相同的空間。據此,則有以下最簡單操作手段,通過改變牆體來增加迷宮複雜度:

1.反射:處處相同的空間——壁面全部為鏡子,且【精細設計牆體使之儘可能具有體量感,即厚度(至少開口厚度)與道路寬度相等】。人走到任意空間,周圍均為互相重複倒影,難以區分方向。

2.開闔:處處變化的空間——將平面內部全改為思路,再將八成以上且方向不同的牆壁變為可九十度打開的平開門。每打開一扇門,所處空間變化一次,令人對走過的路難以產生直觀認識。

3.尺度:將牆體及門做得超尺度,無論極大或極小——這裡極大相對簡單,僅僅是視線的遮擋。但極小則對人在迷宮中的行走姿態產生限制,如只能匍匐。在姿勢反常的情況下,人體專註於姿態的調整而難以對曾經經過的空間產生正確認識,從而達到干擾記憶以增加難度的狀態。


推薦閱讀:

如何評價《移動迷宮2:焦土試煉》?
如何看待《最強大腦》中的國家寶藏和蜂巢迷宮挑戰?

TAG:藝術 | 思考 | 迷宮 |