トピック
bはかせ kojimadaiti

またまた質問

【画像参照】 要約→スコアに合わせてそれぞれ 違った処理をしたいのですが、 (例:スコア1000だったらbgm4を流し、 スコア2000だったらbgm2を流す) しかし、その分岐が多く、 ひとつずつ IF (条件) THEN (処理) としていたのでは少し面倒で… 何か他にいい方法ありませんかね? (説明分かりにくかったらすみません。) 画像はやりたかっただけです。
2そうだね
プレイ済み
返信[1]
親投稿
bはかせ kojimadaiti
実際のところ、スコア次第で様々な 処理を行うというよりかは、 画像のように結構細かく条件を 分けているんです。 なのでこれを大量に打ち込むとなると もう少しいい方法がないのかと 考えるようになりまして。 うーん、DEFでひとつの命令にまとめるのも 手ですかね…
1そうだね
プレイ済み
返信[2]
親投稿
Villit nakahara1226
FOR A=0 TO 区切りの個数 READ MAX,MIN IF SCORE<=MAX&&SCORE>=MIN THEN B=A:A=区切りの個数 NEXT んでBの数値で分岐 あとは区切りの最大値と最小値をDATAで書き殴る
3そうだね
プレイ済み
返信[3]
親投稿
Villit nakahara1226
まあ要するに分岐する点数をDATAで書きなぐって FORで総当りさせれば 見やすいんじゃない?ってこと
2そうだね
プレイ済み
返信[4]
親投稿
Villit nakahara1226
ただ俺はまだ初心者だし神様がもっと楽な方法を御教授してくれるかもね。
1そうだね
プレイ済み
返信[5]
親投稿
ΖΕΧ ZEX256
排列にBGM番号を入れておく スコアを1000でdivして配列の添え字にしbgmplayに渡す。
5そうだね
プレイ済み
返信[6]
親投稿
すごく面倒くさいですが、 BGMPLAY 2*(SC==10)+4*(SC==100)+5*(SC==1000)+8*……… のような方法があります。 あとはZEXさんがいったとおり、 SCBGM[99]とかの配列に全BGMデータぶちこんで、 BGMPLAY SCBGM[LEN(STR$(SC))] にするとか
1そうだね
プレイ済み
返信[7]
親投稿
すいません間違ってました。
1そうだね
プレイ済み
返信[8]
親投稿
bはかせ kojimadaiti
なるほどなるほど… 結構いろいろな方法があるものですね。 この中で、頑張って自分で使いこなせそう なものを使おうと思います。 他にもこんな方法あるぞ!という方は 是非教えていただければ嬉しいです。 皆さん回答ありがとうございます。
0そうだね
プレイ済み
返信[9]
親投稿
ish owlis1
皆さんが答えられていますが、単純に処理の共通化ができれば、評価する値をDATAに持たせ、対になるBGM番号を持つのがシンプルでしょうか。 私の論点が間違っているかもですが、もし「煩雑なIF文が続くのを回避したい」という要件であれば、一つの大きな関数にする方法もあるし、IF文を関数で分解してしまうのも実装の選択肢としてはあるかと。 添付はif文を分解した実装サンプル。 かえって、とても長いコードになりました。
1そうだね
プレイ済み
返信[10]
親投稿
Ϊċăņ ďо įт hikahikaru3
自分がやるとしたら ON S DIV 1000 GOSUB @b0,@b1,@b2 END @b0 bgmplay 0 return @b1 bgmplay 3 retuen @b2 bgmplay 9 return とかかなー((適当
1そうだね
未プレイ