ターミナルタイピングRPG「クムドールの試練」v0.3.0 更新 – ステージ別BGMを追加 | UNIX Cafe

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

クムドールの試練 v0.3.0 更新 - ステージ別BGMを追加 | UNIX Cafe

C言語で作っているターミナルタイピングRPG「クムドールの試練」を、v0.3.0 に更新しました。

GitHubでは kumdor-trial という名前で公開しています。

今回の更新内容は、ステージ別BGMの追加です。

v0.2.0 では、課題の難易度調整やターミナル表示のカラー化を行いました。ゲームとしての感触は少し整ってきましたが、何度か遊んでいるうちに、画面の変化だけでは少し寂しい気がしました。

そこで v0.3.0 では、各ステージにBGMを付けることにしました。

目次

ステージごとにBGMを鳴らす

今回追加したBGMファイルは、BGM/ ディレクトリに置いています。

ファイル名はステージ番号に合わせています。

BGM/kumdor_01.m4a
BGM/kumdor_02.m4a
BGM/kumdor_03.m4a
...
BGM/kumdor_10.m4a

ゲーム側では、ステージ開始時に現在のステージ番号を見て、対応するBGMファイルを探します。

たとえば第1ステージなら BGM/kumdor_01.m4a、第10ステージなら BGM/kumdor_10.m4a を再生します。

対応するファイルがない場合は、エラーで止めずに、そのステージだけ無音で続行するようにしています。

ターミナルゲームなので、音源がない環境でも遊べることは残しておきたかったためです。

*.m4a を差し替えると、BGMを変更することができます。

最初はafplayで再生していた

最初はmacOS標準の afplay を使ってBGMを再生していました。

afplay は、Cのプログラムから子プロセスとして起動すれば、ゲーム本体を止めずに音を鳴らせるので手軽なのですが、ループ再生で問題が出ました。

音が途切れるのです。 afplay を利用すると、曲が終わるたびに起動し直すことになるので、次の再生が始まるまでに一瞬だけ間が空きます。

短いBGMを繰り返すと、この途切れが思ったより気になります。

AVFoundationでループ再生する

そこで、macOSではAVFoundationを使う形に変更しました。

追加したファイルは src/bgm_player.m です。

Objective-C側で AVAudioPlayer を作り、numberOfLoops = -1 に設定して、同じプレイヤーの中でループ再生します。

これで、曲が終わるたびに再生プロセスを起動し直す必要がなくなりました。

C側のゲーム本体から見ると、今まで通り「ステージ開始時にBGMを開始し、ステージ終了時に止める」という扱いのままです。

音の再生部分だけをmacOS用の小さなファイルに分けたので、ゲーム進行のコードにはあまり混ぜ込まずに済みました。

BGMなしでも起動できる

音を出したくない場面もあるので、BGMを無効にする起動方法も残しています。

KUMDOR_NO_BGM=1 ./kumdor_01

この環境変数を付けると、BGMファイルがあっても再生しません。

ターミナルで少し試すだけのときや、音を出せない場所では、この起動方法を使えます。

v0.3.0にした理由

今回の変更は、バグ修正ではなく、遊んだときの体験が変わる機能追加ですので、バージョンは v0.2.1 ではなく v0.3.0 にしました。

コード上の GAME_VERSION とREADMEの表記も v0.3.0 に揃えています。

今回の更新内容

主な変更点は次の通りです。

  • ステージ別BGMを追加
  • BGM/kumdor_01.m4a から BGM/kumdor_10.m4a を追加
  • macOSではAVFoundationでBGMをループ再生
  • ループ時に音が途切れにくい方式へ変更
  • KUMDOR_NO_BGM=1 でBGMなし起動に対応
  • バージョンを v0.3.0 に更新

小さな更新ですが、BGMを鳴らすと、画面だけの時よりもゲームらしさが感じられます。

次は、ステージごとの手応えやテンポを見ながら、課題や演出をもう少し調整していく予定です。

追記:BGMファイルをWAV形式に変更しました

BGMのループ再生時に、曲のつなぎ目でわずかな隙間が出ることがあったため、BGMファイルを .m4a から .wav に変更しました。

これに合わせて、ゲーム側で読み込むファイル名も次の形式に変更しています。

BGM/kumdor_01.wav
BGM/kumdor_02.wav
BGM/kumdor_03.wav
...
BGM/kumdor_10.wav

動作としてはこれまで通り、ステージ開始時に対応するBGMを探して再生します。対応するファイルがない場合は、そのステージは無音で進みます。

GitHub Repository

GitHub
kumdor-trial
C言語製ターミナルタイピングRPG「クムドールの試練」
github.com/k1117n-cmyk/kumdor-trial

v0.4.0 戦闘イベントで、RPGらしさを強化しました

前回まででゲームとして一通り遊べる形になったので、第4回ではステージ別BGM、敵の本気状態、反撃特性、状態異常などを追加して、戦闘に緊張感と変化を出していきます。

C言語の次にUnityやUnreal Engineを学ぶ選択肢

用途ごとに選ぶ C言語のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

目次