プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 23日目 配列の要素数を増やす「PUSH」命令 配列の要素数を取得する「LEN()」関数
9そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
ちょっと間が空いてしまいましたが、製作日記の続きです。 前回は、力技でデータを配列に読み込みました。 今回は、もっとすっきりとした形で読み込み、かつマップを実際に広げてみます。 そのコードがこちらです。
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
元々の定義方法は、31行目からのように 「READ 命令で1行ずつデータを変数 DAT$ に代入し、MAP$ 配列の各要素を指定してそこに代入」 でした。 これは、一見するとFOR ループで簡略化できるように見えますが…… FOR ループを使うには、繰り返しの数(この場合は、マップの南北方向のサイズ)が事前に分かっていないといけません。 きっちりマップを作りこんでからなら、作成したマップサイズを数えればいいのですが、残念ながらマップはまだ未完成です。 というわけで、今回は回数が不明の時に使用する WHILE ~ WEND ループを使用します。 それが46行目からです。
0そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
47行目でDATA 行から1行読み込み。 48行目では、読み込んだデータが""(空文字列 = 中身が空っぽの文字列。空白文字ではありません)の場合に、マップ読み込み終了と判断して、BREAK でループを抜けます。 49行目は今回新しく使う命令のPUSH 命令です。 この命令を使うと、配列の最後に要素を追加する事ができます。 また、51行目と52行目では、マップサイズを取得しています。 こちらも今回新しく使うLEN 命令で、この命令を使うと、指定した配列のサイズを取得できます。 51行目では MAP$ 配列の要素数を。この場合はマップの高さになります。 52行目では、MAP$[0] を指定していますが…… MAP$[0] のサイズとは、先ほど読み込んだDATA の事です。つまり、マップの横幅という事になります。
0そうだね
プレイ済み
返信[4]
親投稿
ケイン KEIN.HORGAN
そしてマップ定義部がこちら。 マップを広げるついでに、大幅に変更しました。 (このやり方でマップを作る場合、左上から作るのが楽なので……)
0そうだね
プレイ済み
返信[5]
親投稿
ケイン KEIN.HORGAN
DATA でマップを作成しますが、この際、最終行に "" と空文字列を定義しています。 こうする事で、READ を行うときの終了フラグにしています。 (前述したように、READ で読み込んだデータが空文字列ならデータ読み込み終了、と判断できます) さて…… 予定としてはこれでマップを広げる事が出来るはずだったのですが、実は上手く行きませんでした。 移動部分の実装命令に不具合が潜んでいた為です。 こちらの修正は、地道に考え違いをしていたところを試行錯誤で見つけて行く作業で特に解説するような事もありません。 (なお、不具合の原因はマップサイズが13×13でないと上手く動かないようになっていただけでした。 作成した時はそんなつもりは無かったので、単純な勘違いです) ※それはそれとして、海の表現の為に色指定部の追加も行っています。
0そうだね
プレイ済み
返信[6]
親投稿
ケイン KEIN.HORGAN
とりあえず今回はここまで。 次回は、マップ切り替えを実装してみようと思います。
0そうだね
プレイ済み
返信[7]
親投稿
そんし tairiku1122
シンプルの幅を超えて本格的なゲームになってきてる気がします… 応援しています。頑張ってください!
0そうだね
プレイ済み
返信[8]
親投稿
ケイン KEIN.HORGAN
ありがとうございます。 当初の予定では、全20回程度の範囲に収めて、 「何にも分からない人が一から参考に出来るように」みたいな事を考えていたのでこんなタイトルだったんですが…… どうみてもタイトルに偽りあり、な状態になりつつあります。 どうしよう?(ぇ
0そうだね
プレイ済み
返信[9]
親投稿
Godot orz_127
何か昔のRPGの画面を彷彿とさせて良いですね^^ ウルティマとかw
0そうだね
プレイ済み
返信[10]
親投稿
ケイン KEIN.HORGAN
きっと昔の人も色々今とは比べ物にならないくらい大変な制約の中で製作したんだろうなぁ、と思うと、今の時代で良かったなぁ、と思います(ぇ 昔だったらこんな力業での実装は無理だったろうし…… (マップに色をつけてるところなんか、1文字1文字毎に色指定してるわけで、考えてみるとすごい力技)
0そうだね
プレイ済み