今天來玩對戰「貪食蛇」!
-
這個週末與 Ricky 討論到「Learn Math With Coding」的一些想法。我們想要找十個可以學習數學的遊戲設計範例,寫給一些老師們與同學們當作參考。
我馬上想到去年暑假 Ricky 與我一起做的對戰版貪食蛇遊戲,在東京的 Maker Faire 曾經有許多 Maker 與老師都仔細研究了的那個範例。
當時是以操控一堆標準的方塊走90度直角的方式,用 Lua 寫遊戲程式,透過 WiFi TCP 通訊,讓兩個玩家爭搶方塊蘋果。
(記得當時 Ricky 設定先搶到 20 顆蘋果的一方贏,但如果太急著搶蘋果,造成自撞就算輸,這個規則使得遊戲有可能變成龜兔賽跑,也許你什麼事都不做,反而可能會贏得勝利的結果,呵呵。)
之後我就一直想找個時間,把這個遊戲換成「走圓圈」的版本,讓貪食蛇能「蛇行」,應該會很有趣,也看看 Ricky 能不能學會裡面的 Sin/Cos 數學。
這個週末有訪客來參觀,我們就順勢當作數學課,寫了這個「Battle Worm」的新版貪食蛇遊戲。(因為 Ricky 媽媽怕蛇,所以改為「蟲」,呵呵,其實是一樣可愛的吧!)
做出來的成果,請看影片:
.
原始碼在此:wb32_battle_worm_game.zip & wifiboy32.lib.171111.zip
.
遊戲的玩法:
- 使用左邊的 R 鍵(紅色)與右邊的 B 鍵(藍色)分別操控「貪食蟲」的左右旋轉。
- 盡量左右互換控制,讓蟲有「蛇行」的感覺,可以比較是「直線」衝向旗子(蘋果)。
- 暫時沒有製作遊戲結束的條件,可能下一版會有計時爭分或百斬競速的規則。
- 暫時沒有製作貪食蟲的長大功能,也就是吃到旗子還不會變長。因為有點難控制,加上變長,很快就追尾。這還請大家幫忙想想如何改進。
- 雙打的方式有一點點隱密:Player 1 要先按住紅色按鍵再通電(或按 RESET),進入一號模式。接著 Player 2 要按住綠色按鍵再通電或 RESET,進入二號模式。接著等待三秒鐘就會完成同步通訊設定,進入對戰遊戲。
- 由於這是參考用的簡單 WiFi 對戰範例,含註解只寫了大約 270 行,所以一些細節並沒有做完整,還請 WiFiBoy.Club 的朋友們幫忙完善!感謝!
- 應該還有一些 Bug,歡迎大家來找碴。感謝!
還有一個要麻煩大家的地方,就是這次的範例程式需要更新 wifiboy32 library,因為我們發現新的 ESP-IDF V3 在啟動 WiFi 時對記憶體的要求有些限制,之前的 library 有些小細節沒有做好,容易造成當機,這次就一併做了修改。(為了這個「小」修改,有部份的 WiFiBoy32 Arduino 範例必須更新!請在此下載更新的 wb32_example_update_pack1.1.zip )
(主要修改的地方就是 off-screen buffer 的部份,原先都是在用戶的 .ino 中宣告 wb32_buf8[76800] 的陣列,現在改由 wb32_initBuf8() 來 malloc 一塊記憶體,這樣就能讓 WiFi 系統正常運作。為什麼 ESP32 宣告一個大陣列,容易造成 WiFi 運作的衝突,實際原因有點複雜,稍後我們會交給我們的高手群:「ESP32徹底研究小組」來詳細說明。)
我覺得這次的程式需要認真說明,所以我們下週會寫成一個 Tutorial,讓大家看看如何做一個簡單的 WiFi 對戰遊戲,也看看如何在遊戲中加入可用來學習數學的元素。
(另外,考慮到一些朋友沒有兩片 WiFiBoy32 可以測試「對戰」遊戲,所以在推廣初期,我們將提供「已經有 WiFiBoy32」的朋友,加購另一片 WiFiBoy32 的優惠活動。只要讀出 WiFiBoy32 的產品序號,在訂購時註明,就可以享有特別優惠。)