今天來玩對戰「貪食蛇」!


  • wbo



    這個週末與 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 的產品序號,在訂購時註明,就可以享有特別優惠。)


Log in to reply
 

Looks like your connection to WiFiBoy.Club was lost, please wait while we try to reconnect.