資訊內容
Scratch也能玩體感游戲
? ? ?上一次我們利用圖像分類技術,讓機器學會了識別石頭剪刀布等三種手勢,如果大家有試驗的話,可能會發現識別率并不是太高,會有誤判,問題主要在于我們給機器訓練的數據量還是太少,不能完全覆蓋三種手勢的所有類型,如果數據量足夠大,識別率會有明顯提高的,機器也需要一場“題海戰”啊。
? ? ?在上周筆者參加了杭州市青少年科技節的閉幕式,看到小學生們用Switch玩體感游戲,玩的不亦樂乎。我就想能用人工智能插件實現體感玩法么?人工智能插件中有一個類型叫姿態分析似乎可以識別面部的關鍵點及人體的關鍵點,那么利用這個姿態分析插件中的關鍵點位置坐標,可以幫助我們實現用身體的某個部分控制游戲角色移動么?
? ? ?帶著以上問題,筆者開始了改造之旅,因為是初試身手,所以筆者希望選擇動作相對簡單的游戲。最后筆者敲定了打磚塊這款游戲,說起打磚塊這個游戲,它是雅達利公司開發,喬布斯及沃茲尼克參與設計的Breakout的改編版,當年也算是風靡一時的作品了。
? ? ? 那么打磚塊這個游戲用Scratch如何實現呢?下面筆者就通過五個不同的角色來完成一個極簡版的打磚塊。其中分別用到擋板、球、磚塊、gameover及youwin五個角色、其中擋板、球和磚塊都是用的系統默認角色庫里的內容,僅僅調節了大小,后兩個角色為繪制角色,相信大家也可以輕松搞定。
?
? ?下一步我們就一起來看看每個角色的程序如何編寫:
01
彈球角色
? ? ?彈球角色的程序主要有三個部分:一個用來控制彈球的運動軌跡,一個用來控制彈球的反彈方向,一個用來判斷彈球是否落地(游戲結束) 。
01控制彈球的運動軌跡
? ? ?重復執行之外的部分為彈球的初始位置和初始面向方向,重復執行之內的移動積木控制彈球的移動速度,剩下三個判斷反彈情況,為了程序可讀性,我將碰到擋板的反彈程序寫成了廣播的形式。
02控制彈球碰到擋板后的反彈方向
? ? 用來控制反彈方向及彈球的運行速度。
03判斷彈球是否落地
? ? 用擋板所在的Y坐標來判斷彈球是否落地。
02
磚塊角色
? ? ?磚塊角色的程序一共包含兩個部分,第一部分磚塊陣列的生成,第二部分磚塊部分被擊中的消失及得分反彈。
01磚塊陣列生成
? ? ??設置好磚塊的起始位置及大小之后,隱藏本體并讓克隆體通過循環排布為7*4的一個陣列,作為我們的彈球攻擊目標。
02磚塊擊中消失及得分反彈
? ? ?當克隆體磚塊顯示在屏幕最上方之后,凡被彈球擊中則加分并刪除。
03
GameOver角色
用來控制游戲結束的代碼。
?
? ? ? ?
04
YouWin角色
用來控制游戲勝利的代碼。
??
? ? ? ? ? ? ? ?
05
擋板角色
? ? ?終于來到了我們的重頭戲,擋板角色,我們之前傳統的打磚塊玩法一般會采用鼠標來控制擋板,這時候的程序如下:
? ? ?這時候只要我們鼠標左右移動,就可以控制擋板去攔截彈球了。
? ? ?至此,整個打磚塊游戲就算是完成了,但是我們說這次要做的是一個體感的打磚塊,所以之前的部分是不合格的,我們需要再對控制擋板的程序進行一些修改,使它具備我們需要的能力。
? ? ?那么如何利用姿態分析積木去控制我們的擋板呢?只需要對擋板角色的程序進行如下的改進即可。
? ? ?由于姿態分析還是基于攝像頭傳送的圖像來分析的,所以第一步還是要打開攝像頭,設置好擋板的初始位置之后就是如何控制擋板的問題了,首先我們要重復執行姿態檢測來判斷你目前的姿態,因為姿態檢測會同時檢測多個點位,所以我們以鼻子這個點位作為我們的檢測目標,同時也讓擋板跟著鼻子的X坐標來移動,這里有一個叫置信度的名詞,顧名思義就是可以相信為真的程度,最高為1,最低為0,以小數來表示,我們選擇了0.5作為我們的判斷依據,如果機器判斷該點位為鼻子的可信度為0.5以上,則讓擋板跟隨我們的鼻子來進行移動。
? ? ?那么今天我們的整個游戲就改編完成了,由于軟硬件性能的局限,可能在姿態識別時會有一點延遲,大家可以通過改變彈球的速度來調整游戲的難度,同時如果大家覺得鼻子控制起來很累,也可以試試左右手腕等其他點位,畢竟姿態分析積木中可以使用的關鍵點位有17個之多。
? ? ? 大家也可以根據官方提供的模板把整個游戲做的更美觀一些,這里只是實現了最基本的功能而已,同時也歡迎大家到廣問AI平臺(open.thinklandai.com)免費試用其他各類AI插件,并用姿態分析插件做出自己心儀的游戲。
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
