您現在的位置是:首頁 > 手機遊戲首頁手機遊戲

C語言+EasyX庫GUI程式設計之數字記憶遊戲——音訊播放和設定中心

  • 由 程式設計師魯大廚 發表于 手機遊戲
  • 2023-02-04
簡介設定中心從視窗底部移入這個動畫原理不復雜,點選右下角設定按鈕的時候,觸發下面的邏輯:繪製設定中心,把文字、按鈕都繪製到設定中心上去迴圈把設定中心在視窗上的位置(Y軸)從大到小遞減,一直到視窗中間注意:迴圈體中要使用cleardevice()

怎麼啟動gui將音訊裝置接入系統

上一期

C語言GUI程式設計之數字記憶遊戲——計時器、暫停和重置遊戲

為遊戲添加了計時器以及暫停、重置的邏輯,這一期繼續讓遊戲的可玩性增強——為遊戲新增背景音樂和提示音,並且提供設定中心的功能以供玩家可以選擇音訊的開關。

C語言+EasyX庫GUI程式設計之數字記憶遊戲——音訊播放和設定中心

遊戲設定

C語言裡的音訊播放

為了控制音訊播放,增加了一個media。cpp媒體模組。

引用winmm.lib庫

使用windows系統再帶的“winmm。lib”庫進行音訊的播放控制。引用winmm。lib庫有兩種方式,第一種直接在模組最上方宣告使用:

#pragma comment(lib, "winmm.lib")

第二種,在使用Visual Studio的情況下,開啟專案->屬性設定->聯結器->輸入,找到“附加依賴”項,編輯新增“winmm。lib”即可。

C語言+EasyX庫GUI程式設計之數字記憶遊戲——音訊播放和設定中心

Visual Studio引入winmm。lib

播放音訊

播放音訊就比較簡單了,先把音訊檔案複製到專案目錄裡,這裡建立了子目錄media用來存放;然後用以下函式執行播放:

mciSendString(_T("open media\\bk_music1.mp3 alias bkmusic"), NULL, 0, NULL);mciSendString(_T("play bkmusic repeat"), NULL, 0, NULL);

這裡不做過多的解釋,更多的使用方式可以去網上查閱資料。

短音訊二次播放

這裡說一下短音訊二次播放的問題。

先看使用場景:玩家點選正確的數字格子,給出“遊戲正確”的提示音,這個提示音的音訊時間很短,大概1秒,第一次點選正確觸發提示音沒有任何問題,緊接著再次觸發提示音後卻不能播放了。

此時的解決方法是在播放短音訊之前先關閉它,然後再接上常規的播放邏輯,如:

mciSendString(_T("close incorrect"), NULL, 0, NULL);mciSendString(_T("open media\\tips_incorrect.mp3 alias incorrect"), NULL, 0, NULL);mciSendString(_T("play incorrect"), NULL, 0, NULL);

設定中心

UI思路

用一張圖片作為設定中心的圖層,然後在上面繪製設定項。

注意,以設定中心為裝置進行繪製的時候,座標原點在設定中心區域的左上角,並不是視窗的左上角。

繪製完成後再使用SetWorkingImage()函式切換到視窗繪製模式,並用putimage()函式把設定中心的圖層輸出在視窗上。

動畫

整個設定中心作為整體從視窗底部向上移入到視窗的中心位置,關閉時從原路移除,效果如下。

C語言+EasyX庫GUI程式設計之數字記憶遊戲——音訊播放和設定中心

設定中心從視窗底部移入

這個動畫原理不復雜,點選右下角設定按鈕的時候,觸發下面的邏輯:

繪製設定中心,把文字、按鈕都繪製到設定中心上去

迴圈把設定中心在視窗上的位置(Y軸)從大到小遞減,一直到視窗中間

注意:迴圈體中要使用cleardevice()清除上一次的裝置,否則會出現重疊。但是執行cleardevice()會使視窗變成黑框(原來的畫面都清除了),所以在此之前先利用getimage()函式把整個視窗的“快照影象”儲存下來記為window_image,在執行cleardevice()之後使用putimage(0,0,&window_image)即可完美呈現出想要的動畫效果。

關閉並移除設定中心的時候,先要獲取設定中心的快照影象,然後進行清除裝置、畫視窗快照、畫設定中心快照這三步迴圈。

另外,還有一個邏輯:遊戲正在進行中點選設定按鈕時要暫停計時。

資料管理

設定的資料儲存在一個二進位制檔案裡。程式裡定義一個全域性變數儲存設定項裡的資料,在主函數里讀取檔案資料並賦給這個全域性變數;當在設定中心修改後改變這個全域性變數裡的值,並且把新資料寫入到檔案裡。

開關按鈕動畫

EasyX做UI介面的話有點不太合適,這裡勉強做了一個開關按鈕的動畫。

C語言+EasyX庫GUI程式設計之數字記憶遊戲——音訊播放和設定中心

開關按鈕動畫

簡單說一下思路:開關底層是一個按鈕,上層一半是按鈕滑塊,一半是開關的提示文字“ON/OFF”;點選切換狀態的時候把上面的滑塊往另一側移動,迴圈這個移動的過程藉助BeginBatchDraw()、FlushBatchDraw()、EndBatchDraw()即可實現開關動畫。

為了使得開發方便,把設定開關按鈕單獨封裝成一個函式,並且留一個滑塊偏移量的引數,這樣就可以透過逐漸改變偏移量來迴圈繪製並達到動畫的效果。

點選區域的管理

在專案裡要記錄比較多的點選區域:

展示數字的格子

右側的暫停/重置功能按鈕

右下角的設定ICON

設定中心的開關、關閉按鈕

其中,格子的座標特別有規律,記錄判斷也很方便;而剩下的就不太方便了,專案裡的處理方式是整理兩個型別(功能按鈕、設定相關的按鈕)的按鈕座標陣列作為全域性變數,在繪製的時候把座標依次記錄下,然後再特定邏輯下去判斷點選了哪個按鈕,並且相應

去執行哪個函式。

感覺這種方式比較直接、簡單粗暴,但是維護起來可能不太方便。後期可以專門定義一個結構體資料來存放點選區域,並加上相應的標記,這樣可以使得點選事件的處理邏輯儘可能的統一,讓程式碼的擴充套件性和維護性更強。

OK,這一期的內容分享就到這裡了,目前遊戲已經算得上“能玩”了,後面再把排行榜模組完善一下,再往後就做個專案總結、重構一下專案程式碼。

Top