プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 2日目 ~モンスターの増殖を止めろ~ サブ:便利な機能『変数と繰り返し機能』
3そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
と、いうわけで作成日記2日目です。とりあえずは、前回のおさらいからしてみようと思います。使用命令は以下の4つでした。 ACLS LOCATE PRINT (※? で代用) WAIT 一応、念のため各命令を簡単に説明すると…… ACLS・・・画面等を初期化し、何も表示されていない状態にします。 LOCATE・・・現在のカーソル位置を「左から何文字目、上から何行目」という形で指定します。なお、一番最初は0文字目/0行目、となるので注意です。 PRINT・・・現在のカーソル位置に文字を表示して改行します。 (※命令の最後に ; をつければ改行しません) WAIT・・・一定時間、プログラムの実行を止めます。 となります。
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
さて、前回のプログラムには不具合が潜んでいました。 それは、モンスターが増殖してしまうことです。 こうなってしまう原因は、モンスターの移動命令の部分にあります。 (※モンスターの文字を表示する方法が分からないので、ここでは、代わりに"@"をモンスターとします) 前回のプログラムでは、こうなっていました。 LOCATE 5,5:?"@":WAIT 60 LOCATE 5,6:?"@":WAIT 60 LOCATE 5,7:?"@":WAIT 60 PRINT 命令は、文字を表示するだけの機能しかありません。 その為、この状態では新しく"@"をどんどん追加表示していくだけとなってしまいます。
0そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
では、"@"が移動しているように見せるには一体どうすればいいのか? この答えは、ある意味で非常に力技と言えます。 つまり「新しく"@"が追加表示されるなら、前に表示していた"@"は消してしまおう」ということです。 ただし、文字を削除する命令はありません。 では、どうやって"@"を見えなくするのかというと、" "(空白文字)で上書きしてしまうのがその方法です。 というわけで、修正したコードが画像の26行目~ になります。 LOCATE 命令で前回表示した位置にカーソルを合わせて、PRINT 命令で" " を表示しています。 これで前回表示した"@"が見えなくなるので、次に実行するPRINT 命令で"@"を表示した際に、"@"が移動しているように見えるわけです。
0そうだね
プレイ済み
返信[4]
親投稿
ケイン KEIN.HORGAN
さて、これでとりあえずバグはなくなりましたので、次の機能を作成したいと思うところですが…… その前に、プログラムを作る上で便利な命令を一つ、組み込んでみたいと思います。 それは、「ループ(繰り返し)命令」です。 プログラムを組んでいると、似たような処理を何度も繰り返さないといけない事が多々出てきます。 例えば、前回プログラムで言えば ・メッセージ欄の枠表示(最上段と最下段を除く部分) ・モンスターを移動させる為のコード (「前回表示モンスターを削除する → 新しい位置にモンスターを表示する → WAIT 60 待機する」 をモンスターが移動する歩数分繰り返さないといけません) となります。
0そうだね
プレイ済み
返信[5]
親投稿
ケイン KEIN.HORGAN
今はたいした行数でもないので、いちいち繰り返しが必要な回数分、命令を書いても大した事はないのですが…… そのうち、一回書くだけで面倒くさくなるような事態がやってこないとも限りません。 そんな時に役に立つのが、これから説明するループ命令です。 今回は、メッセージ欄の枠表示部について、繰り返し命令を使ってみる事にします。 8~10行目を見てください。 FOR I=1 TO 5 ?"| |" NEXT とあります。これで、前回プログラムと同じ結果になります。
0そうだね
プレイ済み
返信[6]
親投稿
ケイン KEIN.HORGAN
さて、ここで新しく出てきたのが繰り返し命令です。 繰り返しに必要なのは、 「どこからどこまでを繰り返すのか」 「どのくらい繰り返すのか」 の二つですが、これを指定しているのが今回出てきた命令です。 「どこからどこまでを繰り返すのか」 FOR というのは、「これから繰り返しが始まりますよ」という意味です。 NEXT というのが、「ここまで来たら、FOR まで戻って繰り返します」という意味です。
0そうだね
プレイ済み
返信[7]
親投稿
ケイン KEIN.HORGAN
「どのくらい繰り返すのか」 繰り返しの条件として分かりやすいのが「指定回数繰り返す」です。 FOR I=1 TO 5 とある場合、「1,2,3,4,5」と全部で5回繰り返す事を意味しています。 ……さて、これを聞いて 「5回っていうのは"TO 5" って書いてあるから何となく想像できるけど、それなら"I=1"っていらないんじゃない?」 と思う人がいるかもしれません。
0そうだね
プレイ済み
返信[8]
親投稿
ケイン KEIN.HORGAN
しかしながら、実はこの"I=1"というのも非常に重要です。 というのも、 FOR I=3 TO 5 としたならば、「3,4,5」と全部で3回だけ繰り返す事になるのです。 まあ、これだけなら、 「いや、だから3回繰り返したいなら、"TO 3"でいいんじゃないの?」 と言いたくなるかもしれません。
0そうだね
プレイ済み
返信[9]
親投稿
ケイン KEIN.HORGAN
確かに、今回みたいな「全く同じ命令を繰り返す」だけなら、まさにその通りです。 しかしながら、「モンスターを歩かせる」というような「良く似ているけど、微妙に違う」という処理を繰り返す時に、この「I」というのが非常に強力な助っ人になってくれます。 というわけで、明日はこの「I」について説明をしたいと思います。 ※本当は、今回で「I」の説明(変数について)をやりたかったのだけど、予想以上に長い話になってしまった…… 説明って難しい
1そうだね
プレイ済み