程式設計師技術宅萬聖節自制“南瓜俄羅斯方塊”
南瓜燈是萬聖節必備的東西,但如果把南瓜和經典視訊遊戲俄羅斯方塊結合在一起,會產生什麼新東西呢?Pumpktris(南瓜俄羅斯方塊)!國外程式設計師技術宅 Nathan 童鞋就 DIY 了一個 Pumpktris,把做好的電路板放在南瓜中,南瓜柄當遊戲控制器,完全可以打一把!(看文中視訊)
Nathan 還把製作“南瓜俄羅斯方塊”的過程製作成文。
創意
寫下所有瘋狂、一閃而過的想法,這是我的習慣之一,然後回頭再檢查,而不是當時做判斷,這樣也不會把創意忘掉。在10月份初,我在回想去年的一個創意,製作“南瓜俄羅斯方塊”。我的最初計劃是給南瓜塑形,在南瓜成長的過程中,把南瓜整成俄羅斯方塊遊戲中的各種形狀,然後在萬聖節把這些整形後的南瓜拼堆在一起。因為離萬聖節也沒多少周了,想種南瓜,也晚了,所以我想:為什麼做一個可以玩俄羅斯方塊的南瓜呢?
我還有一塊沒有用過的 LOLShield(譯註:一種 9×14 的 LED 板),我也知道之前有人在這個板子上編寫過俄羅斯方塊遊戲。,所以我有了個簡單想法,南瓜上鑽一些洞,放 LED 燈,再做一個控制器,就差不多了。噢,不對,那樣會不會太簡陋了。LED 燈又小,並且都集中在 2×3″ 大的地方。這樣不行!
B 計劃:還是用 LOLshield,但不把LED燈安裝在板子上,我將在外部把它們連線起來,這樣我就能在南瓜上把它們隔的更開了。還好我在這條路上沒有走太遠,就發現方法不對了。因為我發現,在LED燈之間,將會有又電線束,如果板子會搞得太厚,那我焊接和整理板子將會太麻煩了。
所以我打算自己做一個 LED 燈板子,自己重新寫程式。決定已下,我從 Mouser 買了 140 個黃色的 LED 燈,從 Adafruit 買了一對 LED 板子(LED Matrix I2C “backpacks”),這個帶了一個 8*8 的 LED matrix。
焊接時間
第一步就是做 LED matrix,還好我在Hackaday上找到了一篇製作 70 LED 矩陣的文章。雖然我的步驟基本上差不多,但我都會過一遍。如果你要更多的理論知識,去看他們的文章吧。
我切割了 112 段 2.5″ 和 16 段 8″ 的電路線。短線用來連線各個 LED,長線用於連線 LED 到控制器。整一個切割墊,可以輕鬆、快速、準確地測量出的長度。
下一步,我把7條短線和1條長線焊接到一起了做了 1 條菊花鏈(如下圖)。然後再做 15 條這樣的長線,8*8 矩陣的長線就夠了。
然後製作夾板(jig),和Hackaday上的方式不同,我沒有用硬質板,改用了1/4″的泡沫板。用錐子在上面戳孔了,這比在硬板上用鑽頭要快點。另外用泡沫板的好處是,孔洞可先弄小點,把LED燈塞進去還更穩定哦。
在一排孔洞上安上 LED 燈,每個 LED 的陽極鍍錫後簡短,然後拿一條前面做好的菊花鏈長線,在這排燈上焊接好。在焊接之前,我在菊花鏈的每個連線處包上了半英寸的熱縮管(heat-shrink tubing)。有幾次次我忘了熱縮管,不得不回頭再加。注意:焊接處還燙時,彆著急把熱縮管套下去。否則熱縮管就開始收縮,在 LED 連線處就會套不牢了。
把八行LED燈(陽極)都串聯好後,就開始把它們的陰極連起來了。過程一樣,記得熱縮管。搞定後,從泡沫夾板上取下來。
看看!下面就是完工後的 LED 矩陣!
咦?還差什麼呢?這是一個8×8的矩陣,想玩俄羅斯方塊,空間還不夠哦。所以我又做了一個8×8的矩陣。
Adafruit 的 LED Matrix Backpack 是要求其 LED 矩陣得正確焊接在板子上,但我是焊接了陰極(female header),如此一來,我可以單獨給每塊 8×8 LED 矩陣加電,也可以給整個 8×16 LED 大矩陣加電。有人可能會和我說,我應該要在這裡或哪裡加個電阻什麼的,否則我會把晶片弄爆,也許他們是對的,但目前來看工作正常的。
為了把我自己做的 LED 矩陣連線到 I2C Backpack,我切掉了部分原型板,然後焊接了陽極。然後把最後一行一列的8″ 線連線到板子上。
這個能正常執行麼?我得編寫程式碼來驗證了。
程式設計時間
I did all coding with the hardware mounted on my bamboo prototyping board. The mini matrices in the I2C backpack sockets fit on the desk much better than the big, floppy matrices I built would have.
所有程式碼寫入安裝在我 Bamboo 原型板上的硬體上。
There are seven Tetrominos—yes, that’s what they’re called—in the game. Each has four points, as implied by the “tetra” prefix. A three-dimensional array stores the location of every pixel of every shape, in each of four possible rotations. Storing each rotation is a lot easier (for my brain at least) than calculating it on the fly. As an example, here’s the T shape:
俄羅斯遊戲中共有七種形狀(Tetromino),每種形狀都只有四個方塊(點),這也就是為什麼會用上 tetra 字首的原因。用一個三維陣列來儲存各種形狀每個點的位置,有四種可能的旋轉角度。儲存每個旋轉角度要比在下降時計算其角度更簡單(至少我是這樣想的)。下面是 T 形狀的例子:
/* T */ { /* angle 0 */ { {0,1}, {1,1}, {2,1}, {1,2} }, /* angle 90 */ { {1,0}, {1,1}, {2,1}, {1,2} }, /* angle 180 */ { {1,0}, {0,1}, {1,1}, {2,1} }, /* angle 270 */ { {1,0}, {0,1}, {1,1}, {1,2} } }
為了繪製活動塊,程式設定有一個 activePiece 變數(形狀陣列的索引)和一個轉動角度變數(形狀轉動角度描述索引),然後設定每個畫素對,每個畫素對引出兩個偏量:yOffset 和 xOffset,分別指活動塊離螢幕底邊的距離和離螢幕左邊的距離。
It also keeps an array describing the status of each “fixed” piece. With every move of the active piece, whether by gravity or by user control, it checks against that fixed-piece array to see if the requested move can be made without a collision. If the forbidden movement is left, right, or a rotation, it simply doesn’t make the move. If the forbidden movement is vertical it considers the piece to have landed and writes the piece to the array of fixed pieces, then launches a new active piece. Along the way it keeps score, tracks the level, speeds up the drop of the active piece as the game goes on, etc.
還要有一個描述每個“固定塊”狀態的陣列。
加工南瓜
這個工程需要一個完美的容器,呃,我說的就是南瓜。南瓜得足夠高,得裝下8英寸高的 LED 矩陣,還得有個長又直的南瓜柄。我開始買了 3 個南瓜,以為都是完美品,回家才知道一瓜不如一瓜。最後總算有個合適的,其他幾個我就用來聯絡打孔和練刀工了。
進南瓜裡面,我在背面開了一個大口。注意:千萬別從南瓜柄那下刀,南瓜柄還得留著做遊戲控制刊。放 LED 燈,從背面比從上面放更容易。
拿一張紙,仿照 8×16 LED 矩陣大小再畫一個矩陣,做好標記。
做好標記後,我用 13/64″ 鑽頭打孔了。
因為圓孔不怎麼適合用來做俄羅斯方塊遊戲,所以我在每個洞眼旁邊,用 X-Act 刀戳出了方形。
為了把南瓜柄改造成控制桿,我小心翼翼地從根部鋸開了南瓜柄,然後再鑽了一個 1/8″ 大小的孔眼,遊戲杆得穿過這個孔。
在南瓜內部,瓜柄下方要整平出一個正方形。把錨釘切短了些(過長會穿透南瓜),然後擰緊。稍後再螺絲把控制桿固定在錨釘上。
控制桿的話,我買了SparkFun的短柄操作杆,把紅球擰下來,換上南瓜柄。我在南瓜柄上鑽了一個孔,給 6mm 的螺栓上膠,然後放進南瓜柄,然後再把南瓜柄擰上操作杆。
然後把 LED 燈塞進南瓜孔洞。中間有個小插曲,從南瓜外邊看著是打了16行的孔,從裡面看卻是15行。因為南瓜不夠長,有弧度,導致上上面有兩行洞眼打到一行去了。最上一排就只好直接把 LED 燈強行摁進合適的位置去了。
最後把每塊電路線接好,電源是8節充電電池。
是時候來玩一把南瓜俄羅斯方塊了!!!
除了上面那塊 8×8 的矩陣有時候會有些小故障,其他部分執行的都很好。也許是電源供給問題,但應該是一些間斷的短路,因為這麼多電路連線點都在南瓜肉中。操作杆在上面,而螢幕卻在下方,玩起來也覺得怪怪的。如果我重新做一個的話,我會把控制桿放在另外一個獨立的南瓜上,或者用無線操作杆,或者把控制桿外接線路打扮成南瓜藤。
我的一些數字:
●128 個LED燈
●256個熱縮管
●313個焊接處
●大約每天12小時,用了一週半
●目前最高得分是 9800
下一步做什麼?打算移植到西瓜上哦~(這個是逗你玩的)
相關文件:俄羅斯方塊的心理效應
相關文章
- 趣味python程式設計之經典俄羅斯方塊Python程式設計
- 我的俄羅斯方塊程式
- 函數語言程式設計嘗試之俄羅斯方塊函數程式設計
- 用React、Redux、Immutable做俄羅斯方塊 | 掘金技術徵文ReactRedux
- 請大家談談‘俄羅斯方塊程式
- Tetris 俄羅斯方塊遊戲遊戲
- 一個俄羅斯方塊遊戲源程式 (轉)遊戲
- 程式設計師方陣程式設計師
- 程式設計師如何選擇程式設計技術書?程式設計師
- 程式設計師如何自制酒店 Wi-Fi?程式設計師
- 程式設計師的技術遺產程式設計師
- 好程式設計師+爛技術=痛苦程式設計師
- 程式設計師、技術主管和架構師程式設計師架構
- 【Java遊戲】java俄羅斯方塊!Java遊戲
- canvas實現俄羅斯方塊Canvas
- Win32俄羅斯方塊Win32
- 俄羅斯方塊(JS+CSS)JSCSS
- 程式設計師,你能真正掌握多少程式設計技術?程式設計師
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 程式設計師技術入股的那些坑程式設計師
- 程式設計師如何利用技術管理技巧程式設計師
- Java外包程式設計師的技術出路Java程式設計師
- 程式設計師如何選擇技術方向程式設計師
- Flutter Web 實戰 - 俄羅斯方塊FlutterWeb
- java控制檯版本 俄羅斯方塊Java
- 鵬躍俄羅斯方塊遊戲 1.0遊戲
- JavaScript 寫遊戲 : 俄羅斯方塊 (轉)JavaScript遊戲
- Github暫停俄羅斯程式設計師賬戶Github程式設計師
- 《程式設計師程式設計藝術》程式設計師
- 程式設計師如何做好技術規劃?程式設計師
- 程式設計師技術進階手冊(一)程式設計師
- 如何提升程式設計師的非技術才能程式設計師
- 黑馬程式設計師——Java高新技術---反射程式設計師Java反射
- 程式設計師可以只關心技術麼?程式設計師
- 陳皓:程式設計師技術練級攻略程式設計師
- 從程式設計師到技術領導者程式設計師
- 程式設計師技術晉升非正式攻略程式設計師
- 揭秘程式設計師鼓勵師:服務IT宅男必須是美女程式設計師