投稿
プチコン3号でBASICが少し分かってきた方を対象に軽い問題を出します。今回で4問目。 問題。次のプログラムを実行して「Aが5ならば音楽を流して終了する」はずが、音楽が流れずに終了しました。 原因と対策を答えなさい。 A=0 @LOOP A=A+1 IF A==5 THEN GOTO @OWARI:BGMPLAY 0 GOTO @LOOP @OWARI END 答えが分かった方は「ネタバレ」で答えを書いて頂きたいです。正解した方にはそうだねで返します(私が見て無い時でも誰か分かる方がそうだねを押して頂けると助かります)。 ※今回は実行しても「エラーにはなりません」。ならば何がおかしいのかよく考えて下さい。
5そうだね
プレイ済み
返信[1]
親投稿
【音楽が流れない原因】 BGMPLAYで音楽を鳴らす前に@OWRIに飛んでしまっているから。 【対処法】 BGMPLAYの命令をGOTOの前に持ってくる。 そうすれば、BGMが流れてから@OWRIに飛んでプログラムが終了します。
3そうだね
プレイ済み
返信[2]
親投稿
pinfu ANNAININ
@OWARI の前にBGMPLAY もしくは、 @OWARI BGMPLAY END  ですかね・・・ これは、似たような経験が・・・
2そうだね
プレイ済み
返信[3]
親投稿
KU kerorinU
IF文中、GOTOで終了ルーチンに飛ばしてからBGMPLAYを記述しているのでBGMPLAYが実行されない、かな? GOTOの前にBGMPLAYを置けば改善すると思います。
3そうだね
プレイ済み
返信[4]
親投稿
pinfu ANNAININ
失礼、GOTOの前に・・・
2そうだね
プレイ済み
返信[5]
親投稿
タバひめ tabahime
IF A==5 THEN GOTO @OWARI:BGMPLAY 0 THENの後に GOTO @OWARIとすぐ右に書いてるのでBGMPLAY 0は実行されずにループを抜けて終了しますね。正しくは IF A==5 THEN BGMPLAY 0:GOTO @OWARI と、書くべきですね。
2そうだね
プレイ済み
返信[6]
親投稿
めがね tatsugu
BGMPLAY 0が、GOTOの直後に記述されているから、 ラベルに飛んで無視されているのでしょうか……?? IF以降を、 IF A==5 THEN GOTO @OWARI GOTO @LOOP @OWARI BGMPLAY 0 END としたら動くような気がします...た、たぶん。 (あとでプチコン起動して確認しよう)
1そうだね
プレイ済み
返信[7]
親投稿
ヨッシー okkun2002
BGMの再生より、ENDのほうが早く時実行されるプログラムのため
0そうだね
プレイ済み
返信[8]
親投稿
>ヨッシーさん ・・・惜しいです。何故「音楽を流す前に@OWARIへ行ってしまうのか」のかをもう一度よく考えて下さい。
0そうだね
プレイ済み
返信[9]
親投稿
ヨッシー okkun2002
GOTO @OWARI:BGMPLAY 0 ではなく GOTO @OWARI:BGMPLAY 0 でいいですか?
0そうだね
プレイ済み
返信[10]
親投稿
ヨッシー okkun2002
↑ 間違えました。 BGMPLAY 0:GOTO @OWARI です
1そうだね
プレイ済み
返信[11]
親投稿
>ヨッシーさん その通りです!
0そうだね
プレイ済み
返信[12]
親投稿
はる.txt HARU_0
原因 bgmを流す前に@OWARIへ進んでしまっている。 対策 4行目を IF A==5 THEN BGMPLAY 0:GOTO @OWARI に書き換えると想像通りの動きをする・・・はずです
1そうだね
プレイ済み
返信[13]
親投稿
くろちく FoliageLamp
状況的には、GOTOの後にあるから 音が鳴らないんだとは思うのですが。 どの位置に移動させたら、いいのかはわからなかったです。 IF文の中につっこめばいいのかな… IF A==5 THEN BGMPLAY 0 GOTO @owari
1そうだね
プレイ済み
返信[14]
親投稿
でらく Dx0913
Bgmを再生する前にGotoしているから ...?
0そうだね
プレイ済み
返信[15]
親投稿
でらく Dx0913
Bgmplay:Goto かな...?
1そうだね
プレイ済み
返信[16]
親投稿
>LAMPさん 合ってるっちゃ合ってるのですが、ひとつだけ抜けてる部分があります。惜しいです。
1そうだね
プレイ済み
返信[17]
親投稿
それでは今回の解説を。今回は「GOTOの役割」です。 GOTOというのはGO TO、つまり「~へ行け」という英語そのものです。 そしてGOTOの後の同じ行にある命令は「無視されます」。そりゃ行った後ですし。 今回はGOTOの後にBGMPLAYが来てますので、 IF A==5 THEN BGMPLAY 0:GOTO @OWARI と入れ替えればOKです(THENのすぐ後のGOTOは省略出来ますが、今回は問題という事で省略しませんでした)。 些細な事ですが、大切な事ですので。それではまた次回いいのがあれば問題出しますね。
4そうだね
プレイ済み