プレイ日記
乱数使って、タイトル画面の時に流す音楽を変えたいのですが、出来たんですけど、同じ曲が連続で出てきたりします、ていうかその曲しかでたことがありません、こういうのって解決できます? もしかしたら乱数で曲流すところから間違ってるかも?
3そうだね
プレイ済み
返信[1]
親投稿
乱数を自分で作るなのー RND()だとよく同じ数字が出るなのー
0そうだね
プレイ済み
返信[2]
親投稿
画面に写ってない@1,@2はどうなってるなのー?
0そうだね
プレイ済み
返信[3]
親投稿
乱数をつくる??
0そうだね
プレイ済み
返信[4]
親投稿
こんな感じです!! 2も同じような感じです!
1そうだね
プレイ済み
返信[5]
親投稿
乱数は「でたらめな数」なのー でも、コンピュータはでたらめなんてできないから本当は「でたらめみたいな数」なのー 「でたらめみたいな数」を自分で作るなのー たとえば、MAINCNTを使うと、プチコンを起動してからの時間が同じなら、同じ数字になっちゃけど、1秒間に60回変わるからそう簡単にはバレないなのー
0そうだね
プレイ済み
返信[6]
親投稿
@1の上には@0があるなのー? もしかして、Aが0でも1でも2でも、@2の曲が流れてるなのー?
0そうだね
プレイ済み
返信[7]
親投稿
IF なにか THEN @0 IF なにか THEN @1 IF なにか THEN @2 @0 処理A @1 処理B @2 処理C こうすると必ず処理Cをしちゃうなのー
2そうだね
プレイ済み
返信[8]
親投稿
e Sonoda.Yuuki.MH
要するに @0(または@1)の処理したあとそこから脱出しないとそのまま次のラベルに行くんだな。俺ちょっと説明下手なんだな。 朝起きて  Aが0だったら朝のままで Aが1だったら昼になって Aが2だったら夜になって だと朝が終わったたあといずれ昼はくるだろ? 最終的に夜になってしまうということだ(俺なんの話してんの?) IF A=ほにゃらら THEN BGMPLAY ほらにゃにゃ にすると解決かも
0そうだね
プレイ済み
返信[9]
親投稿
先ず、下記のコードを観て下さい。 N=RND(4) IF N==0 THEN @0 IF N==1 THEN @1 IF N==2 THEN @2 @0 PRINT "0" @1 PRINT "1" @2 PRINT "2" 今、Nに2が設定されると@2の処理丈が実行されますが、0なら@0の処理を実行した後、下に流れ落ちて(ドロップスルーと謂います)@1と@2の処理も実行されます。(続く)
0そうだね
プレイ済み
返信[10]
親投稿
従って、上記のコードの後ろに @MAIN の様なラベルを作り、各処理の後で、其処に飛ばす様にすれば良いと想います。 @0 PRINT "0":GOTO @MAIN @1 PRINT "1":GOTO @MAIN @2 PRINT "2" @MAIN
0そうだね
プレイ済み
返信[11]
親投稿
ツララ LongIceSword
飛び先のラベルをサブルーチン化しちゃえばいいんじゃないですか? サブルーチンはメインループから外しておかないと、そのまま流れで実行されちゃいますけど。
0そうだね
プレイ済み
返信[12]
親投稿
ほっぺ tkytbrgb
こういう風にすれば簡単じゃない?
0そうだね
プレイ済み
返信[13]
親投稿
間違っていないと思います。 BGMPLAYは、同じトラック番号(省略時はトラック0)を指定すると、前の演奏を停止して、新しく指定された曲の演奏を始めます。 そのため、このプログラムの場合、0のときは0,1,2の曲を演奏しています。同様に、1のときは、1,2の曲を、3のときは3の曲を演奏しています。 この点を考慮して、やりたいことに合わせて、プログラムを修正すれば良いです。
0そうだね
プレイ済み
返信[14]
親投稿
けんけん MAX-UFO
作曲も出来ない自分って一体…^^:;
0そうだね
プレイ済み
返信[15]
親投稿
そうなの?確かに他の曲が流れたあとにすぐまた他の曲が流れたりしてたなー けんけんさん、これは、他の人が作った曲を使用しています!! それとコメント返すの遅れてすみません
0そうだね
プレイ済み
返信[16]
親投稿
前の曲が流れるのは、一瞬です。このプログラムの場合は、約1/60秒です。書き方によっては、一瞬すら鳴らないこともあります。
1そうだね
プレイ済み
返信[17]
親投稿
?!なんかラベル変えても同じ曲が流れる、いか☆せんせいさんの方法もだめでした、ということはどこかでまちがってる??
0そうだね
プレイ済み
返信[18]
親投稿
タイトル画面の音楽なので、起動時に一回丈しか演奏されない物だと思って居ました。 構文的な問題で無ければ、演奏方法の問題かも知れませんね。BGMPLAYステートメントの第1引数のトラック番号が省略されて居るので、同じトラックで演奏される為、次の曲が演奏されると、前の曲が終了すると謂う様な事が起こって居ませんか。演奏が終了する迄、ウェイトを入れて観ては如何ですか。 REPEAT : UNTIL BGMCHK(0)==0 猶、BGMCHK関数の引数は、トラック番号です。但し、タイトル画面での演奏は、通常バックグラウンドで行うので、ウェイトを入れると謂うのも変ですが…
0そうだね
プレイ済み
返信[19]
親投稿
こーた w.d.we.k
IF命令で処理を選択する方法以外に、曲を選択する方法もあります。 問題は、選んだ曲だけを演奏するか、選ばなかった曲を演奏しないようにすれば、良いと思います。たとえば、GOTO命令で実行したくない処理をスキップするとかです。
0そうだね
プレイ済み
返信[20]
親投稿
別の例です。こんな書き方もあります。 例1)計算で曲番号を変える。 BGMSETD 128,0のラベル:BGMSETD 129,1のラベル:BGMSETD 130,2のラベル BGMPLAY RND(3)+128 例2)IF命令で曲番号に設定する曲を変える。 A=RND(3) IF A==0 THEN BGMSETD 128,0のラベル ELSEIF A==1 THEN BGMSETD 128,1のラベル ELSEIF A==1 THEN BGMSETD 128,2のラベル ENDIF BGMPLAY 128
0そうだね
プレイ済み
返信[21]
親投稿
マギー M191246
DATA文は、指示したラベルの後にあれば プログラム中どこにあってもいいので 例えば @1 BGMSET 128,@BGM74 BGMPLAY 128 GOTO @MAIN @2 BGM~ … @BGM74 DATA ~ のようにすると、プログラムの流れが わかりやすくなりそうな気がします。
0そうだね
プレイ済み
返信[22]
親投稿
選んだ曲だけを鳴らす例3 いろいろ例を挙げたので、かえって混乱させてしまったかも知れません。 方法はいろいろありますが、一番重要なのは、「自分がやりたいように動くかどうか」です。それ以外は、自分の好みでやりたいようにすれば、それが正解です。
0そうだね
プレイ済み
返信[23]
親投稿
ありがとうございます、おかげで流れるようになりました、あとは自分で考えます、いつも丁寧に答えてくださり皆さんありがとうございます。
0そうだね
プレイ済み
返信[24]
親投稿
けんけん MAX-UFO
おー事件解決したの^^
1そうだね
プレイ済み