【はじめてのプチコン】乱数 | りょうのゲーム塾

りょうのゲーム塾

再開、準備中。

チェックポイント
現在のサンプルではUFOがいつも画面右上から現れ、
左右を往復しています。
敵の動きとしてはあまりにも単調です。
そこで敵の動きに変化を与えてみましょう。
そんな時に使用するのが乱数です。
乱数とはどんなものか、
どうやって使うのかを単純なサンプルを使って説明します。


■プログラム
0001 @LOOP
0002 VSYNC 60
0003 CLS
0004 FOR I=1 TO 100
0005 X = RND(32)
0006 Y = RND(23)
0007 LOCATE X,Y
0008 PRINT "★";
0009 NEXT I
0010 GOTO @LOOP


まずはプログラムの解説です。
0007行目と0008行目は画面のX,Y位置に★を表示する命令です。
0005行目と0006行目は表示する位置であるXとYを指定します。
ここでRNDという関数が使われていますがこれについて後ほど説明します。

星を表示する命令を囲んでいるのがFOR文ですね。
このFOR文は繰り返して処理するための命令です。
FOR文にはバグがありますがこのような使い方をする限り問題はありません。
ここではIが1から始まり1づつ増加し100になるまで繰り返すという意味ですが、
今回の場合変数Iをループの中で使っていません。
要するに100回処理を繰り返すということになります。

処理内容は最初にVSYNC命令で60フレーム待ちます。
すでに説明したように60フレームは約1秒なのでここの意味は1秒間隔で処理が実行されることになります。

実際には画面をクリアしたあと、★を表示する命令を100回実行することになりますね。

そして0002行目から0010行目までを無限にループします。

『要するに1秒間隔で画面をクリアし100個の星を表示する処理を無限に繰り返す。』というものです。

実際に実行してみると分かると思いますが、
表示される★は画面の一定の位置でなくいろんな場所に表示されます。

ということは表示する位置が毎回違うということになります。
ここまでくると0005行目と0006行目がXとYをランダムに変化させていることが推測できると思います。

ゲームの中ではこの様にいつも決まった値でなくランダムな値が必要になる場合があります。
その際に使用するのがこのRND関数です。

ちなみにRND関数のRNDとはRANDOMの略です。
このRNDで作られたランダムな値を乱数といいます。

RND関数の書式は

変数=RND(乱数の最大値+1)

となります。
プチコンの説明では最大値となっていますが、最大値を含まないと表記されていますので、
こちらの方が分かりやすいと思います。

例えば0005行目では

X = RND(32)

とありましたが、これは0から32-1ようするに31までの範囲の乱数を返すという意味です。

画面の横方向32桁で表示座標は0から31でしたよね。
ですからこの乱数でX座標をランダムに作っています。

0006行目はY座標を作っています。
Y方向は24行あるのでY座標の範囲は0から23までです。
本来はRND関数では23と書くべきですがある理由でY座標は0から22までしか使用していません。
その理由はそのうち説明することになると思います。