Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
1 2 3 4 5 6 7 8 9 10 11 12 13 1425
次のページ(過去)
返信[2]
親投稿
ケイン KEIN.HORGAN
さて、ソースの説明は何かごちゃごちゃするので今回は後回しにして、最初に新規使用命令の説明をします。 文字列の一部を抜き出す関数「MID$」について 説明はリファレンスを見てもらうとして、実際の使用例は200行目になります。 MAP$[G_PY]は、抜き出し元の文字列。 S_START は"○文字目から抜き出す"かの指定(先頭位置は0になります) S_LEN が、"取り出す文字数"です。 例えば、 A$=MID$("ABCDE", 2, 2) とすると、A$="CD" になるわけです。
0そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
ちょっと上手い説明が思い浮かばなくて、昨日はお休みしちゃいました。 (にも関わらず、結局上手い説明にならなかった) とまれ、これが今回の追加部分になります。
1そうだね
プレイ済み
プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 19日目 文字列変数の中から、必要な部分だけを抜き出す ~「MID$」について~
2そうだね
プレイ済み
返信[13]
親投稿
ケイン KEIN.HORGAN
@MSG LOCATE X,Y FOR I=0 TO LINE-1 PRINT MSG$[I] IF NEXT_LINE+I<10 THEN MSG$[I]=MSGDATA$[NEXT_LINE+I] ELSE MSG$[I]="" ENDIF NEXT INC NEXT_LINE RETURN
0そうだね
プレイ済み
返信[12]
親投稿
ケイン KEIN.HORGAN
@MSG_CLS LOCATE X,Y FOR I=0 TO LINE-1:PRINT " ":NEXT RETURN
0そうだね
プレイ済み
返信[11]
親投稿
ケイン KEIN.HORGAN
FOR I=0 TO 9:MSG$[I]=MSGDATA$[I]:NEXT WHILE TRUE IF BUTTON() == #A THEN GOSUB @MSG_CLS GOSUB @MSG ENDIF WEND
0そうだね
プレイ済み
返信[10]
親投稿
ケイン KEIN.HORGAN
とすると、簡単にいうとこんな感じかなぁ。 色々端折ってますので、これを適当に修正してください。 NEXT_LINE=1 LINE=5 DIM MSGDATA$[10],MSG$[10] MSGDATA$[0]="1行目" MSGDATA$[1]="2行目" ' 以下必要な分だけ定義
0そうだね
プレイ済み
返信[8]
親投稿
ケイン KEIN.HORGAN
となると…… LOCATE PRINT IF ~ THEN ~ BUTTON WHILE ~ WEND GOSUB ~ RETURN の組み合わせでできると思いますが、これらの命令は全部分かりますか?
0そうだね
プレイ済み
返信[6]
親投稿
ケイン KEIN.HORGAN
すみません、ちょっと質問の意味が分からないです。 具体的にはどういう動きをさせたいんですか?
0そうだね
プレイ済み
返信[4]
親投稿
ケイン KEIN.HORGAN
ちょっと眺めてみたのですが、画像だけではちょっとわからないですね…… 公開キーはありますか? (WHILE ループの中に GOTO 文が仕込まれているので、ちょっとこのプログラムは怪しい動きをする可能性が高いのではないかと思ってはいるのですが)
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
つけられますよー ちょうどつい最近、CHKCHR の使い方の説明をプレイ日記で書きましたので、よければ参考にしてくださいー (タイトルに16日目、とある日記に書きました)
0そうだね
プレイ済み
返信[5]
親投稿
ケイン KEIN.HORGAN
さて、これで枠中央に地形を表示出来ました。 同様に「中央に配置した地形の右隣の地形、またその右隣の地形……」としていったのが、186~191行目です。 これは一見FOR 文の出番のように見えますが、実のところFOR 文を使うよりもっといい方法があります。 そのためには、また新しい命令が必要になるので、次回はその命令の解説をしようと思います。 ※文字列の配列、でなく、ただの文字列であった場合も同様の機能があります。 例えば A$="ABCDE" としたならば…… A$[0]で"A"が、A$[1]で"B"が、というふうに取得する事が出来ます。 この場合は、単純に「A$ という文字列の ○文字目」という事になります。
0そうだね
プレイ済み
返信[4]
親投稿
ケイン KEIN.HORGAN
とりあえず、「主人公のいる座標の地形を枠の中央に表示する」という方向で考えます。 枠の中央、というのは、画面上の座標で言えば、7,7 の位置になるので、LOCATE 命令で7,7 を指定します。 主人公のいる座標の地形については、マップデータが配列になっているので、ここからどうにかして取得しないといけません。 それが、185行目です。 MAP$[G_PY][G_PX] こういう書き方をすると、「MAP$ 配列の、G_PY 番目の文字列の、G_PX 文字目」を取得する事が出来ます(※)
0そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
こちらの172行目からがマップ枠の作成。 メッセージ枠と同様の流れです。 183行目からがマップ表示、つまり主人公が歩く度にマップを描き直す命令ですが…… 見てわかる通り、これはまだ作りかけです。
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
28行目からは、マップデータを配列に保存しています。 まずはマップサイズをグローバル変数に保存。 次に、マップ保存用の配列宣言。 そして、実際のデータ保存。 マップデータなので、枠はありません。 ではその枠はどうしたかと言うと、自作命令化して別途呼び出す事にしました。 それが49行目のMAP_LINEです。 そして、実際のマップ表示も自作命令化しようと思います。 それが50行目で、MAP_WALK命令としました。
0そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
さて、マップの拡大、つまり枠の範囲外にあるマップを作成する方法についてです。 色々と悩んだのですが、結局主人公固定方式でいこうと思います。 (このあたりは、スプライトとBG使った方が簡単に出来るような気がひしひしと。 とは言っても、最初の宣言をこれ以上破るとなんだか負けた気になるので、このままコンソールで行きます) まずは画像1枚目。19行目にグローバル変数を追加しました。 これは、主人公の「マップ上の」現在座標を示すのに使います。
0そうだね
プレイ済み
プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 18日目 マップデータを文字列配列に保存して使う 「文字列変数の中身は、1文字ずつ取り出せる」
4そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
say さんに補足するなら、 「このプログラムは特にエラーも出ずに動くので、別にどこも間違ってはいません」 という事になっちゃうんですよね。 だから、「どうすれば良いのか?」と言われても、「どこも間違ってはいないので、何もしなくて良いです」となります。 こういう時は、say さんの言うように「○○というつもりで作ったのだけど、実際は△△のように動いちゃいます」というような説明の仕方が必要です。
1そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
さて、これで現状、おかしなところはなくなったので…… 次回は、マップを広げる事にしようと思います。 ……マップ切り替え方式にするか、主人公中央固定方式にしようか未だに迷っているので、もし次回更新が遅れたら、仕様が未だに決まらないんだな、という事で(汗
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
1番の移動先地形を覚えておく、というのは、前回も使用したCHKCHR() を使用します。 とりあえず最初に、52行目で主人公の初期座標の地形を取得します。 (CTILE 変数としました。CはCURRENTの頭文字で、これは「現在」とかそういった意味の英語です) さて、問題は2番です。CHKCHR() で取得できるのは数値なので、これをそのまま表示するわけにはいきません。 数値を文字に直す必要がありますが、こういう時に使うのはCHR$() という関数です。 使い方は75行目を参照してください。 後は、次の移動の時に使うために、移動先の地形の場所を CTILE に代入します。 この値は、すでに66行目で取得しているので、これをそのままコピーする事にします。 こうする事で、主人公がマップを移動しても道ができるのを防ぐ事ができました。
0そうだね
プレイ済み