プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 19日目 文字列変数の中から、必要な部分だけを抜き出す ~「MID$」について~
2そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
ちょっと上手い説明が思い浮かばなくて、昨日はお休みしちゃいました。 (にも関わらず、結局上手い説明にならなかった) とまれ、これが今回の追加部分になります。
1そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
さて、ソースの説明は何かごちゃごちゃするので今回は後回しにして、最初に新規使用命令の説明をします。 文字列の一部を抜き出す関数「MID$」について 説明はリファレンスを見てもらうとして、実際の使用例は200行目になります。 MAP$[G_PY]は、抜き出し元の文字列。 S_START は"○文字目から抜き出す"かの指定(先頭位置は0になります) S_LEN が、"取り出す文字数"です。 例えば、 A$=MID$("ABCDE", 2, 2) とすると、A$="CD" になるわけです。
0そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
ここからソースの説明 最初の画像は、「前回の奴じゃ主人公の右側しか表示されないから困る。左側も表示しよう」とした際に、とりあえずわかりやすい形で実装したものです。 コメントアウトしている部分は、エラーが出るものです。 前回時点では、G_PX = 3 なので、G_PX-4 より左はマイナスの値になってしまいます。 それだと文字列の範囲外なので、エラーになるわけです。
0そうだね
プレイ済み
返信[4]
親投稿
ケイン KEIN.HORGAN
次の画像は、最初の画像のコードをMID$ を使って書き直したものです。 幅13マスの枠内に表示するので、基本的には「主人公の左右±6マス」をマップデータから抜き出せばよいのですが…… 「主人公がマップの左(右)の方にいて、マップの左(右)に6マスもない」 というような状況に対処する為に、条件判断を行っています。 V_LEFT は、画面に表示される左端のマップ座標 V_RIGHTは、画面に表示される右端のマップ座標 ADD_LEFT,ADD_RIGHT は、マップが表示域に不足している場合の不足量。 この数だけ空白で埋めます。 202行で抜き出しを行い、205行で表示を行っています。 これでようやく主人公のいる行の表示が出来るようになったので、次回は同じような感じで上下方向も実装したいと思います。
1そうだね
プレイ済み
返信[5]
親投稿
ケイン KEIN.HORGAN
あ、しまった。 えーと、2レス目にある「S_START」「S_LEN」は、「V_LEFT」「V_LEN」の間違いです。 最初は「S_~」の変数名にしていたんですが、解説書いている間に変数名を変更したんでした。 (V_ は、「VIEW」を意味させました)
0そうだね
プレイ済み
返信[6]
親投稿
********** itd12d
MAP_WALKの中... FORで短縮できますね。
0そうだね
プレイ済み
返信[7]
親投稿
ケイン KEIN.HORGAN
あれ、すみません、短縮できる場所あります?
0そうだね
プレイ済み
返信[8]
親投稿
********** itd12d
短縮できますよ。 LOCATEのX座標指定も[G_PX+z]のzも連番になっています。 FOR I = 0 TO 9 LOCATE 4+I,7:?MAP$[G_PY][G_PX+(-3+I)] NEXT でどうでしょうか。
0そうだね
プレイ済み
返信[9]
親投稿
ケイン KEIN.HORGAN
おう…… すみません、わかりにくい書き方をしてしまったみたいです。 それは思考の筋道を説明する為の命令で、古い奴ですね。 2枚目の画像を見てください。
0そうだね
プレイ済み
返信[10]
親投稿
********** itd12d
あ、変わってたw よく見ずに偉そうに言ってしまってすみません
0そうだね
プレイ済み
返信[11]
親投稿
ケイン KEIN.HORGAN
いえいえ、これはこれで勉強になります。 よく質問トピックみていて「何を言っているのか(聞きたいのか)分からん」と思ってるんですが、いざ説明する側になると本当、言いたいことを分かりやすく伝える事の難しさを感じます。 もっと説明上手くなりたいなぁ……
0そうだね
プレイ済み