2019年6月27日 星期四

05360294_邱育諄_小精靈遊戲控制_期末專案

虛擬控制器-小精靈




遊戲介紹:

利用視訊裝置進行差異偵測,當物件重疊時進行虛擬鍵盤的判定,當手指在視訊畫面上碰觸到控制物件時,可對遊戲進行動作的觸發,以利控制遊戲腳色移動。
以下是小精靈,作為本次主要控制的遊戲:



遊戲步驟:

首先先建立一個background。



進入黑白模式,且調整適當臨界值。


開啟遊戲控制器,此處利用上課所教的龍珠和壁虎的物件型態,進行控制器的產生。


再來就可以利用視訊上實境物件及虛擬物間的互動,進行遊戲的控制。


期末心得:

在這堂課上第一次接觸有關視訊互動的程式,舉凡視訊的處理的部分及進行差異的偵測,讓我對視訊互動的方式,有了更多的了解。

期末專案開發上,只要透過老師先前的教學,與歷屆學長姐之前的開發經驗,都能在開放上提供我們很好的適性。


影片:





2019年6月26日 星期三

04360190 李正倫 期末專案

舉旗遊戲

簡介:

大家應該都看過或玩過舉旗遊戲,我的期末專案就是透過視訊來遊玩舉旗遊戲。
「舉旗遊戲」的圖片搜尋結果
舉旗遊戲示意圖

遊戲方式:

依照指令將白色、紅色的旗子舉起或放下,指令的句子結構會隨機變化,另外,每獲得三分遊戲就會加速,看看你能獲得多少分。

製作時遇到的困難:

隨機題目
為了讓難度提升,所以製作了各種隨機產生的句型,在寫程式碼時花了我很多時間。

旗子位置
原本是想要把旗子設定成貼在手上就像真的拿著一樣,但是我不知道要怎麼判斷哪個是手的位置,旗子要放在哪裡等等,所以最後採用偵測上方有差異就算舉旗,反之就是放下。

時間計算
從出題到判斷是否正確的時間也有想過要使用現實的秒數來判斷,但是一來程式不好撰寫,二來畫面LAG時,時間並不會變慢,也會造成遊玩的體驗不佳,最後還是使用frame數來當作時間。

字體顏色
一開始想讓題目中紅旗、白旗的字體顏色隨機更換來增加難度,但是TLabel沒有辦法單獨變更其中某幾個字的顏色,如果要將句子分成多個Label,就又沒辦法隨機更換句型,於是最後選擇隨機句型。


遊玩影片:



04360685_期末專案

擦玻璃

遊戲介紹:


透過視訊與背景的差異偵測,來判斷是否有擦玻璃的動作。


操作頁面與方式:

    1. 開啟程式並切換至Game頁面,按下Ready即可打開畫面並進行設定。

    2.待畫面穩定後,即可按下Background擷取背景,等待30 frame後,即可完成擷取
     3.  遊戲設定完成後,Play按鈕即會出現,按下Play,即可遊玩。

4. 遊玩示意圖
==================================================================

遇到的困難:

    在此遊戲中,背景十分重要,原本打算以膚色偵測來進行擦玻璃的判斷,但細想後發覺,任何物品皆可拿來擦玻璃,不應只局限於膚色。而判斷差異決定了汙垢的頑強程度,有時背景跟人的差異不明顯,就會導致無法清理汙漬,因此差異的判斷要視情況調整。
    而汙漬的位置與判斷則是以8*8 block來判斷,因如果以每像素判斷的話,會發生畫面粉粉碎碎的情況,明明手晃過去應該乾淨了,卻還是有一粒粒的汙漬存在。
    最後是有些構想來不及完成,原本預定是會有水球出現,水球有兩種,乾淨的跟有顏料的,假如碰觸到乾淨的水球,即會將附近區域的汙漬給清除,碰觸到顏料水球,則會將周圍覽上汙漬,還有泡沫系統,讓玩家能更輕鬆的擦去汙漬,這兩系統無法完成,實在可惜。
    目前遊戲十分單調,就只是單純的將汙漬給清除,但如果之後有機會能實裝上述兩系統,應該可以增加不少樂趣。






04360501_Race Car

Race Car




遊戲介紹:
透過視訊裝置的差異偵測,判斷手指頭是否有碰到視訊中的箭頭,進而控制賽車遊戲中的賽車左右移動。首先先按下畫面中的"Start"的按鈕,接著Form1會new一個Form,命名為"Form2",之後Form1會執行Show Form2的動作,Form2顯示出來後會執行close Form1的動作並進行基礎的設定,如下圖:


我設定第20個frame至第50個frame期間,系統會自動擷取每個frame並製成background,前面20個frame不採用的原因是因為攝影機剛開有模糊一段時間,會導致差異偵測錯誤,所以我不採用前20個frame。

接著,開啟NES(Nintendo Entertainment System)模擬器,並載入Road Fighter的NES檔案,如下圖:



遊戲按下Enter鍵即可開始,按下鍵盤x不放可以加速,按下方向鍵的左右即可讓車子左右移動。而我設定當Form 2的background設置完成後,便會按著x鍵不放,所以玩家只要專心地控制車子的左右即可。遊玩畫面如下圖:


製作困難處:
一開始在新增一個Form的時候遇到了一些問題,便上網查詢如何新增form,但是網路上寫的大部分都沒辦法完成我的需求,在使用者在Start的畫面時便同時建立好Form 2且攝影機開機完成。最後只好取折衷方案,在按下Start的按鈕後才開始建立Form 2。

第二個遇到的問題是我要如何同時執行鏡像&放箭頭&差異偵測的callback function,解決方法為:全部寫在同一個callback function裡面,並修改一點程式即可正常運作。

第三個為遊玩上困難之處:本來我是想設計成使用頭左右搖擺,讓頭去碰觸鍵頭,不過我發現這樣會無法讓我專心盯著銀幕,而且會讓頭很累,所以我最後才用手指頭來玩。

影片:






累死人的小恐龍-期末專案

累死人的小恐龍

介紹

    透過視訊裝置的背景偵測,達到用體感真實體驗Google經典斷線畫面的小恐龍遊戲,藉由所拍攝的物體判斷其差異區塊的重心來達到控制小恐龍的跳躍與趴下,當人跳躍時使重心高於畫面上方一半時,小恐龍會跟著一起跳躍;而當人蹲下使重心低於畫面下方4成時,小恐龍會趴下。

操作頁面及方式:

由於只是用來控制小恐龍對於版面就沒有特別設計,利用上課的程式新增了一個遊戲控制頁面而已。
    遊玩時需先開啟Google Chrome瀏覽器打開小恐龍,輸入chrome://dino即可在連線狀態下開啟遊戲。
按下Start就會開啟視窗擷取視窗並且擷取背景。
背景重設可以重新建立背景,以避免背景壞掉時需要重新開啟程式。
Test CheckBox 勾起時可以可以計算8*8差異的重心,並顯示8*8的黑白差異畫面以便於Debug。
Control CheckBox 勾起時則可以計算8*8差異的重心,並透過視訊擷取裝置控制小恐龍跳起或蹲下。
實際遊玩示意圖

遇到的困難

    在製作過程中常常遇到背景壞掉,因此在後來製作時做了一個背景重製按鈕。
而在算重心時,一開始不是使用8*8所以雜訊有時會很多影響比較大,後來改成8*8比較不會那麼嚴重。
由於用的是重心判斷,因此跳躍的高度和蹲下也是修改了很多次。經過多次測試。最後才決定在高於一半的畫面跳與4成以下的畫面才會蹲下。
但在這版本依然誤觸率很高。

實際遊玩影片:

接球遊戲

接球遊戲
介紹 : 
        透過手指與視訊擷取裝置之間的互動,來控制籃子左右移動,以接住上方掉落下來的物品(如圖1)
圖1 - 用手指控制籃子移動,來接住上方的球。

        為了增加遊戲難度,掉落下來的物品分為兩大類(球、炸彈),接到可以提高分數,反之,接到炸彈則會扣除分數;且球的部分也分為兩大類(藍球、特殊球),藍球是基本球,只會依照固定速度掉落,而特殊球在每次移動時都會變更速度,產生變速球的感覺,使玩家更難接到球;球的部分還有一個特殊設計,球的移動方式是隨機左右移動,而不是常見的垂直掉落,且當兩球彼此碰觸時,球還會互相反彈,以此增加遊戲的趣味性。

        
        為了滿足想要挑戰困難模式的玩家,另外設計關卡難度(如圖2)新手模式(Easy)中,物品掉落速度都較慢,且產生物品的速度也偏低,讓新手可以輕鬆的接到正確的物品,而在地獄模式(Hell)中,物品掉落速度大幅提升,讓高手可以更享受遊戲

圖2 - 可自行選擇遊戲難度
功能 :

1. 控制籃子左右移動 : 

膚色偵測計算其中心點(所有膚色pixel其座標之和 / 所有膚色pixel個數和),
將籃子的中心點移到膚色偵測的中心點,以此方式實現籃子的操控。


2. 的左右移動 :


每個球都多一個方向變數,若此變數為"1"代表每次移動的值為正,也就是說球會往右邊移動,反之,變數為"-1"代表每次移動的值為負,也就是說球會往左移動

假設delta為方向變數,d為每次移動的距離,(x, y)為目前球的座標,則球的新座標為(x + d * delta , y)。

3. 球與球之間的碰撞 :

當兩個球彼此重疊時,則將兩球的方向變數都乘上"-1"即可。

假設delta為方向變數,當球碰撞時,新的方向變數為delta*-1,下次球計算新座標時,就會往反方向進行移動。

4. 其他 : 

接球 : 當籃子與物品彼此重疊時,代表接球成功。

變速球 : 每次移動後亂數取得新的移動距離即可。

設置關卡難度 : 調整放球頻率(若frame為N時,新增一個物品,則調整N即可)與依照難度設定球的速度(難度越高,球速越快)即可。


製作上碰到的問題 : 

物品移動速度太快,使移動感覺就像瞬間消失一樣,因此設計高難度模式時,還是要適當調整速度。

有時候接球判定會怪怪的,明明看到的物件與籃子已經重疊了,但是卻沒有正確判斷已成功接到球,但發生機率不太大,就不特地去修bug了。

成果 :










04360286 趙俊彥 太鼓達人

太鼓達人
1.介紹:
這學期剛好也選了互動媒體,當得知互動遊戲與互動媒體都要寫遊戲的時候,就想到不如將兩門課所學的東西結合在一起,而我所選擇做的就是太鼓達人了。
畫面上會有紅藍色的圖案跑過,根據圖案做相對應的操作。
2.遊戲操作及說明:
由於遊戲及操作是分開寫的,所以要先打開操作,按下Start Camera來開啟攝影機,由於操作我是採用差異偵測,故需要先開攝影機,令攝影機先對焦好畫面。
在點擊BackGroundSet來設定背景。
最後在點擊StartControl來開始控制。
而遊戲畫面則如下,一開始能夠透過偵測藍色部分來選擇難度,透過偵測紅色部分來開始遊戲。
遊戲中會有紅藍圖像跑過,根據顏色去做操作。
而結束時會有結算畫面顯示你的成績。
困難:
影像偵測方面:
按鍵事件需要在按下與放開中間插入Delay,否則會因為太快而導致遊戲無法正確判定,但Delay又會造成連敲的部分不好打,目前妥協是採用Delay75毫秒。
遊戲方面:
節奏遊戲所需的樂理部分,在計算紅藍圖案的移動速度及理解BPM等等部分花了很多時間。
目前只有固定單節16拍的樂譜會是最符合原本實際遊玩的樂譜,但其他如變奏、4拍等樂譜則並不是處理得很好,這部分是礙於樂理方面的不足。
遊戲目前是採用Frame()累計來充當計時器,但實際上在換算BPM(量度音樂速度)到幀的時候會產生誤差,例如:BPM為142.5在轉換到幀數時會是6幀,而BPM為143時卻同樣也為6幀,這導致音樂有時候會微妙的對不上節拍。
理想:
原本的理想操作畫面是如下圖,但由於實際操作上會很難操作,會不好將手移動到相對應的位置,而且與實體鼓不同並不是習慣的角度,且敲擊沒有敲擊到物體的感覺,很難習慣操作。
希望按鍵事件的問題能找到更好的解決方法。

影片: