iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
1

引言

從今天開始我們會進入2D的世界囉!
我們預計會製作一款平面地圖探索遊戲,
類似魔塔找鑰匙開門的小遊戲~

所以今天的程式會使用新的專案哦,大家記得創建新的專案

首先我們先來處理較為硬派的部分,也就是直接使用函式庫的部分啦,
我們先來處理音效的播放

<windows.h>標頭檔也可以做到聲音的播放
(其實是其子函式庫mmsystem.h提供,但這邊只要知道windows.h有包含就好)

但需要連結一些Library,以下將會教學如何設定。


創建新專案,加入main.c檔

這個我相信大家都很熟悉了,將會如下圖結果:
https://ithelp.ithome.com.tw/upload/images/20191003/20111429HoYQhDkTVx.png
我們引入了標準輸入輸出,以及這次主要會使用到的"windows.h"。

連結winmm Library(此方法僅限CodeBlocks)

這個部分大家可能比較陌生,想要播放音樂的話,就需要這個Library輔助。

  1. 滑鼠移到Settings選項
    https://ithelp.ithome.com.tw/upload/images/20191003/20111429Z01mGWFqTa.png
  2. 選擇Compiler
    https://ithelp.ithome.com.tw/upload/images/20191003/20111429k36GKQezPM.png
  3. 會打開一個設定區,這邊選擇Linker Settings標籤
    https://ithelp.ithome.com.tw/upload/images/20191003/20111429yejGr6w0Eq.png
  4. 會如圖左右兩欄
    https://ithelp.ithome.com.tw/upload/images/20191003/20111429ubRPtCGo3O.png
  5. 我們先在左邊那欄按下Add按鈕
    https://ithelp.ithome.com.tw/upload/images/20191003/201114296JjATWBiGf.png
  6. 這邊是請你增加要連結的Library,我們在裡面填"winmm"(一共五個字母)
    https://ithelp.ithome.com.tw/upload/images/20191003/20111429u06BvFZAxV.png
  7. 最後在右欄填上"-static",代表要將Library一起包進程式中,未來發佈會直接附在遊戲中。
    https://ithelp.ithome.com.tw/upload/images/20191003/20111429uLyyPkXPxO.png
  8. 最後按下OK,設定完成。

PlaySound函數

標頭檔、函式庫都處理好後,我們可以開始使用播放聲音的功能了,這個函數是PlaySound:

BOOL PlaySound(
   LPCTSTR pszSound,  // 不要想太多,這邊就是聲音檔案的路徑(相對)
   HMODULE hmod,      // 這邊一律填NULL,這次不會用到
   DWORD   fdwSound   // 一些參數,例如是否循環播放? 等等。
);

參考—MSDN: PlaySound介紹

稍微介紹一下第三個參數的幾個常用例子:

第三參數候選 功能
SND_ASYNC 非同步播放,也就是PlaySound一呼叫,就馬上return,但音樂繼續播放
SND_SYNC 同步播放,必須等音樂播放完程式才會往下走
SND_LOOP 循環播放,音樂會不斷重複播放,所以一定不能等音樂播完才return,設這個功能一定要搭SND_ASYNC
SND_FILENAME 代表第一個參數(音檔路徑)是音樂檔的檔案名稱

PlaySound還有個特點是,只能播放.wav檔案,推薦大家使用audacity軟體將音檔轉成.wav檔,再丟給PlaySound


範例

我們來做個範例,讓電腦發出第一個聲音吧!

  1. 先在專案資料夾中創建一個"musics/"資料夾
    https://ithelp.ithome.com.tw/upload/images/20191003/20111429BnkRA0sBMa.png

  2. 在"musics/"中放一個想要播放的.wav檔案
    https://ithelp.ithome.com.tw/upload/images/20191003/201114292eCuEpx8kM.png

  3. 程式碼:

#include <stdio.h>
#include <windows.h>

int main(int argc, char *argv[])
{
    // 播放放在執行檔所在資料夾的「musics」資料夾中的「open.wav」音檔
    // 模式為「同步」,等音樂播完才往下執行,且第一參數是音檔檔名
    PlaySound("musics/open.wav", NULL, SND_SYNC|SND_FILENAME);  // 多個屬性用"|"隔開
    
    getchar();
    return 0;
}
  1. 執行
    大家可以執行看看,應該會播放該.wav檔的聲音哦!

我們明天來製作開頭BGM以及一些音效試試看~


上一篇
[11屆鐵人賽Day18] 3D引擎製作(八)—放置方塊(下)
下一篇
[11屆鐵人賽Day20] 2D遊戲—BGM、視窗設定
系列文
若沒有遊戲引擎、合作夥伴...做得出遊戲嗎? 不試試看不知道吧? [使用C語言]30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言