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

- 上一篇
Scratch編程實(shí)戰(zhàn) 之 貪吃的火箭
Scratch編程實(shí)戰(zhàn) 之 貪吃的火箭 任務(wù)目標(biāo) 實(shí)現(xiàn)兩只小火箭,小火箭能夠在屏幕中自由移動(dòng),并且在移動(dòng)時(shí),每只小火箭能夠拖動(dòng)出不同顏色的線條;
- 下一篇
用Scratch編寫(xiě)分辨素?cái)?shù)和合數(shù)的小程序
今天,我們編寫(xiě)一個(gè)可以分辨素?cái)?shù)和合數(shù)的小程序。質(zhì)數(shù)又稱素?cái)?shù)。指在一個(gè)大于1的自然數(shù)中,除了1和此整數(shù)自身外,沒(méi)法被其他自然數(shù)整除的數(shù)。合數(shù)就是比1大但不是素?cái)?shù)的數(shù)稱為合數(shù)。 實(shí)現(xiàn)代碼如下圖: