投稿
ネタバレ
Daisuke 0909daiki09
プチコン初心者です。ステージのデータを読み込ませてPRINTで貼り付けたいんですが、この時の配列の宣言の DIM ST$[ ] ↑このかっこにどんな数を入 れたらいいか分かりません … 親切な方教えてください…
1そうだね
プレイ済み
返信[1]
親投稿
Daisuke 0909daiki09
あれ?何故かこうしたら成功しました…出来ればこのやり方で何故成功したのか教えてください…
0そうだね
プレイ済み
返信[2]
親投稿
こうやま kouyama1967
 プチコンの場合、凄く簡単な法則で覚えられます。  自分が使いたい配列の一番大きな番号に、プラス1した数を DIMに入れて下さい。  例えばST$[]をプログラム中で0から7まで使いたいなら、DIM ST$[8]として下さい。途中で16まで使いたくなって改造するなら、DIM ST$[17]です。  なおこのDIM宣言や添字(番号の事をこう言います)については、いろいろなBASICや高級言語でローカルルールが微妙に違うので、プチコン3号以外を使う時はまた、その言語のルールをちゃんと調べ直してください。
2そうだね
プレイ済み
返信[3]
親投稿
Daisuke 0909daiki09
ありがとうございます!
0そうだね
プレイ済み
返信[4]
親投稿
読み込んで表示するだけなら始めの例でも3行目を消してしまえば動作すると思いますよ。(その場合は配列は使わない) そして配列を使うのだとしたら、こうやまさんの言うように使いたい配列だけ確保する必要があります。 なので動作の意図を考えると本当はDIM ST$[21]と確保しないといけないんですが、READ ST$[A]となっているのでAは常に0なのでエラーにならない感じです。ただ配列を意図しているなら、READはREAD ST$[I]になるしPRINTもST$[I]にしないと意図した動作ではないんじゃないかなって思います。
1そうだね
プレイ済み
返信[5]
親投稿
Daisuke 0909daiki09
難しくてよく分かりません…
0そうだね
プレイ済み
返信[6]
親投稿
ツララ LongIceSword
DIM命令で配列を宣言する時に変数[ ]の中に使いたい個数を書けばその分だけ使えるようになるんですけど、プチコンのルールで配列の添字は「0」から数え始めるので、実質的にプログラム中で使う時に[ ]の中に書ける番号は宣言時に書いた数から1を引いた数までになります。慣れない内は指折りで0から数えてみるといいですよ。自分もそうして覚えましたし。 なぜエラーが出なかったかの理由は、でんぺんさんの説明の通り、FOR文でのカウンタ変数Iを[ ]の中に書く変数にしてないからですね。 もしDIM命令で配列宣言する時に[ ]の中に書く数字をDIM命令を使う前にA=20などすでに代入済みの変数を使ってDIM ST$[A]と書いた場合は、FOR文のカウンタ変数の終了値を添字を決める時に使った変数Aに-1したものを書けば範囲外エラーは出ないと思いますよ。
0そうだね
プレイ済み
返信[7]
親投稿
こうやま kouyama1967
 私からももう一言。  せっかくDIM ST$[]を宣言したのに、添字用の変数Aがゼロのままなので、ST$[0]しか使っていませんね。  DATAに書かれている、"■"を使ったキャラ絵は、プログラム実行中に、もう一度かく必要がありますか?最初の一度しかかないのだったら、配列ST$[ ]は宣言する必要がないので、単にST$とかA$だけでいいです。DIMもいりません。  何度もかく必要があるのなら、ちゃんと添字に代入して FOR I=0 TO 20:READ ST$[I]:? ST$[I]...などと書きましょう。
0そうだね
プレイ済み
返信[8]
親投稿
マギー M191246
一番最初の画像のままでも(一切触らずに) エラーは出なかったと思います。
0そうだね
プレイ済み
返信[9]
親投稿
Daisuke 0909daiki09
ありがとうございます!
0そうだね
プレイ済み
返信[10]
親投稿
Daisuke 0909daiki09
もう一つ質問があります。ステージのデータを読み込むのをサブルーチンから外したらステージが表示されませんでした…何故でしょうか?
0そうだね
プレイ済み
返信[11]
親投稿
そういえば始めのままでもエラー出ないですね。最近やってないのでプチコンではDIMとVARは同一なのでそのままでも普通の変数宣言になるだけだというのを忘れてました…。 ステージの読み込みを外したら表示されないのは当然というか、その処理では読み込んでから表示する(PRINTの省略形の?で)しているので、その部分を外したので表示されなくなったという感じですね。
0そうだね
プレイ済み
返信[12]
親投稿
say sayer.exe
流れにミスがありますね 6,7,8行で入力待ちしてますが、入力があったら@loop(15行)に飛んでく様にしてあります なので9~14行は実行されません 入力待ちのジャンプ先を@loopじゃなく9行目に飛んでく様にしたらいいでしょう
0そうだね
プレイ済み
返信[13]
親投稿
あー、どうも見落としてるな…。上にも同じのがあったんですね…。あまりちゃんと見てませんでした…。 すいません。僕のコメントは気にしないでください。
1そうだね
プレイ済み
返信[14]
親投稿
Daisuke 0909daiki09
なるほど!そういうことですか!sayさん、でんぺんさんありがとうございます!
0そうだね
プレイ済み