プログラミング超初心者のための講座
 第12回 BASIC編「爆弾ゲームに挑戦 その2」(効果音)


さて第6回が始まりましたよ。 忘れ物はないですか?

引き続き前回のプログラムを使います。
今回は効果音でしたね。

(注意:今回の内容は互換BASICで未確認です。できれば純粋なN88BASICで試して欲しいところです)

では早速BEEPと入力してリターンしてください。
ピッとかピーという音がしませんでしたか?

これがBEEP音です。
これを番号を入れて間違えたときに使います。

以下のように変えます。
(いままで実際に表示される文字やリストを太字で書いていましたが
 リストが長くなってきたので変化のあったところだけ強調します。)
 

10 REM ========== 初期化 ============================
20 CLS:C=0
30 A=VAL(RIGHT$(TIME$,1))+1
31 PRINT" の家に爆弾が仕掛けられた!!!"
32 PRINT"それを知ったのはついさっきだ、やっとの思いで爆弾を発見したが"
33 PRINT"これを自分で処理しなくればいけない!!!!"
34 PRINT"おそるおそる爆弾の解体をはじめると、額に汗が流れてきた。"
35 PRINT"「これならうまくいけそうだ」そう思った瞬間、息をのんだ。"
36 PRINT"後は起爆装置へつながる線を切るだけなのだが、なんとダミーの線で囲まれている。"
37 PRINT"数は10本!!このうち1本が当たりだ。これを見つけだし切断に成功すれば"
38 PRINT"この危機を脱出することができる。しかし、爆弾には防衛策がとってあった"
39 PRINT"どうやら5本以上間違えて切ると即座に起爆装置が作動して、"
40 PRINT"我が家とともにこっぱみじんというわけだ。"
41 PRINT"しかしぐずぐずしているヒマはない!!!運を天に任せ切ることに決めた、、、、、、、"
42 PRINT" が切るのは、、、、、、この線だ!!!!!!!!!!!!!!!!!!!"
43 REM ========== 入力 ==============================
50 INPUT "何番の線を切りますか?(1-10)";B
60 C=C+1
70 REM ========== 判断 ==============================
70 IF B=A THEN GOTO 100
80 IF B<>A THEN GOSUB 130
90 GOTO 50
100 REM ========= 当たり処理 ========================
110 PRINT "よかった助かった!!"
120 GOTO 200
130 REM ========= はずれ処理 =======================
135 BEEP
140 PRINT "間違いだ!!"
150 IF C>=5 THEN GOTO 170
160 RETURN
170 REM ========= ゲームオーバー =====================
175 PRINT "ドッカーン!!!"
176 PRINT "あなたは死にました"
180 PRINT "GAME OVER"
190 REM ========== もう1回 ==========================
200 INPUT "CONTINUE?(Y/N)";R$
210 IF R$ = "Y" THEN GOTO 10
220 IF R$ = "N" THEN END
230 GOTO 200

RUNすると
入力した答えが違ったとき
ピッと音がするようになりました。

たったこれだけで感じが変わりました。
では他の音は出せないのでしょうか?BEEP音はブザーですからなっているかなっていないかしか出せません。
ではこれをうまいこと利用してみましょう。今度は1をつけてください、どうなりましたか?

BEEP 1

ぴーーーーーーーーーーーーーー!!!!!!!!!!!!!!!!!!!!!!!

けたたましい音が鳴り続けますね。止めるには

BEEP 0 です。

とまりました。ほっとしましたね。ではこれを利用してみましょう。

プログラム中でBEEP 1:BEEP 0としたらどうなると思いますか?

ぴっ

耳には聞こえない音になると思いませんか?音が鳴ったかならないかわからないうちにBEEP 0で止めるからです。

ではこれを繰り返したらどうなると思いますか?

FOR I=0 TO 100:BEEP 0:BEEP 1:NEXT I

っぴぴぴぴぴぴぴぴぴぴぴぴぴぴぴぴぴぴぴぴぴぴっっぴ・・・・・・・・・・・

聞き取れない音が連続して繰り返されることになります。
これを人間が聞くと鈍い音に聞こえるのです。

でもそれでも一瞬です。やっぱり聞き取れません。音の長さが足りないからです。
では更にこの組み合わせを繰り返したら音が長くなりませんか?2重ループを使います。

FOR T=0 TO 300:FOR I=0 TO 100:BEEP 1:BEEP 0:NEXT I:NEXT T

ーーーーーーー!!!

低い音が鳴りましたね。人間の耳なんていい加減なものです。
これを爆発したシーンに使いましょう。

わかりやすく言えば最初のループが音の長さ次が音の高さに相当します。
訳の分からない人はそう思ってください。

FOR T=0 TO 300:FOR I=0 TO 100:BEEP 1:BEEP 0:NEXT I:NEXT T
        音の長さ       音の高さ

更に音程を変えて助かったシーンにも使いましょう。

リストはこうなりました

10 REM ========== 初期化 ============================
20 CLS:C=0
30 A=VAL(RIGHT$(TIME$,1))+1
31 PRINT" の家に爆弾が仕掛けられた!!!"
32 PRINT"それを知ったのはついさっきだ、やっとの思いで爆弾を発見したが"
33 PRINT"これを自分で処理しなくればいけない!!!!"
34 PRINT"おそるおそる爆弾の解体をはじめると、額に汗が流れてきた。"
35 PRINT"「これならうまくいけそうだ」そう思った瞬間、息をのんだ。"
36 PRINT"後は起爆装置へつながる線を切るだけなのだが、なんとダミーの線で囲まれている。"
37 PRINT"数は10本!!このうち1本が当たりだ。これを見つけだし切断に成功すれば"
38 PRINT"この危機を脱出することができる。しかし、爆弾には防衛策がとってあった"
39 PRINT"どうやら5本以上間違えて切ると即座に起爆装置が作動して、"
40 PRINT"我が家とともにこっぱみじんというわけだ。"
41 PRINT"しかしぐずぐずしているヒマはない!!!運を天に任せ切ることに決めた、、、、、、、"
42 PRINT" が切るのは、、、、、、この線だ!!!!!!!!!!!!!!!!!!!"
43 REM ========== 入力 ==============================
50 INPUT "何番の線を切りますか?(1-10)";B
60 C=C+1
70 REM ========== 判断 ==============================
70 IF B=A THEN GOTO 100
80 IF B<>A THEN GOSUB 130
90 GOTO 50
100 REM ========= 当たり処理 ========================
105 FOR T=0 TO 300:FOR I=0 TO 300:BEEP 1:BEEP 0:NEXT I:NEXT T
110 PRINT "よかった助かった!!"
120 GOTO 200
130 REM ========= はずれ処理 =======================
135 BEEP
140 PRINT "間違いだ!!"
150 IF C>=5 THEN GOTO 170
160 RETURN
170 REM ========= ゲームオーバー =====================
174 PRINT "ドッカーン!!!"
175 FOR T=0 TO 500:FOR I=0 TO 100:BEEP 1:BEEP 0:NEXT I:NEXT T
176 PRINT "あなたは死にました"
180 PRINT "GAME OVER"
190 REM ========== もう1回 ==========================
200 INPUT "CONTINUE?(Y/N)";R$
210 IF R$ = "Y" THEN GOTO 10
220 IF R$ = "N" THEN END
230 GOTO 200

これで臨場感が出るようになりました。

次回は色を付けてみましょう。

では次回の講義をお楽しみに
さいなら

もどる



このページはNetscapeNavigator or Netscape Communicator 4.7で
きれいに見えるように作られています。そちらをお使いください。