2020年7月3日 星期五

06360125_曾玟綾_方塊雨

一、遊戲介紹

這款遊戲的名稱為方塊雨,因為方塊往下掉像下雨一樣,故遊戲取名為方塊雨,類似於接接樂的概念,是個適合用來打發時間的小遊戲。遊戲期間會有背景音樂,也會有很多方塊往下掉,方塊每過1秒,下降速度會變快一點點(Y座標會+1),玩家要去接方塊,同時也要閃避方塊,每個方塊觸碰到會有不同的音效及功能,綠方塊是加1分;綠小方塊是加2分;藍方塊是扣2分(分數0以下會變負);紅方塊是直接讓遊戲結束,如果沒碰到紅方塊,遊戲就不會結束,因此,若玩累了想偷懶,只要不要出現在畫面裡,就不會碰到紅方塊,遊戲也會持續進行!

二、遊戲操作說明及執行畫面

1.執行程式(遊戲狀態的文字為尚未開始遊玩、分數為0分)

2.按下WebCamOpen All開啟視訊相關資料,視訊視窗會顯示在畫面上:

3.按下Preview Callback Function Background + mirror,等待累加30張畫面並平均後,即可取得鏡像後的背景影像(按Image分頁可看到下圖已經取好的鏡像後的背景影像):

4.按下Game的開始遊玩(遊戲狀態的文字為遊戲中、開始計分、背景音樂會開始撥放)並將畫面中右下角的8*8 Block Display(顯示差異偵測畫面)打勾,可以看到遊戲背景變成黑色的,白色的為被偵測到的手:

5. 若"不"將畫面中右下角的8*8 Block Display(顯示差異偵測畫面)打勾,即可看到遊戲背景變成鏡頭所拍攝到的背景:

6.碰到紅色方塊後,遊戲即結束(遊戲狀態的文字為遊戲結束、暫停計分),且會聽到遊戲結束的音效,背景音樂也會停止撥放,畫面的方塊都會消失:

7.若要再玩一次,按下Game的開始遊玩即可,分數會歸0,背景音樂也會重播。

三、方塊重置原理講解

這個遊戲總共只有4個方塊(物件),一開始方塊的Y座標都為0,左上角X座標會亂數給,亂數取的餘數每個方塊都不一樣,整個亂數公式為rand() % 餘數,其中各方塊餘數的計算方式 => 視訊擷取視窗右邊界 - 方塊的寬度+1,最終得到的亂數最大值為:能將方塊完整地顯示在最右邊的座標,驗證方式 = 左上角X座標值+方塊寬度<=視訊擷取視窗寬度。例如:視訊擷取視窗的寬度為640,綠方塊的寬度為64,則取完亂數的左上角X座標的最大值 = rand() % (640-64+1) = 576 驗證方式 = 576 + 64 <= 640

另外,當方塊的左上角X值掉落到視訊擷取視窗的下邊界,方塊會先消失再顯示,並把方塊的左上角X參照上面的亂數計算方式,重新獲得一個新的X位置,Y一樣是0。

四、音樂講解及巧思

背景音樂:用C++ Builder的MediaPlayer元件做,把此元件命名為MediaPlayer1,在Filename放置音檔路徑,程式碼寫下MediaPlayer1->Open(),再寫MediaPlayer1->Play(),即可從頭撥放音樂,若要關閉,則寫MediaPlayer1->Close()即可

音效:宣告    BOOL PlaySound (

                        LPCSTR pszSound,

                        HMODULE hmod,

                        DWORD fdwSound);

            在要音效的地方寫PlaySound(L"路徑\\wav音檔", NULL, SND_ASYNC);

巧思:因為喜歡以前遊戲機和年代較久的小遊戲,所以選擇背景音樂較活潑的瑪莉兄弟,讓人置身在童年回憶裡。且加1分會有1聲音效;加2分有2聲音效;扣分有清脆響亮的音效;遊戲結束也有讓人感覺輸了的音效。特效的選擇讓玩家在遊戲中,不必去記碰到什麼顏色的方塊會有什麼功能,只要聽到音效就會知道了!!


五、遊戲Demo


畫質調1080p比較清楚~

六、心得

修完這堂課,對於期末專案的第一個想法是:拿之前做的小朋友下樓梯來改,但礙於專案製作只有短短兩天的壓力,一開始在嘗試的時候,不知道怎麼去用模擬器開啟已經做好的小遊戲,所以就改做類似於接接樂的遊戲。

在製作方塊雨的過程中,遇到的問題及解決方法:

1.      把填在畫面上的方塊色彩值,當作要偵測的色塊,後來才發現要偵

測的色塊,必須做成物件才能去做碰撞檢測等等。

2.      色塊往下掉落的程式碼不能寫在開始遊戲的按鈕裡,要寫在回呼函數裡,因為回呼函數毎一幀都會呼叫一次,等同於毎幀都在更新畫面,因此看起來像色塊在移動。

3.      產生多個相同的方塊(物件),到目前為止有用過陣列去寫,但程式碼仍然有問題,所以最後用產生多個不同的方塊(物件)去代替。

4.      一開始取的背景沒有鏡像,但遊戲畫面有鏡像,導致執行遊戲畫面時,會因為取背景的畫面跟遊戲不一樣,認定畫面有改變,方塊就會覺得有碰到東西,後來才發現一開始取背景時,也要跟著取鏡像,才能解決這問題。

遊戲從開始製作到完成製作,花了兩天的時間,每天都從早上9點寫到晚上7點,從第一天的茫然到第二天的進入狀況,心境的轉換真的不是幾個字就能表達的,只有自己寫過才會知道,原來寫一個遊戲有多大的成就感,尤其是寫自己剛接觸不久的視訊領域,完成的當下覺得終於做完了!!

其實從寫完遊戲一直到展出結束後,內心還是覺得很不可思議,以前寫遊戲都要花1~2個禮拜才能寫完,這次僅僅花了兩天就寫完了,而且還獲得了"最佳遊戲大賞第二名",也許我寫的不是最好,但對我來說是很大的鼓勵。在製作期間非常感謝老師、同學們的幫忙,很開心當初有來選這堂課,讓我對製作遊戲的領域有新認知,也讓我在大學生涯又達成了一個遊戲專案的成就XD

沒有留言: