プレイ日記
DATAでマップ製作してるところなんですけど、表示してくれませんどこが間違っているんでしょうか?
2そうだね
プレイ済み
返信[1]
親投稿
6行目の式が成立しない
0そうだね
プレイ済み
返信[2]
親投稿
かたけ~ katakei0505
dataの中身をただ読むだけだと、 map$は“■■■■■■■■■■”になってしまいます。 なのでmap$==“■”にはなりません。 なので、ひとつひとつを区切ってやる必要があります。
1そうだね
プレイ済み
返信[3]
親投稿
まずはDATAを1つにしてREADで読み込んだ文字列をBGにするところからやってみるといいんじゃないかな? その場合、READするためのループは無くても大丈夫ですが、読み込んだ文字列は1文字じゃない(1文字にする方法もあるけど)ので、その文字列を1文字ずつに分解して(そこでFORはつかえる)、その1文字に対してIFやその他の命令でBG番号に変換してやって、その番号のBGを配置(BGPUT)してあげればいいという感じです。 一つ一つ理解を深めて自分のプログラムが組めるように頑張ってください。
1そうだね
プレイ済み
返信[4]
親投稿
仮のものはできました。でもなんか負けた気分です。
0そうだね
プレイ済み
返信[5]
親投稿
READで文字列(2文字以上)を読み込んだ場合、当然ですがIFで判定できるのはその文字列(固まり)になっちゃうのはプログラムを見た感じわかったのかなと思います。 ということは、あとはこの文字列を1文字ずつ分解して、その文字に対して数値に変換してあげれば望みの動作になると思いますよ。 文字列を分解するにはMID$命令を使います。また1文字ずつ処理する都合上、文字列の長さがわからないと困りますが、それはLEN命令で調べられます。 また1文字だけ抜き出すならMID$じゃなくて文字列を配列的に処理する事でも可能ですし、その方が記述がシンプルですが、まずはMID$でやってみるのがいいじゃないかなと思います。MID$の方が様々な用途に使えますしね。
0そうだね
プレイ済み
返信[6]
親投稿
もう一つだけ。以下のプログラムで文字列を1文字ずつ表示する事が出来ます。ということでこれを応用すればマップにも変換できるはず。 頑張ってください! M$="■■■■■■■■■■" FOR I=0 TO LEN(M$)-1 PRINT (I+1);"もじめ、";MID$(M$, I, 1) NEXT
0そうだね
プレイ済み
返信[7]
親投稿
えーと、こういう書き方だと正解ですか?間違いですか?
0そうだね
プレイ済み
返信[8]
親投稿
残念ながら間違えですねー…。 とりあえず間違っていても良いので今のコードを1行ずつ、日本語にして説明してもらえますか? そしたらその解釈に対してのコメントをしたいと思います。 自分で説明が出来ないのだとしたら、説明できる範囲までシンプルに削って少しずつわかるようにした方がいいですし、説明が出来るならその解釈に間違え(や勘違い)があるはずなので、その辺を見てみたいような気がします。 ちなみに日本語の説明は上記のコード(スクリーンショット)に対して、 1行目 画面を全てクリアする。 みたいな感じで良いです。
0そうだね
プレイ済み
返信[9]
親投稿
では、DATA文二列の場合はどうやればマップ変換できますか?
0そうだね
プレイ済み
返信[10]
親投稿
2列も1列も考え方は同じですよ。なので、とりあえず1列を完全に出来るようにしてからの方がいいと思います。 あと説明するのは、人に説明することによって自分の頭の中が整理されるというメリットがあるので、わからなくなったときは、とりあえず自分で解説してみるのも一つの手です。
0そうだね
プレイ済み
返信[11]
親投稿
あれから研究を積み重ね、やっとここまではできました、上のやつをじっこうすると…
0そうだね
プレイ済み
返信[12]
親投稿
こうなります。出来たのはいいんですがただ問題が上の写真の通りずれて表示されてしまうんです。どうしたらよいでしょうか?
0そうだね
プレイ済み
返信[13]
親投稿
MID$の使い方が違うのでは? その書き方だと0文字目(先頭)からQ文字取り出す、ということなので、意味をなしていないでしょう。
0そうだね
プレイ済み
返信[14]
親投稿
「1文字取り出して、壁の文字かどうか調べる、その通りだったら壁の絵を置く」という処理を目指しているはず。
0そうだね
プレイ済み
返信[15]
親投稿
出来れば日本語で解説して欲しい感じなんですけどねー…。 あまさとさんのアドバイスを参考に改善してみるか、もしくは僕のアドバイス(?)を参考に自分のプログラムを説明してみるかをしてもらえればって感じです。 もし僕のアドバイスを参考に説明してくれる場合は、その回答に関しては責任を持って答えるつもりではいます。
1そうだね
プレイ済み
返信[16]
親投稿
確かに…!せっしゃのやり方だと壁文字記号じゃなくてもBGが表示されてしまいますね。でんぺんさん、あまさと しおんさん。出来たら報告します。
1そうだね
プレイ済み
返信[17]
親投稿
すみませんが、どうやって取り出して壁文字があればBGをセットするんでしょうか?
0そうだね
プレイ済み
返信[18]
親投稿
katakei0505 katakei0505
投稿元ユーザーにより削除されました。
返信[19]
親投稿
READ MAP$ FOR X=0 TO LEN(MAP$)-1  IF MID$(適切な引数)=="壁の絵" THEN BGPUT 適切な引数 NEXT 1行分だけならこんな感じ。 行を増やす場合はYを増やすFOR-NEXTでこれを挟みます。 ヒントは出したので、それぞれ適切な引数を探ってみましょう。 変数Xは使います。 MID$は「好きな位置から、好きな文字数」文字列を取り出します。 サンプル8の技術デモも参考になるかな?
0そうだね
プレイ済み
返信[20]
親投稿
かたけ~ katakei0505
くもきさんの求めていた回答者ではないかもしれませんが、こんな感じでどうでしょうか?
0そうだね
プレイ済み
返信[21]
親投稿
かたけ~ katakei0505
もし写す場合は11と14行目は消してください。 とりあえず先程の画像の通りにすると画像のようになります。
0そうだね
プレイ済み
返信[22]
親投稿
かたけ~さん、配列宣言しなくてもできるんですか!?
0そうだね
プレイ済み
返信[23]
親投稿
かたけ~ katakei0505
変数名を一つ一つ変えるのなら配列はいらないですよ~ 例:MAP$1,MAP2$ を使う等
0そうだね
プレイ済み
返信[24]
親投稿
かたけ~ katakei0505
訂正:MAP$1 X → MAP1$ ○
0そうだね
プレイ済み
返信[25]
親投稿
皆さんありがとうございました。実行したらちゃんと変換して表示できました!LEN命令、MID命令を新しくおぼえました!
0そうだね
プレイ済み
返信[26]
親投稿
出来るようになったようで良かったです。 ちなみに3行目と4行目は入れ替えた方がいいですよ。 これからも頑張ってください。
0そうだね
プレイ済み
返信[27]
親投稿
これはお礼です。空です。 公開キー【Z2N4C3NE】
0そうだね
プレイ済み