BGM(2/2) |
まとめますと、以下の通りです。
; プログラム起動時の初期設定 ; BGMファイルを開く repeat 3 i=cnt+1 mci "open samplebgm"+i+".mid alias abogadrobgm"+i mci "set abogadrobgm"+i+" time format milliseconds" loop mci "open bossbgm.mid alias bossbgm" mci "set bossbgm time format milliseconds" mci "open endbgm.mid alias endbgm" mci "set endbgm time format milliseconds" bgmname="" ; ステージスタート時の初期設定 ; BGMを鳴らす。 mci "play abogadrobgm"+stageno+" from 0" bgmname="abogadrobgm"+stageno ; 敵が爆発中の処理 f=0 repeat 10 if enemyf.cnt=3 { eplcnt.cnt=eplcnt.cnt+1 k=enekind.cnt if (eneclass.k!2)&(eplcnt.cnt=15) { enemyf.cnt=0 } if (eneclass.k=2)&(eplcnt.cnt=300) { enemyf.cnt=0 gosub *BGM_Stop stageno=stageno+1 if stageno<=3 { f=1 break } else { gosub *Ending f=2 break } } } loop if f=1 { goto *Stage_Start } if f=2 { goto *Game_Start } ; 自機爆発中の処理 if playerf=3 { peplcnt=peplcnt+1 if peplcnt=100 { noption=0 nplayer=nplayer-1 if nplayer=0 { playerf=0 govercnt=0 gosub *BGM_Stop } else { playerf=2 revcnt=0 playerx=xsize/2-16 playery=ysize-64 nbomb=3 } } } ; ボス登場の2秒前にBGMを止める。 if mappnt=3846 { gosub *BGM_Stop } ; ボス登場時、ボス用BGMを鳴らす。 if (playerf!0)&(mappnt=4096) { mci "play bossbgm from 0" bgmname="bossbgm" } ; エンディング *Ending gosub *Clear_Screen msx=24:msy=64 mescont="君の活躍によりアボガドロ軍は撤退した。" gosub *wrtmes msx=48:msy=96 mescont="C O N G R A T U L A T I O N S" gosub *wrtmes msx=64:msy=160 mescont="Y O U R S C O R E "+score gosub *wrtmes msx=64:msy=192 mescont="H I G H S C O R E "+hiscore gosub *wrtmes ddredraw endingcnt=0 gosub *In_Key repeat await 16 if endingcnt=125 { mci "play endbgm from 0" bgmname="endbgm" } gosub *In_Key if (pckey=0)&(ckey=1) { gosub *BGM_Stop break } endingcnt=endingcnt+1 loop return ;BGMの演奏を終了する *BGM_Stop if bgmname!"" { mci "stop "+bgmname bgmname="" } return
ひとくちメモ: |
・BGMのファイルって、どうやって用意するの? |
これもまた、一番手っ取り早いのはフリー素材を探すことです。 自分で作曲する場合、手軽にできるツールとしては例えばサクラがあります。「ドレミファソ」と書けばドレミファソと鳴るという、簡単に扱えるツールです。 |
・mci命令について |
mci命令はここに書いたもの以外にもいろいろあります。ループして(つまり終了したらまた最初から)再生することもできます。途中で止めて、止めた所から再生することもできます。
mci命令の詳細については、例えばsprocketさんのサイトやShinさんのサイトで解説されています。
|
・エイリアス(別名)について |
普通に文章を書く場合にも、「弾幕が画面を覆い尽くすタイプ(以降弾幕系)の……」などとして、以後は「弾幕系」としか書かなかったりしますよね? このように別名を付与した方が便利な場合があります。 mes , print , ddprintの3つはすべて引数の内容を画面に書く命令ですが、ddprintはDirectX用で、mesはそうではないという意味で全然別の機能です。これに対し、printはmesに別名を付与しているだけであって、全く同じ命令です。mesでもprintでも、好きな方を使えばいいのです。 また、「代入のイコールと比較演算子のイコールが同じ"="であるのはまぎらわしくて嫌だ」という人のために、比較演算子の方は"=="と書くこともできます。これも"="に付与された別名です。 |