2020年7月3日 星期五

06360293 楊哲銓 跳舞機 姿勢偵測

1.簡介

這是一個類似跳舞街機的遊戲,玩家需要配合畫面擺出指定姿勢以獲得分數。

參考影片

2.實作困難處

本來是想要搭配輕快舞曲製作,但是發現C++ Builder在執行時,每一幀的速度不同,也許是Video for Windows為了節省效能而當畫面變化不大時降低幀數,導致無法精準對上音樂節拍,在流行音樂中會顯得太過不和諧,因而最後採用純音樂來實作。

再者,實際上跳舞機的舞蹈動作皆由真人動作採樣,在使用XY座標來擺放實較為困難,因此採用了隨機產生的方式。

3.實際遊玩

程式開啟後會先取一張背景,並在螢幕上顯示遊戲開始

再來,當手碰到 「開始遊戲」後遊戲即開始。

當圓圈填滿時即為判定時間,填滿當下身體需碰到圓圈的位置

圓圈填滿的當下若有碰觸到指定位置即得分


音樂總長約3分鐘,遊戲結束後即自動返回第一個畫面,則可再次選擇遊戲開始進行遊玩

遊玩影片:


4.實作方式

圓圈逐漸填滿其實只是不停切換圖片並放在相同位置,
程式中總共有 17 張不同進度的圓圈圖片。


並使用 C++ Builder 中的 Timer 元件來切換 iCircleID來達成在不同時間顯示不同圖片。


在視訊進行中,每一幀會呼叫並執行一次 Callback Function ,並每次會依不同的 iCircleID 來顯示不同圖片在畫面上。

程式中採用了 50 毫秒切換一次。

不採用幀數作為單位的理由與上面提到的相同,每一幀的停留時先可能不固定,在畫面變化微小時若採用1幀為單位來做為切換圖片的依據,則圓圈跑動顯得太不規則,尤其在鏡頭全部被物品覆蓋住時(極端條件)。

雖然採用了 Timer 元件來改變 iCircleID,但仍然會被顯示的幀率不同而看起來忽快忽慢,但影響比以幀樹本身來做為切換圖片的依據來的小,因此選用了 Timer 來實作。

而固定時間顯示圓圈一樣是使用了 Timer 來實作


程式總共規畫了 6 個圓圈虛擬物件供使用,因為每個圓圈有 17 張圖片要依序顯示,而每張圖片又停留了 50 毫秒,此 Timer 的執行時間必須大於 850 豪秒 / 次。

故困難模式訂為 900 毫秒 / 次  簡單模式訂為 1800 毫秒 / 次,這兩個數字可大約對上音樂的節奏性而得。

並在每此圓圈填滿時,不論是否得分,圓圈即消失(如下圖)並隨機顯示(如上圖)到另一個位置。


如此重複運作,即可順利執行遊戲。

5.心得

這次修這堂課感到很有趣,可以自己完全地做出一個遊戲來,第一次有課程是如此完整的開發一項程式。
由這次的專案大致了解了一項成品所需要的規畫有哪些,困難有哪些,學到了很多,謝謝老師!

沒有留言: