2015年2月5日 星期四

[遊戲理論]20個關於六角格的有趣小知識


原作者:Herman Tulleken 九月,12號,2014 原文轉載自 (Gamasutra : 20 Fun Grid Facts (Hex Grids)) 以下文章內容,除經另行註明,係由Gamasutra社群的成員所著。 其中表達的想法與意見為該作者所有,並不代表Gamasutra以及其母公司。



http://www.gamasutra.com/db_area/images/blog/225495/FGF%20Cover.png


  當時我們泡在Gamelogic這個網站上,就對格子這樣的概念相當著迷。我們製作了和格子有關的工具,寫了和格子有關的文,但我們對格子的狂熱程度遠多於此(我們甚至還有週五格子服日)。

  我們極盡所能地探討關於格子的一切以及如何應用至遊戲內,若我們能將其中一些好玩(還有些冷僻)的發現分享出來的話,想來也許是個好主意。我們固定每天在推特上(Twitter)上分享簡短的知識已經一段時間了;在此我們將廣泛討論那些知識,並再多追加一些內容。這些都和正六角格有關,同時也是我們最喜歡的其中一種格子。
  如果你想要分享這個格子推廣運動,請上推特追蹤我們(@gamelogicZA)或是去查看hashtag #fungridfacts.

有趣的小知識之一:爭位棋(Agon)是歷史上就我們所知最早使用六角格的遊戲


  似乎到了近代六角格才開始使用於遊戲中。就我們所知,爭位棋──又被稱為皇后的衛兵(Queen's Guard)──是第一個使用六角格的。它最早出現在十八世紀的法國,因為規則簡單明瞭但策略多變複雜而大受歡迎:每個玩家擁有一個皇后和六個衛兵。玩家決定誰先攻後,接著互換回合。每個回合中玩家只可以移動一個棋子。遊戲的目標是搶先將皇后移到中心六角格(棋盤正中央稱作皇位),並以六隻衛兵簇擁皇后。



http://www.gamasutra.com/db_area/images/blog/225495/FGF1.png


有趣的小知識之二:John Nash (電影美麗境界裡的主角)以”現學現賣策略”的證明,改良了六貫棋(HEX)

  六貫棋是一種在正六角格上玩的桌上型策略遊戲,可有任意大小和數種盤形的。最初是由丹麥數學家Piet Hein 在約1942年間發明的。遊戲的目標是要用格子形成的路徑從一端(標有玩家代表的顏色)連到另一端,先達成目標的人獲得勝利。
http://www.gamasutra.com/db_area/images/blog/225495/FGF2.png
  六貫棋不可能和局,必定會有一個贏家出現。唯一能阻止對手完成路徑的方法就是完成自已的路徑。

  John Nash 在1947年獨自改良了這個遊戲。他證明了先手的玩家可以用” 現學現賣”原則來確保勝利:任一方玩家皆可藉由冗步來鎖定勝局。所以,如果後手玩家有個必勝策略,那先手玩家就可以「偷來用」。先手玩家只需要隨便走一步,然後再照著後手玩家的策略走即可。如果你在照搬必勝策略時碰到已下過的格子,只需要再隨便走一步棋就行了。如此一來便確立了先手必勝。

有趣的小知識之三:在紙上設計六角格遊戲的機制和演算時,可以用牆磚格代替
  在計算演算法和遊戲機制時,畫畫是一個很好的方式,但在紙上畫出一格一格的正六角格是非常非常煩人。當然,你可以影印,但當你突然有了靈感(或是你和我一樣得畫很多圖),那你必須要很快地在紙上畫出六角桘。一個簡單的解決方法是用畫牆磚的方式,如下圖所示。畫這個又簡單又快,而且它包含了六角格的拓樸特性——每個格子都有六個鄰居,而且也通用一樣的連接規則。


http://www.gamasutra.com/db_area/images/blog/225495/FGF3.png

有趣的事實之四:任何平行四邊形的四個角只要在六角格平面上,其面積將會是六角格的整數倍


  回想一下,在一般歐基里德(Euclidean)的向量空間上,兩邊兩向量分別為(x1,y1)和(x2,y2)的平行四邊行面積即為|x1y2 - x2y1|。所以,如果所有的要素都是整數的話,那面積也是整數。但如果我們對這些點平行X軸進行推移的話,則面積保持不變,所以如果我們將背景的四邊形格子換成六角格,那麼所有平行四邊形的面積仍和在矩形點格上時相同,,所以也一定會是整數。


http://www.gamasutra.com/db_area/images/blog/225495/FGF4_1.png


http://www.gamasutra.com/db_area/images/blog/225495/FGF4_2.png


  從這個事實可以推論,任何一個頂點在六角格平面上的三角形,它的面積會是整數的一半(因為三角形的面積是平行四邊形的一半)。因此,任一個頂點在格子上的多邊形的面積都會是整數的一半。


有趣的事實之五:一個環繞起來的長方形可形成一個圓環。一個環繞起來的六角形也一樣可以
  因為每臺螢幕都是長方形的,所以將一個四邊形的一邊和另一邊相連環繞起來是一個很容易想像的概念。要如法炮製將一個六角形邊對邊接起來,可就不容易直接推想了。事實上,方法不只一種,而且還得視六邊形的形狀而定。
  將平行六角格環繞的方法按環繞長方形類似。這其實相當直觀,而且應該不難理解其與圓環的拓樸關連。六角格中更令人激賞的圖形是正六角格。在這個例子中,如果你從一個邊出發,你會從另一端出來。但不若平行四邊形,在這個例子中得要繞行六角格兩次才會回到出發點。這很不容易查覺,但這也對應到圓環的拓樸概念。下圖會解釋這是怎麼運作的:


http://www.gamasutra.com/db_area/images/blog/225495/FGF5.png


有趣的小知識之六:大於一個格子的蜂巢方陣(Magic Hexagon)只有一種可能存在


http://www.gamasutra.com/db_area/images/blog/225495/FGF6.png


  在魔術方陣裡,數字從一開始數,有多少格子就有多少數字,有不同大小的各種可能存在。但是,除了單格方陣外,蜂巢方陣(註:也就是三種方向每一行的加總是一樣的,而且數字一定要從1開始)只有一種可能存在(先不管翻轉和旋轉)。方陣圖型中如果每個格子內的整數是從一開始的連續整數,則稱為常態。非常態的方陣圖型的數字則是從任一個數字當做起頭的為連續性整數。如果是非常態的的話,那蜂巢方陣會就有很多可能性。






有趣的小知識之七:將六角格的球形填充概念立體化就是
菱形十二面蜂巢(Rhombic dodecahedral honeycomb)

  一個圓形可以剛好被同樣直徑的六個圓形給圍住。你可能覺得球體也同樣適用——一定數目的球可以剛剛好圍住一個球。不過,這是不可能的。我們可以用大概十二個球圍住中間的球,但還是會有個無法再容入一顆球的空隙(這也被稱為牛頓數Kissing number problem)。



  菱形十二面蜂巢是在三維空間的棋盤形分佈。這也就是面心立方球形填充——即目前所相信能夠將相同球體以最大密度堆疊的方法——的沃羅諾伊圖版本。面心立方的球體堆疊是在堆疊一堆球體時(例如說砲彈)會使用的方法。在Gamedev.stackexchange上有相關的討論。


http://www.gamasutra.com/db_area/images/blog/225495/FGF7.png


有趣的小知識之八:長方形或三角形的格子可以滑動,但六角格不行

http://www.gamasutra.com/db_area/images/blog/225495/FGF8.png

  因此六角形俄羅斯方塊運作地不是很順──你無法像在玩四方形俄羅斯方塊那樣將長條連塊滑進長條形的開口。
  你可以把格子用得小一點來解決這個問題。另一個解決的方法是將六角格換成圓形。圓形的邊邊雖然會互相碰撞,但還是會下滑,這在滑磚類遊戲可是必須的。


有趣的小知識之九:六角格網可以用來當做三角形格網的依據



http://www.gamasutra.com/db_area/images/blog/225495/FGF9.png


  六角格網和三角格網的關係就如下圖所示。手法就是用利用三種顏色來做區分。一個顏色代表的是角往上的三角,一個代表角往下的三角,而另一個代表的是頂點部份(看圖中的六角格顏色)


  如果你沒有處理過三角格網的話,你可能沒辦法一下子搞懂這要如何簡化數學計算。三角網格在座標軸上是不易定位的,所以要以六角格網和四方格網的方式進行向量計算來算出簡單的幾何問題是不太可能的。以下圖的例子來說,以如此的三角網格座標定位,是不可能利用向量的"偏移量"來進行推移計算。然而,如果利用底下的六角網格,你就可以輕鬆寫意地用偏移量和,和形狀的不等式(說明在此)來進行向量運算,這麼一來你就可以用矩陣乘法的方式來計算旋轉和鏡射了。




有趣的小知識之十:六角形仿樂高積木有兩種,普通型和平邊型


  六角形的積木提供了一些有趣的可能設計。這兩種形式的積木如下圖所示。

http://www.gamasutra.com/db_area/images/blog/225495/FGF10.png

  藉由巧妙地放置接頭和插槽,這種積木可以像樂高一樣用”到位"的堆疊形式,或是跳脫出另一種”間接到位”形式。


  邊外也保留了空間,所以接頭可以放進”間接插槽”裡。


  你也可以用專門用來連接的積木來將方形和六角形的積木合在一起用。

有趣的小知識之十一:六角格可以為火星建築帶來結構的完整性

http://www.gamasutra.com/db_area/images/blog/225495/FGF11.png

  沒錯,六角形住宅不是蜜蜂的專利。
  上圖所示的房子被稱為蜂后B型(Queen B),設計用來保護人類免受火星上惡劣氣候和放射線。這個網站有提供關於此種建築的特性,以下列出其中幾點:

  •   標準配備包括功能齊全的廚房、兩間臥房、兩間浴室、花園、3D列印實驗室、娛樂間、洗衣間、減壓室和放濕衣物的玄關。
  •   厚實的屋頂結構可以讓室內恆溫,同時也可以抵擋碎片撞擊。
  •   利用貧鈾皮來貼在牆壁上可以將放射性程度降低到安全的層級
  •   充滿藝術性的設計可以成為搶佔目光的新聞話題,同時對宣傳火星任務有和招攬志願者有正面影響。
  最後一點對遊戲來說特別有關聯:六角格建築讓宣傳變得更容易 :-)

有趣的小知識之十二:在六角格網中,無法只用兩種顏色使每個相鄰的格子顏色不一樣


  這有時不利於兩人遊戲。

http://www.gamasutra.com/db_area/images/blog/225495/FGF12.png

  但如果多於兩個以上的顏色的話,就可以辦到了。三顏色模式被運用在六角西洋棋(Hexagonal Chess)中。其中主教棋的移動方式設計成必須要在同一個顏色上,也就是和一般西洋棋一樣。



有趣的小知識之十三:沒辦法只用正六角格來鋪成球體

  最接近的例子是以十二個正五角形組成的類球體。像這樣的半正規形式的球體,是以正二十面體(用二十個三角形組成的多面體)做為基礎的。請看以下影片:




  用正六角格和正五角格來組成球體有很多方法,而化學家則是將它們和富勒烯(Fullerene:碳分子組成的球形、管狀等等)一起來研究。


http://www.gamasutra.com/db_area/images/blog/225495/FGF13_2.png




  圓柱體、圓環、甚至莫比烏斯帶(Möbiusband)都可以用正六角格來組成。
http://www.gamasutra.com/db_area/images/blog/225495/FGF13_1(1).png
http://www.gamasutra.com/db_area/images/blog/225495/FGF13_3.png

  雖然你沒辦法只用正六角格來組成球體,但你可以用做出類球體圓環或柱體的方式來取巧。其中一個樣版被運用在Antipod這個遊戲中,你可以點這看看這個遊戲是怎麼運作的。

  另一個方法是用彎曲的正六角格(也就是說像圓環那樣)將它變化成半球體的樣子,就像我們在這個連結裡所做的。

http://www.gamasutra.com/db_area/images/blog/225495/HexSphere.png


有趣的小知識之十四:六角系統是以邊和邊相連的N個正六角格所組成的平面圖案,也就是一般所謂的正六角格鑲嵌

  在俄羅斯方塊中(Tetris)的磚塊被稱為四格骨牌(Tetrominoes:四個邊邊相連的正方形所組成的磚),也同時是四角系統的子集合(Polyominoes:任意數目的邊邊相連的正方形所組成的磚)。和四角系統相對應的六角形被稱為六角系統(Polyhex)。

http://www.gamasutra.com/db_area/images/blog/225495/FGF14.png
  有許多的遊戲都是由六角系統所組成。最常見的一種就是要求玩家用指定的六角系統磚塊去組成特定的圖案。目前沒有任何的公式可以算出指定排序下的六角系統數目。


有趣的小知識之十五:在平頂和尖頂之間做選擇,並不只有審美觀的考量



http://www.gamasutra.com/db_area/images/blog/225495/FGF15.png


我們在Gamedev.stackexchange上的討論串中蒐集了關於此問題的優缺點

  • 平行的排列方式符合鍵盤的排列方式。對於尖頂的六角格來說,你可用WEADZX來當做移動方向的依據(註:看看你的鍵盤,是不是一個六角形?),也就像我們在方格系統上使用WASD。但若是垂直排列的話,就會是QWEASD比較適合了。

  • 平行排列的六角格最適合用在3D的等角視點(Isometric perspective: 最常看到的例子就是45度俯瞰視角)中,因為最底的那一排靠你最近,而最頂的那排則離你最遠。在這種排序方式中,位於高處的精靈(電腦圖形學的精靈)不會擋住它格子的中心點,而只會擋到邊邊。而重直排列的六角格則適用於由上往下看的視角。

  • 如果你選擇使用重直排列的方式,你可以試著把六角格的寬調成高度的兩倍,達到完美的圖像精準。和六角格的寬度一比,相對狹小的高度會產生景深,特別是當物件放置上去並和後面的格子重疊時。

  • 對一個NxN的網格來說,平行的排列方式會讓寬比高還長,就像電腦螢幕一樣。也就是說,用平行排列的格子來顯示地圖的話,會比較符合您電腦螢幕的長寬比例。根據螢幕上看到的區域和地圖大小,這可以給玩家更好的視野,而且可能會減少畫面捲動的次數。

  • 以垂直排列方式來看,每一面牆都是看得到的。如果你用了平行排列,且同時牆壁是剛好延著垂直線,就不太能在上面加上太多細節(像是門之類的)。而且,如果你有用到先前所說的視點技巧的話,你的格子會看起來漂亮許多,因為你可能必須要加你的格子壓縮。如果你壓縮的是水平排列的網格,那他的斜率會非常的低(大概正負1/8),而重直排列的只會被壓縮為正負1/2左右。也就是說,如果你在模擬鳥瞰視點並使用點陣風格的話,垂直式排列會看起來更順眼。


有趣的小知識之十六:只有三種型態的凸狀六角格有辦法自行組成一個平面(也就是可以做成網格)

  別種(也就是非常規的)六角格也可以組成一個平面。而對凸狀六角格來說,僅有三種可能性,其條件如下:
http://www.gamasutra.com/db_area/images/blog/225495/ref.gif
  • A + B + C = 360, a = d
  • A + B + D = 360, a = d, c = e
  • A = C = D = 120, a = b, c = d, e = f


http://www.gamasutra.com/db_area/images/blog/225495/FGF16.png

  你可以用底下這個軟體中來玩玩看怎麼疊


(對五角形來說,沒有人知道有多少種的五角形可以給成平面,但我們已知的數目有至少14種,但可能有更多)



有趣的小知識之十七:複數可以取代向量用來做六角格的坐標功能


  複數(a+bi)可以取代向量用於網格坐標系。在長方形格子上,這些複數是為高斯整數(Gaussian integers)。在六角格上,則被稱為艾森斯坦整數(Eisenstein integers)。

  這些整數和真正的整數有多個共同的特性。例如,同樣有著整除和餘數的概念,因此得知如何定義質數,藉以建構完整的數論。

http://www.gamasutra.com/db_area/images/blog/225495/FGF17.png
  這些整數也可以應用在特定的演算法,像是在為其他許多演算法的建構上色。
還請參照以下連結:


有趣的小知識之十八:三角格和六角格有非常密切的關係



http://www.gamasutra.com/db_area/images/blog/225495/FGF19_2.png
  這個意思就是,任何一個在三角形格頂點進行的遊戲,並不如表面所見,其實是在六角格上進行。這個事實對於遊戲設計和演算法設計來說都很有用。(如果你用在跳棋,邏輯上你應該使用六角格而非三角格!)

http://www.gamasutra.com/db_area/images/blog/225495/FGF19_1.png


有趣的小知識之十九:三角格子可以被用來取代六角格以減少格子組的數量

  許多格子類遊戲的邊緣經過設計,得以組合成更大的其他形狀。這種組合所需的格子數可能會非常多。一個解決方法是將六角格拆成為三角格。這樣可以大幅度地減少所需的格子數。這對電腦遊戲來說特別方便,因為可以設定從玩家角度看不到三角格。


http://www.gamasutra.com/db_area/images/blog/225495/FGF18.png


有趣的小知識之二十:六角格可以用來製作成假3D的立方體

  一個立方體的等角投影(Isometric projection)就是一個正六角格。把每一個六角格分成三個四邊形,再加上合適的渲染,六角格就會看起來像堆疊起來的立方體。(如果你將每一個四邊形視為一個格子,那這個格子就是一個菱形格。菱形格同樣的利用六角格為根據來做運用。)
  這個事例被運用在許多的遊戲上。Q*bert是第一個利用此原理的電玩遊戲,推出當時(1982)因其3D效果而讚譽有佳。

http://www.gamasutra.com/db_area/images/blog/225495/FGF20_2.png

  如果將正六角形堆起來的話,便能造出更多有意思的3D效果。許多卡牌遊戲用過這招,像是底下圖示中的數款遊戲。



翻譯:XDorz87
校正:Milkreaver

沒有留言:

張貼留言