2015年7月5日 星期日

跳舞機

本期末專案是大二互動媒體專案的視訊控制,互動媒體專案做的是跳舞機

動機:某次上課時老師提到大家的節奏遊戲的按鍵節奏大多都是隨機的,诶有節奏性,這對節奏遊戲迷的我來說這根本稱不上節奏遊戲,而互動媒體時做的跳舞機遊戲是有節奏性的,剛好可以跟這次的課程來做結合並互動。

本專案是用老師的變色龍消失的範例進行修改,使用差異偵測觸動鍵盤操作。


上圖為專案的視訊畫面,畫面上方的按鍵分別是方向鍵左 方向鍵下 方向鍵上 方向鍵右,以及確認鍵。
程式碼的部分,最主要是把碰到後消失的部分改成碰到後觸發按鍵的事件,將消失的程式碼改成
keybd_event(VK_LEFT, 0, 0, 0);
                keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0);
而這樣雖然可以在記事本成功打出對應的字,但是沒辦法在遊戲中成功有鍵盤的操作,而請教過同學後得知要在兩個程式碼之間加入Delay來讓他等一下,將程式碼改成
keybd_event(VK_LEFT, 0, 0, 0);
Delay(100);
                keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0);
中間的Delay函式是等待的函式,是自己外加的


上圖為跳舞機專案的遊戲畫面,一開始有EAZY NORMAL HARD三種難度可以選擇,每種難度都對應一首音樂,共三首音樂


上圖為遊玩中的畫面,有四個方向,當箭頭跟左上對應的方向碰在一起時必須按下對應的方向鍵即可得分,combo數也會增加,若中途有沒按到的鍵,combo數則會歸0combo數越高,每個按鍵的得分也會越高。

上圖為結合後的畫面,當左邊的箭頭跟左上方相對應的方向鍵時,就必須碰到右邊畫面上方對應按鍵,此為標準的錯誤示範,明明要按方向右結果按的是方向上。



心得:這次專案是屬於第二備案,原案雖然有辦法運行不過過於難玩而放棄,第一備案則是不支援專案的鍵盤操作故放棄,不過因為有老師的範例再加上這幾個專案都是鍵盤操作,所以差異性不是特別大,需要修改的地方比較少,在相對應的部分做修改即可,所以在做備案的時候其實沒有花太多時間。
這次的虛擬實境專案是很不錯玩的,這是之前的課程沒有學過的,而且互動性也很高,互動媒體的跳舞機專案含這次已經是第二次拿來做結合了,每次結合都必須依照專案所需而做修改,若途中發覺到有可以優化或增減的地方,可進行更改,而且可以跟之前的作品做結合,其實也是挺開心的,表面上只有操作的部分是自己的東西,實際上連遊戲都有自己的部分,這種感覺真的很不錯。
不過當初互動媒體是分組專案,所以那個專案不是全部都是自己寫的,所以也要再次感謝那位組員,沒有他也沒有這個專案。

                                          影片:


音樂來源:東方永夜抄的遊戲音樂
EAZYプレインエイジア  https://www.youtube.com/watch?v=zrjz_lyk4_g
NORMAL月まで届け、不死の煙  https://www.youtube.com/watch?v=9tNv318O7o8
HARD竹取飛翔 ~ Lunatic Princess  https://www.youtube.com/watch?v=7LCyslzt3UU

背景圖來源:
EAZYhttp://www.pixiv.net/member.php?id=1273668(這是該圖的繪師,圖已刪除)
NORMALhttps://danbooru.donmai.us/posts/30759
HARDhttp://matome.naver.jp/odai/2137063034035225701/2137063062235245603

大於、等於、小於

大於、等於、小於


前言

這次的期末專案其實在選題目時卡關卡了很久,
本來是打算來做個海帶拳的,
但是就在寫好視窗寫好介面寫好Random的圖片後,
突然才想到,『我怎麼知道電腦什麼時候要出拳啊?』
有同學建議我乾脆就先用暫存的把準備要出的拳保留,
一段時間後再一起輸出,
但我總覺得這樣就沒有划拳那種即時感了,
跨不過這條人機默契問題的線只好另外找別條線,
最嘔才想到這個『大於、等於、小於』的簡單數學校遊戲。


使用環境

Borland C++ Builder 6


遊戲及介面介紹


一進到程式中先點選Create連接到攝影機,
但這部分筆電好像都要按好幾下才會成功連上。

下方是題目,右邊是資訊欄,
有Life生命值、Grade所得分數以及顯示答案。

按下Background按鈕後,
右下方會顯示Loading代表正在計算背景,
等待跳出Complete代表背景產生完成。


接下來就可以按下Start按鈕開始遊戲。


生命值歸零時,遊戲結束。
再次按下Start鍵即可再次開始遊戲,
不需重新設定畫面。



遊戲DEMO影片



心得

這次的期末專案其實最花時間的是在構想遊戲上,
要做出流暢又不無聊的遊戲真是有點難度,
開發過程中基本上都是研究老師給我們的範例,
從中找出有哪些是可以修改運用的,
但也時常卡在一些很白癡的地方,
例如:X,Y的數值寫顛倒,導致圖片顯示怪異。

還好在遊戲製作過程中有之前修過這門課的學長幫忙指導,
有一起寫程式的同學幫忙DeBug,
這個遊戲程式才能從無到有。

謝謝老師一學期來的教導,
又學到了一個關於視訊鏡頭互動的函式庫,
但要靈活運用,我想我還需要一段長時間了練習。










Color matching


Color matching

前言
一開始是想說要做跑跑薑餅人
跟這個遊戲一樣兩個鍵跳跟滑行
但是礙於遊戲難產寫不出來所以放棄了
現在這個遊戲原本是想作隨機出現黑白兩色
然後倒數30秒看點擊幾次
最後看到FB大頭貼的彩虹顏色才想到現在這個

使用環境
因為XE2不能用,所以用演算法時載的XE6,還好run老師的範例都沒問題

基本介面

遊戲方法
遊戲方法很簡單
首先 點選create連接攝影機
然後background取背景
最後點選start去背開始遊戲
在這使用的是差異偵測
右上角會隨機顯示{紅,白,藍,黑,綠,黃,紫}這些字
字上面會隨機染上{紅,白,藍,黑,綠,黃,紫}這幾種顏色
如果字所代表的顏色=染上的顏色就選YES EX:
字所代表的顏色跟染上的顏色不一樣就選NO EX:
答對得10分 答錯life-=1 ; 
為了防止無法結束這遊戲
所以未答算答錯
切換到下一個字的速度也會越來越快
原本是用陣列存顏色在random
最後發現直接random就好 陣列是多餘的....

影片




過程
老實說我作業沒交...
所以做之前把老師的講義拿出來看然後照著做了一次
不過還是問了朋友才做得出來
放圖片的路徑問了朋友才知道跟之前寫html時不一樣
是兩條斜線 而且相對位置怪怪的只好放棄用絕對位置

心得
一開始因為作業關係
完全不知道從哪裡著手
後來聽了朋友建議從老師的講義著手
還好老師講議做得頗完整讓我重頭學了一次
最後在朋友的幫忙下完成了這次的專案
過程還蠻好玩的
尤其是做出畫面時那種成就感

最後也謝謝老師的教導和中午的麥當勞!!

PS:我帳號未登入共同作者所以先用這寫

2015年7月3日 星期五

奔跑吧 ! 多拉A夢

期末專案報告
奔跑吧!多拉A夢



環境:C++Builder XE2



思考過程:當時想過很多遊戲,但是很多要嘛案件太多,
或是有人做過,經過我翻遍大小網站就發現了這款
簡單又有趣的小遊戲,希望大家能一起享受這個快樂。



開發過程:一開始原本想用之前的程式偷懶,
畢竟之前都有做,但是因為太多選項,
而且許多功能未必用到,
所以就還是從頭開始做起,我都是參考
老師講義的程式碼做出
來的,第1.4.5.6章,但
是從一開始就遇到許多問
題,像是我以為我圖
片是存點陣圖,結果卻是
png,之後就浪費了許多
時間去 debug才發現原來是這
麼點點小錯誤,真是鬱卒到不行啊!!!

還有就是差異偵測時,不知道
為甚麼案開啟建後畫面會直接
被抹白,完全失敗,當時找了好久
都找不出問題,還好有其他同學鼎力
襄助才讓我度過這次難關,雖然我做
的其實不難,只是連接模擬鍵而已,
但是這是我付出很
多心力所完成的!



還好最後連接成功,遊戲也可以照常連接遊玩
再次感謝課堂上和有幫我debug的所有同學

這是遊戲畫面


附上影片:



心得:
最後能完成出來真是太好了,還好昨天晚
上通宵完成沒有白費,謝謝老師能讓我
晚點報告,因為我的程式bug真的有點多
也謝謝那些幫助我,被我煩到受不了的
好心人。

打地鼠

開發環境:C++Builder XE2

遊戲名稱: 打地鼠

開發過程 : 一開始想不到要做什麼,想到的都被之前學長姐們都做過了,
                 最後就想到以前常常去百貨公司頂樓的遊樂場有打地鼠這遊戲機台,
                 如果把他拿來當互動視訊的方式應該還會蠻有趣的,而且做起來也蠻簡單的。

                                                       像是這種機台



                                                      專案所做的介面
                                                            右上角有時間和分數。

 

遊戲內容:當按下play的時候會開始進行遊戲,時間限制有60秒,我們要在60秒的時間
                  內打掉這些地鼠,而旁邊會有計分表,打掉1之地鼠會累計1分。   

      
心得:  一開始做這專題還有蠻多困難的,因為自己的電腦上因為作業系統(win 8.1)問
         題會偵測不到視訊裝置,win 7 就不會有問題,在背景的部分一開始試想要加到
         視訊內,但是放進去時會發現他會馬上把背景當作是差異,讓地鼠馬上就消失不
         見。所以就決定讓背景分離開來製作。雖然沒有說很完美,但在製作的過程中也
         知道了他每一段程式碼所用到的功能。
 





視力測量

遊戲是做視力測量


運用老師的講義
第一章 第四章 第五章 做一些調整之後
再配合差異偵測
去判別手的位置與圖片開口位置是否一致
本來沒有要用差異偵測 而是要使用膚色偵測
但是後來考量到有些場合的燈光以及背景可能會造成錯誤
所以最後選擇使用差異偵測

這中間的問題說多不多說少不少
也遇過De不了的Bug
不過多虧了學長和同學的幫忙
讓我在最後一刻終於完成了我的期末專題
不過這才發現我的程式能力有許多的不足



小小系列 - 過關斬將

小小系列-過關斬將II

環境:C++Builder XE8

小時候的童年
相信大部分人都有玩過
這次是以視訊差異偵測來做虛擬按鍵遊玩



關於按鍵的介紹
一定會有人有疑問
為什麼會有兩種左右的按鍵

其實一開始是想說玩雙人小朋友下樓梯
但按鍵一次只能觸碰一個
加上遊戲本身問題
如果用延遲(Delay)
的方式礙於流暢度一定被針戳死
而不設延遲
把KEYEVENTF_KEYUP拿掉
又因為左鍵永遠強於右鍵
所以一定是往左邊的深淵邁進
等於自殺的殘酷遊戲
變成要和朋友搶操控權變得會打起來
所以最後還是改玩這個遊戲

不過為了紀念自己努力過
所以按鍵圖案沒有改
反正連結的內容是一樣的

綠色左右鍵分別代表Z跟X
白色上下左右鍵就符合圖案了
至於那個V
(共7個鍵可使用)
就是每個格鬥遊戲必有的必殺技啦

剛好這個遊戲本身就很適合於一次使用一個按鍵
方便控制敵人方式和攻擊

像這樣

黑色的主角
預備好帥氣姿勢準備出拳
是不是看了就想玩

程式的製作方法
利用老師的範例程式五
差異偵測程式碼
還有老師的範例程式六
互動消失的程式碼
去做參考改寫出來的

遇到的困難
目前來說(Delay)的數字是使用240
但是遊戲本身設計關係
連打的最後一腳本來就會小延遲
而240是為了移動距離加大
所以延遲+延遲反而帶給我的感受差異相對較小
就這樣設定了
以後有機會的話當然是找出能讓遊戲相對更順暢的方式
也試過不用KEYEVENTF_KEYUP
結果就是按下去他就一直走到不會停止了
反而死得更快




最後心得
其實在任何進度都沒有前
真的覺得怎麼可以這麼難

不過這是因為在proccesing相比較的狀況下
不過在虛擬鍵盤判斷重疊方面
跟當初練習過的遊戲有很大的相似處

所以開始思考並實作之後發現沒有想像中的困難
畢竟還有老師的講義可以參考練習

唯一的問題就是我之前的練習都是用XE2
後來試用期過了改用XE8
結果完全不能開!!
只好重新拉一個
不過因為有練習過所以實作的速度快了許多
有些同學應該被我問問題問到很煩了
真的很抱歉不過也很感謝

最後也謝謝辛苦的老師還有即將到來的麥當勞YA




電流急急棒

電流急急棒


這遊戲就很一般的電流急急棒
只要你的棒子碰壁就輸了





主要是利用色彩偵測來判定
因為如果要用差異偵測很難說只會有一個點有差異
也因為是色彩偵測
所以用了LED來減少環境光線造成的影響
雖然一開始想說如此可以不使用雜訊過濾
但是後來發現光是你的手指甲就可能反光就還是使用雜訊過濾了


很感謝各位夥伴一個禮拜來的並肩作戰
因為有你們
所以才能發現一些一開始我沒想到的問題

一起解決問題也很有趣


展示影片

北棲、襲來

就如標題梗,小北棲並沒有真的襲來
這次的專案作品是:

鎮守府近海緊急防守作戰

展示影片


專案設計的靈感是來自網頁遊戲 艦隊これくしょん

遊戲內玩家所屬勢力為左下建築物,舊日本海軍吳港的吳鎮守府


而白色的生物是北方棲姬(簡稱北棲),是遊戲內的主要敵人
來自未知的海底深處,經常侵略人類方勢力


遊戲目的就是透過視訊裝置的偵測來與遊戲圖像做互動
在鎮守府遭到小北棲攻擊以前用手將其碰觸就算是擊退北棲,作戰成功
反之則是作戰失敗,被北棲破壞
算是非常簡而易懂的遊戲


程式圖片

其實程式跟老師的碰觸蜥蜴非常的相似
只是找了一些圖片,然後再改寫部分程式的運行
像是加入了圖像的移動、背景
圖像觸發事件之類的程式


心得:
對於程式實在不是很在行,所以只能拿出這樣一點程度的專案
不然照理想應該還可以準備出更豐富的內容
專案過程中也是甚麼都是一直請教同學
怎麼做半透明背景、怎麼改回呼函數
都是一個一個問完之後在一個一個修,一個一個改
出了BUG自己改東改西,改不出來再去問
前後花了很多時間才改到比較完整的狀態

☆神奇載點☆

圖像來源:
吳鎮守府:連結
小北棲:柚木ガオ

神奇寶貝 彈珠台

[GBA]神奇寶貝 彈珠台 

起初是想要做GBA的馬力奧
不過在製作完後發現效果不是很佳
與朋友們討論找尋其他遊戲
便想到這個RPG遊戲

遊戲畫面

遊戲時畫面

操作介面


根據上面文字敘述的類似
左震-左震動(A)
上震-上震動(I)
右震-右震動(S)
下-向下鍵,選擇時使用(K)
左-左邊,左檔板(J)
右-右邊,右檔板(L)
是-選擇時使用(Z)
否-選擇時使用(X)
Pause-遊戲時暫停用


製作方式
先使用老師給的蜥蜴消失來改寫成按鈕
使用的是差異偵測
並拉一個lable來測試是否有執行到
構想配置使用者介面
並將按鈕一個個做上畫面
最後測試各個按鈕位置是否使用順暢



製作時遇到之問題

1.鍵盤虛擬碼使用方法
解決:參考老師講義,與google查詢虛擬碼表

2.按鈕按太快
一開始測試使用記事本測試按鈕
使用上沒問題
但一到遊戲就是沒有反應
後來才知道是案按鈕按太快
解決:多寫一個副程式Delay
使按下和放開不會太快


很感謝這星期工作坊的各位
一起討論解決問題
製作上效率很高
如果遇到問題
有人遇過可以快速解決
沒有的話 也是可以一起討論解決
或是與老師討論

遇到問題好討論
快速解決效率高
製作路上不孤單
大家一起好好玩

影片:











笨鳥慢飛

這次做的專案想法是來自於之前玩過的手機遊戲
有一隻鳥會自動向下往前
有一個按鍵可以讓牠上升
要讓鳥可以從斷成兩節的樹木中穿過
碰到樹木遊戲就會結束

在我做的過程中
發現用視訊的方法操控要讓鳥在樹木間通過非常困難
因為按到視訊畫面中的按鈕
跟按到手機螢幕的按鈕速度是有差距的
所以我只用了一棵樹放在螢幕的某個位置上讓鳥閃避

在一開始寫程式的時候
我再讓鳥的移動上面花了很多時間
一開始我沒有設按鈕
直接用迴圈跑讓鳥移動距離的程式
但是結果卻是一開始顯現的畫面鳥就跑到最終的位置了
之後我加上圖片按鈕執行差異偵測
讓鳥可以正常移動後
就發生了移動到一半鳥就漸漸消失的畫面
之後找了程式碼才發現
在移動的部分裡
我只改變了鳥的X值
但是其他的Y和長寬等
都沒有再次設定
所以才會跑ˇ了一段時間後
之前設定的值就漸漸跑掉
就造成了逐漸消失的鳥

之後在判斷讓遊戲結束的條件時
一直出現兩張圖中間都還有距離
但是卻出現遊戲結束的情形
一開始我想說是不是撞到了樹木的背景色
所以樹木就不消去背景
但是還是一直錯誤
看了很久之後我才發現鳥的背景很大
所以是因為撞到了鳥的背景
為了避免在玩遊戲的時候有不知道真正範圍的情形
所以遊戲中鳥和樹木的背景都沒有去背

在遊戲一開始
先按auto開啟攝影機畫面
在點選background來取的背景圖片


之後按start就會開始遊戲了
會出現不太清楚的樹木、鳥和綠色的按鈕
可以按綠色的按鈕來讓鳥向上飛



如果鳥和樹木碰在一起了
遊戲就結束了


右邊的label第二個是顯示順利通過樹木的數量
也是分數的計算



在一開始做專案時
並沒有想到會遇到這麼多困難
花這麼多時間
沒想到實際上開始做了之後
就發現了很多奇奇怪怪的問題
不過在解決了問題之後
在遇到相同的功能時
就可以更有效率的做完

雖然這只是一個小小的遊戲
只有簡單的介面
但是整個遊戲做完之後
還是有種完成一番大事的感覺
讓人覺得很開心


影片



ˇ

超級馬力歐

本來一開始要自己做一個跳舞機的遊戲
可是在做的中途遇到了很多的問題
也有去請教同學
可是最後因為問題真的太多
一定無法在期限內做完
所以後來改成做操作超級馬力歐的操作介面

遊戲畫面: 

這是我們大家所懷念的馬力歐一代
主要是用左右跳來操作
遊玩過程中利用攝像機來判斷
藉由我們的動作來操作遊戲

製作過程:

製作遊戲需要幾個困難點需要克服
第一個--需要判讀的區塊設定
第二個--如何藉由區塊來操作鍵盤
畫面的判斷我是利用binary來處理而不是8*8的區塊來處理
是因為直接處理的話
能操作的點數可以更準確
而鍵盤的判斷的話我是利用講義上面的keybd_event來操作
克服以上兩點之後就可以做出這個陽春的操作介面了

心得:

我覺得在製作的過程中非常的有趣
雖然有時候因為沒有辦法解決問題而煩躁
可是就是因為解出沒辦法解決的問題
才會顯的成就感更大

皮卡丘打排球

皮卡丘打排球

當我一聽到期末要做一個遊戲專案時
我腦中就希望做一個互動性高的遊戲
剛好在找小遊戲時找到了大家同年的回憶  -- 皮卡丘打排球


原本希望做出兩人對戰
但由於我是用8*8錯誤偵測來比對background 
所以判讀有點不精確
再加上視訊不夠大,如果幾兩個人很容易干擾到
所以我只做了1P


遊戲方式

遊戲方式:
右上角為殺球(ENTER)
上方為跳躍
左右兩邊為控制左右



再做這個專案的時候
一開始我將
keybd_event(VK_RIGHT, 0, 0, 0);
keybd_event(VK_RIGHT, 0, KEYEVENTF_KEYUP, 0);
放入時,並沒有反應
後來看過學長的文章才發現
可能是因為他按下去再談起來的速度太快
以至於看起來好像都沒反應
所以我加了DELAY
但加進去以後發現在整個程式會變得很頓
所以我換了一種寫法

舉例:(上方)
if((iBlockChangeCounter[m][n]>31)&&(m<7)&&(n<47)&&(n>35))
{
a = true; 

}

設一個布林變數
如果範圍內偵測到差異
則控制跑進下面的事件處理


if(a){
                                                   if( iPressTimeCount<=4)
 {
                                                      keybd_event(VK_UP, 0, 0, 0);
                                                                 Form1->Label10->Caption = "UP" ;
                               iPressTimeCount++;
  }
                                               if(iPressTimeCount > 4)
  {
                                                                         keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);
              a = false;
                                                   Form1->Label10->Caption = "0";
                                iPressTimeCount = 0;
  }
}
若布林為TRUE則往下跑
設定一個變數,讓他控制在跑一定次數後會彈起來
為了確保,我設了一個LABEL來確定他會彈起來
這樣跑程式的時候就不會頓頓的了!


心得: 這次的專案其實非常的趕,由於有暑修卡到,前面又不太知道自己要做啥
以至於拖到蠻後面才開始動工,所以很多東西都很粗略,但我覺得
在這次專案中我學到了很多,不管是對於物件的了解,按鍵延遲的處理
callbackfunction的使用,差異偵測的原理跟使用等等
都讓我對XE8這個開發環境多認識了不少


實作影片:https://youtu.be/uOU0lzsgP64