【搗蛋豬新創(chuàng)/電路】開造之前:魔方(重制)
游戲作者:原野與森林

今天我來帶著大家在新創(chuàng)unity中手搓魔方
首先,我們要先認識一下魔方
“魔方,又叫魯比克方塊,最早是由匈牙利布達佩斯建筑學(xué)院厄爾諾·魯比克教授于1974年發(fā)明的機械益智玩具。魔方擁有競速、盲擰、單擰等多種玩法,風(fēng)靡程度經(jīng)久未衰,每年都會舉辦大小賽事,是最受歡迎的智力游戲之一。
通常意義下的魔方,是指狹義的三階魔方。三階魔方形狀通常是正方體,由有彈性的硬塑料制成。常規(guī)競速玩法是將魔方打亂,然后在最短的時間內(nèi)復(fù)原。廣義的魔方,指各類可以通過轉(zhuǎn)動打亂和復(fù)原的幾何體?!?/p>
—來自百度百科
眾所周知:魔方是一個有六個面的正方體。(這里魔方的含義取狹義的三階魔方)
國際上規(guī)定藍色在正面,紅色在右面,黃色在上面(可以推得藍色的反面綠色在后面,同理,橙色在左面,白色在下面)

網(wǎng)絡(luò)上通用的魔方的公式中
F代表Front 前面,即正面順時針轉(zhuǎn)90度
U代表Up 上面,即上面順時針轉(zhuǎn)90度
R代表Right 右面,即右面順時針轉(zhuǎn)90度
B Behind 后面,D Down 下面,L Left 左面 以此類推
而F'(右上角加了“ ' ",這個代表逆時針)則是正面逆時針旋轉(zhuǎn)90度,同樣可以以此類推


好了,我們已經(jīng)基本認識了魔方,現(xiàn)在我們將在新創(chuàng)中實現(xiàn)關(guān)于魔方的功能

魔方是一個三維的正方體,而搗蛋豬卻是一個2d沙盒游戲,所以如何在搗蛋豬中里表現(xiàn)出魔方成為了一個難題
有兩種思路:展開圖和投影
由于投影表示有些不太真實(指因為光柱長度固定,角度只有45度,而導(dǎo)致造出的效果不太立體,且布線體積增大),所以我選擇了展開圖表示



如何表示色塊也是一個難題,在搗蛋豬中,染色框生成器和染色框套光柱都可以表示顏色
使用光柱是毋庸置疑的,因為它延遲低,占地小,但是顏色很淡,需要虛化重疊

目測,五個光柱就能帶來不錯的視覺效果(不錯的視覺效果:指看起來不是很淡)

好了,現(xiàn)在邊邊角角等問題已經(jīng)解決了

正文開始(如何將魔方“轉(zhuǎn)動”)
在上一篇專欄中,我用了時序電路和極其復(fù)雜的卡諾圖,荒謬地認為魔方轉(zhuǎn)動可以使用常規(guī)的時序電路實現(xiàn),冷靜下來的計算令我冷汗直冒,我察覺到那樣的魔方需要(2*6)+6=18個輸入和16*9*6*6=5184個輸出,即使每個輸入和輸出用導(dǎo)線“硬連”起來,且我的想法正確,它的工作量也是我無法承受的。

于是我采用了新的想法,

為了方便理解,這里只給出了魔方每個面的中心塊
說一下這個圖表示什么意思,F(xiàn)RU分別表示正面、右面和上面的中心塊的顏色信息,在復(fù)原的狀態(tài)下,F(xiàn)的顏色信息是藍色,R的是紅,其它不必多說。
將整個魔方在復(fù)原狀態(tài)下以正面和后面的中心連線所在的直線為軸,順時針轉(zhuǎn)動90度,即Z
僅看中心紅色塊,中心紅色塊會移動到底面的中心處,在這個過程中,電路會將顏色信息從R傳遞到了D',隨后,D'將顏色信息傳遞到D。同樣,D會把顏色信息傳遞給L',R'也會接收到來自U的顏色信息。
數(shù)據(jù)的傳播路徑可以通過晶體管的起到開關(guān)作用控制。因此,魔方的轉(zhuǎn)動被實現(xiàn)了。

不過,隨之而來的還有一些小問題,由于魔方有六個顏色,需要三根數(shù)據(jù)線表示,這會導(dǎo)致布線體積病態(tài)增大。

感謝@天平搞不懂哎提供了同步通信電路使一根數(shù)據(jù)線代替三個根成為了可能。

經(jīng)過我的簡單運算,魔方僅是電路部件,可能就需要40000+。面對如此龐大的電路,放大屏幕觸發(fā)一個大的高電平很不現(xiàn)實。
于是我造了這個

“觸發(fā)物是鼠標,觸發(fā)物是鼠標!”
完