投稿
ゆず#あつあく miyu-03-12-22
199行目がエラります。何故でしょうか?
1そうだね
プレイ済み
返信[1]
親投稿
i7 2630QM 634218
あんま詳しくないが A$[1]にすれば?
0そうだね
プレイ済み
返信[2]
親投稿
Godot orz_127
データと読み込む変数の型が違うか 読み込もうとしたのにデータがないか 多分、後者だと思いますが、 これだけの情報だとよく解りません。 エラーがでたときはそのエラーメッセージも一緒にコメントしてください。
0そうだね
プレイ済み
返信[3]
親投稿
ゆず#あつあく miyu-03-12-22
エラーメッセージはこれです。
0そうだね
プレイ済み
返信[4]
親投稿
マギー M191246
FOR文の前くらいのところに RESTORE @RUNATOKUN を入れてみて。 それと、このままでは、 最初のデータ "ルナ:あら、いらっしゃい" が、選ばれないんじゃないかと思います。 RND(5)+1を、RND(6)に 変えてみてください。
0そうだね
プレイ済み
返信[5]
親投稿
Godot orz_127
Out of DATA なので やはり読み込もうとしたときに データがなかった状態です。 FOR I=0 TO RND(5)+1 なので最大で0~5の6回のループです。 最低データは6つ用意する必要が あります。 データはちゃんと用意してあるぞ、という場合、データを読んで一旦終わってもう一度その処理にくると前に読んだ続きから読み始めます。 2回目の処理でデータが足らなくなっている可能性もあります。 その場合は、DATA文の前にラベルを置いてRESTOREコマンドでデータの読みだし位置を指定すると良いかもです。
0そうだね
プレイ済み
返信[6]
親投稿
マギー M191246
参考まで。 FOR文の終了値は、毎回評価されます。 このままでは、うしろの方のセリフほど 選ばれにくくなると思うので 一旦、別の変数に入れてから 設定するといいかも知れません。 R=RND(6) FOR I=0 TO R という感じです。
0そうだね
プレイ済み
返信[7]
親投稿
スー thanks_0u0
@RUNATOKUN、を何度も実行するなら、その都度READの位置をDATAの先頭にセットし直してあげる必要がありますよ( ´ ▽ ` )ノ RESTORE @RUNATOKUN、とすれば良いと思います。 あとは、FORの終わりを決めるところにRNDを使うと、ループするたびに毎回RNDされてしまうので、FOR I=RND(6)TO 0STEP-1、とかにした方が良いかもです! エラーと関係なかったらごめんなさい(・ω・)
0そうだね
プレイ済み
返信[8]
親投稿
スー thanks_0u0
はっ、ごはん食べながらだらだら書いてたらすごく回答来てますね!被っちやった(ノ´∀`*)
0そうだね
プレイ済み
返信[9]
親投稿
そもそも197行で乱数を初期化してますから毎回同じ台詞しか出てこなくなるかと。
0そうだね
プレイ済み
返信[10]
親投稿
Godot orz_127
ここは素直に @RUNATOKUN ON RND(6) GOSUB @R0,@R1,…,@R5 WAIT 420 GOTO @RUNATOKUN @R0 ?"その1" RETURN @R1 ?"その2" RETURN : @R5 ?"その6" RETURN とした方が無難では?
0そうだね
プレイ済み
返信[11]
親投稿
ゆず#あつあく miyu-03-12-22
やっぱり初心者の私がdataを使うのは無茶だったんだ… 皆さんの言ってることがさっぱりわからない… 素直にgodotさんの案でいきます。 コメントしてくださった皆さん、ありがとうございました!m(_ _)m
0そうだね
プレイ済み
返信[12]
親投稿
Godot orz_127
DATA文も良いですが、ここは素直に書いておいた方が後で台詞を増やしたりの修正が楽な気がします^^; 一応、説明だけで解りにくかったのかもなので簡単にプログラムしてみました。DATAは面倒くさいので数値になっていますが基本的な処理は、ゆずさんの考えたものと同じです。台詞のデータは6あると思います。乱数で読み込む数を決めて最後に読んだデータを表示します。 FOR文のTOの後は毎回評価(計算)されます。RND()を書くと毎回実行されます。なので先に値を決めて変数に入れておくと良いです。でFOR I=0 TO 0でも1回実行されます。なのでRND(5)+1だと最小値は1なので必ず1つめは読みとばされることになります。なのでTOの後は0~5とする必要があるのでRND(6)とします。 画像が、ゆずさんのプログラムの状態です。 (続くw)
0そうだね
プレイ済み
返信[13]
親投稿
Godot orz_127
(続き) 打ち込んで実行してみてください。 何度か目で質問した時と同じエラーとなる筈です。 表示を見るとわかると思いますが、2回目は1回目の続きからデータを読み込んでいるのがわかると思います。 それでデータが足らなくなって「Out of DATA」のエラーとなります。 ここまで確認できたら次にコメント化した緑色の2つの行の頭の「'」を外して実行してみてください。 何度目になってもエラーにはならないと思います。 RESTOREコマンドはデータの読み込み開始位置を指定します。 DATA文の前のラベルの位置に指定しているのでデータの最初からとなります。 表示されてる値をみると今度は2回目以降も前の続き出はなく1から表示されているのが確認できると思います。 と説明してみましたが、これでわかります?
0そうだね
プレイ済み
返信[14]
親投稿
あきと SideBurnsM
コメントの流れとはちょっと違う感じの書き込みをしてみます。 画像のようなコードを書いてみました。Aボタンで男の人、Bボタンで女の人がランダムで話します。 RESTOREしたすぐ下に会話の最大数を置くことで会話の数もデータで決められるようになっています。 あとは@MURABITO2、@MURABITO3と増やしていくだけという。データでも色々できますよ感だしてみました。
0そうだね
プレイ済み
返信[15]
親投稿
マギー M191246
Godotさんの示された方法でいくということで ここは、さらりと、 読み流してもらってかまいません。 納得済みこともあるとは思いますけど 一応、基本的な説明をしておきます。 READ文は、何も指示しなければ プログラムの中に書かれているDATA文の データを順に読んでいきます。 DATA文がとびとびの行に書かれていても、 きちんと順番通り読んでいき、 読むデータがなくなったらエラーを出します。 自分で戻ることは、ありません。 READ文が、ループの中にあっても もちろん同じです。
0そうだね
プレイ済み
返信[16]
親投稿
マギー M191246
(続き) RESTORE @ラベル は、READ文で読み込む場所を 指示するラベルよりうしろで一番最初のデータ文の先頭に変える命令です。 この命令で同じデータを読ませたり 飛ばして読ませたりします。
0そうだね
プレイ済み
返信[17]
親投稿
スー thanks_0u0
Godotさんの案でも同じになるから大丈夫ですけれど、最初のスクショの処理でほとんど合ってるから頑張ってみても良いと思う!( ´ ω ` ) 変えるところは3つだけ。 ★197行目のRANDOMIZEは普通は使わない命令だから消す! ★FORの前にRESTORE @RUNATOKUNって入れる! これはプチコンさんはDATAを読んだとき「ここまで読んだ」っていうのを勝手に覚えてて、次はその続きから読もうとするから、「次にREADするときは@RUNATOKUNの次のDATAからね!」って教えてあげるためです( ´ ω ` ) ★FORを、回数を決めてから回すように変える! R=RND(6) FOR I=0TO R 詳しい説明は他の皆様がしているとおりなのですけれど、とりあえず、FORの行にRNDは書かない、って思っておけば安全です(・ω・)
0そうだね
プレイ済み
返信[18]
親投稿
Godot orz_127
エラーになる原因は前のコメントのとおりです。 で、今度は、DATA文を使って同じことをやる場合の処理をちょっと手直ししてみました。 こんな方法もあります、と言うことで。
0そうだね
プレイ済み