プレイ日記
Ar ka10aru
このDATAマップはエラーが起きてしまいます。対処法を教えてください。
1そうだね
プレイ済み
返信[1]
親投稿
say sayer.exe
Type mismach なら一行目をコメントアウトしてみて
1そうだね
プレイ済み
返信[2]
親投稿
sayさんの回答以外に気になる点です。 1)5行目でJを0から5の6回繰り返していますが、DATA命令には5文字しかありません。 2)12行目の方法でBGを表示すると、DATA命令と実際の表示の縦と横が逆になります。(それが狙いならすみません。)
0そうだね
プレイ済み
返信[3]
親投稿
sayさんの指摘を細かく解説しますと、 D$[100]と「D$を配列変数として登録」していますので、その後にREAD D$と同じ変数を違う用途で使う事が出来ないのです。 直すにはD$[100]を違う変数に代えるか、READ D$を違う変数に代えるか、READ D$[I]としてしまうか、のどれかです(3番がオススメ)。 そして6行目、やりたいと思ってる事は「D$[n]を1文字ずつ読んでそれぞれCに変数を指定したい」という事だと見受けられます。 が、読みこんだデータは「文字『列』」として扱われる為このままでは全てCが0になってしまいます。 どうしたらいいか?答えは「更に1文字ずつ分解する」という事です。
1そうだね
プレイ済み
返信[4]
親投稿
1文字ずつ分解するにはどうしたらよいか? MID$という命令があります。これは「文字列から指定した文字を抜きだす」という命令です。 抜きだしたい文字列、何文字目から、何文字分抜きだす。という指定となります。 これを利用して「1文字だけ抜きだしたい」って事も可能です。 解答例としてプログラムを貼りましたので参考にしてみて下さい。 あともっと上級者っぽいやり方も。INSTRという「指定した文字が文字列の中の何文字目にあるのか」検索する命令です。何文字目かを調べたらCに直接ぶち込んでしまいましょう。
0そうだね
プレイ済み
返信[5]
親投稿
say sayer.exe
ミケさん解説ありがとう 正直、文字配列を moji$[n] って感じで一文字抽出できる技って、実際 バグ だと思います あんまり信用せずに使ったほうが無難でしょう 私見ですが、0の逆値が1なんもバグだと思います
1そうだね
プレイ済み
返信[6]
親投稿
ほっぺ tkytbrgb
実際の実用レベルならこんな具合になると思います 最初のFOR~NEXTで配列にデータを読み込んで 次のFOR~NEXT で実際に画面に6x5サイズで書き出してます WENDの前にZを増減させるプログラムをうまく書けば左右に動きます
0そうだね
プレイ済み
返信[7]
親投稿
sayさんへ 文字列変数A$の指定位置の文字を調べる「A$[指定位置]」という書き方は、公式ガイドブックの131ページに書いてある仕様です。 (私はあまり使いませんが…)
0そうだね
プレイ済み
返信[8]
親投稿
say sayer.exe
コータさんへ でもそれってa$が配列の場合ゴチャゴチャ… : : 配列でも使えるのかこの技orz キモい… dim a$[2] a$[0]="12345" a$[1]="abcde" ? a$[1][4]'←Cかよw
0そうだね
プレイ済み
返信[9]
親投稿
うーん・・・むしろその指定した文字を返すやり方って今の今まで知りませんでしたよ・・・1つ1つMID$とかで拾ってたクチですので。
1そうだね
プレイ済み
返信[10]
親投稿
Ar ka10aru
すいません、失礼します。もうひとつ質問です。DATAマップの領域を広げたくて、いろいろやってみましたが、out on DATA? になってしまいます。対処法を教えてください><
0そうだね
プレイ済み
返信[11]
親投稿
[訂正]12行目のコメントは勘違いでした。 [マップを広げる方法] どうやってマップを書いているのかを考えて見ると、広げる方法もわかるようになると思います。 1)変数Iは、マップの縦の位置を示し、変数Jはマップの横の位置を示しています。 2)データ命令の文字列1つ1つがマップの縦の位置に対応し、その文字列の文字の1つ1つが横の位置に対応しています。 3)READで文字列を読み取って、文字に対応するBGをBGPUTで表示しています。 よって、マップを広げるためには、「マップに対応する文字」と対応する「IとJの最大値」を増やすと出来るようになります。新しいやり方の場合は、行の終わりを、読み出した文字列が””で判断している為、DATA ""を追加する必要があります。
0そうだね
プレイ済み
返信[12]
親投稿
Ar ka10aru
それは、この緑で囲ったところですか?
0そうだね
プレイ済み
返信[13]
親投稿
はい、そうです。 そこと、DATA命令のデータとの、縦と横の数が一致している必要があります。 あと、その前にsayさんの言った対処をしないと、そこの処理までたどり着けません。
0そうだね
プレイ済み
返信[14]
親投稿
ごめんなさい。また勘違いしました。すでに対処済みでしたね。
0そうだね
プレイ済み
返信[15]
親投稿
数を数えるとき、普通は1から数えますが、プチコンの場合は、0から数えることが多いので、そこは注意が必要です。 たとえば、5個の場合、普通は1から5ですが、プチコンの場合は0から4のようになり、個数より1個少ない数が最大値になります。 この数え方は、他の命令でもよく使うので慣れてくださいね。
0そうだね
プレイ済み
返信[16]
親投稿
マギー M191246
他の方の意見をまとめただけですけど。 (それから、少しだけ補足。) ●最初の画像の場合。 ・1行目をコメントアウトまたは消す。 つまり、普通の文字列を配列のように使う時は 特に宣言はいらないということです。 ・画像の5行目を FOR J=0 TO LEN(D$)-1 などにする。 (続きます。)
0そうだね
プレイ済み
返信[17]
親投稿
マギー M191246
●二番目の画像の場合。 ・Out of DATAにならないようにするには 画像の24行目あたりに DATA "" を追加する。 ・WHILE命令は、 Iを増やしたりしてくれないので 4行目、5行目を消して NEXTとWENDの間にINC Iなどを入れると いいかと思います。
0そうだね
プレイ済み