プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 3日目 便利な数値「変数」
4そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
製作日記3日目です。 前回は、文字を移動させる為の方法と、命令を指定回数繰り返す(ループ)為の方法についてを説明しました。 今回はその続きで、ループさせる際に出てきた「I=1」について説明をしたいと思います。 これについては、口で説明するよりも実際に見てもらった方が早いので…… 今作っているRPGは一旦脇に置いておいて、とりあえず以下のコードを実行してみて下さい。 I=3 PRINT I 実行結果を見て、何かおかしいと思いましたか? I と表示されそうな気がしたかもしれませんが、実際には 3 と表示されるはずです。
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
何故そうなるのかというと、この「I」というのが、実は文字ではなく「"I"という名前の変数」だからです。 (プチコンの命令ではない単語は、大半は変数です。例外は、単語の頭に"@" がついている「ラベル」や、DEF 命令で作成した「自作命令」などです) そして「変数」というのは、ものすごく大雑把に言うと「中に数値の書かれた紙が入っている箱」です。 また、この箱に数値を入れる為に使うのが、= という記号です。 結果をみても分かるように、I=3 とすると、I という変数は 3 という数値になります。 これを、「I に 3 を代入する」と言います。 プログラム上で「変数」が出てきた場合、変数の名前ではなく「中に入っている数値」と同じ働きをします。 つまり、今回は PRINT 3 としたのと同じ結果になるわけです。
0そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
さて、これを踏まえてまた次のコードを実行してみて下さい。 FOR I=1 TO 5 PRINT I NEXT この命令は、PRINT I を5回繰り返す命令です。 1~5 までの5個の数字が表示されたと思います。 PRINT I は、Iという変数の中に入っている数値を表示する命令でした。 これを5回繰り返したら、1~5 までの表示がされた、という事は…… 「FOR 命令を実行すると、まず最初にI に数値が代入され、そして1回毎に I が1ずつ増える」という事です。 これを使えば、「全く同じ命令を繰り返す」という場合だけでなく、「数値が1ずつ変化する以外は同じ命令」についても繰り返す事が出来るようになります。
0そうだね
プレイ済み
返信[4]
親投稿
ケイン KEIN.HORGAN
「一回毎に I が1ずつ増える」 これをみて、ピンとくる人がいるかもしれません。 そうでなくても分かりやすいように、今回のプレイ日記の画像は、昨日のプログラムを若干修正してアップしました。 26行目からの3行がそれです。 修正内容は、「文字を消す命令と文字を表示する命令を1行にまとめた」です。 これをみれば気づくと思いますが、この3行は、 「文字を消す際のLOCATE 命令のY座標」「文字を表示する際のLOCATE 命令のY座標」 がそれぞれ1だけ異なっているだけで、後は同じ命令になっています。
0そうだね
プレイ済み
返信[5]
親投稿
ケイン KEIN.HORGAN
こういう時は、FOR 命令で繰り返しにまとめる事が出来てしまいます。 つまり、次のようになります。 FOR Y=5 TO 7 LOCATE 5,Y:?" ":LOCATE 5,Y+1:?"@":WAIT 60 NEXT I=5 ではなく、Y=5 となっていますね。 このように、変数とは他の単語(プチコンの命令や、ラベル、自作命令など)と被らない限り、好きな名前をつける事ができます。 今回は、Y座標の事なので、単純に Y としました。
0そうだね
プレイ済み
返信[6]
親投稿
ケイン KEIN.HORGAN
もう1つ、文字を表示する際のLOCATE 命令で、Y座標の指定が「Y+1」となっているのに気付いたでしょうか? ここの部分は、元々の命令では「6」が入っていたので、この「Y+1」を「Yの値を1増やして、6にする」と思う人もいるかもしれませんが、そうではありません。 繰り返し1回目では Y=5 です。Y+1 は、つまり5+1 で6です。この6を、LOCATE 命令で使用する、という意味になります。 Yの値は、5のままです)
0そうだね
プレイ済み
返信[7]
親投稿
ケイン KEIN.HORGAN
念のために繰り返し2回目を説明すると、 繰り返し2回目。 1. FOR 命令の効果で、Yの値が1増えて、6になる。 2. LOCATE 5,Y:?" ":LOCATE 5,Y+1:?"@":WAIT 60 の命令の時、Yに6が入っているので、 LOCATE 5,6:?" ":LOCATE 5,6+1:?"@":WAIT 60 が実行される。 3. NEXT で繰り返し2回目終了。 となります。繰り返し3回目も同様に、Yが1増えて7になった状態で、繰り返し命令が実行されます。 3回目が終了したら、Yの値がTO で指定した7 になっているので、そこで繰り返し自体が終了します。
0そうだね
プレイ済み
返信[8]
親投稿
ケイン KEIN.HORGAN
さて、これで今日の説明は終わりになります。 明日は、プログラムの説明という流れからいったらIF 文の説明をするべきかと思うのですが…… RPG を作る流れから言うと、多分 ボタン入力の検知、という事になるかと思います。 (※もしくは、説明を簡略化してどちらもやるかもしれません。 書いていて思ったのですが、どうも面白くもない文字の羅列になってるんじゃないかという思いがひしひしと)
2そうだね
プレイ済み