数当てゲームを作る1-乱数

今回は、前回試してみた変数を使ってちょっとしたゲームを作ってみましょう。作ってみるのは、数当てゲーム。最初に99BASICのプログラムで0-99の「適当な数」を決め、人間がそれを当てるゲームです。

具体的には、最初に乱数(一定の計算によって不規則な数を作り出す擬似乱数)を使って0-99の数を決め、その数を変数に保存します。続いて、キーボードから数字を入力し、その数が「決めていおいた数より小さい」か「決めていおいた数より大きい」かを表示するようにしましょう。こうして、次々に数字を入れていってそれが決めておいた数より小さいか、大きいか調べながら、正解の数を探っていくわけです。

入力した数字が実際の数より小さい、大きいといった情報から範囲を絞り込むためにはどんな数字を入れればよいのか、考えながら遊ぶゲームですね。

まず、最初に99BASICで乱数を作ってみましょう。乱数を作るには、自分で計算しながら作ったりと方法はいろいろあるのですが、あらかじめ用意されている「乱数を返す関数」RND()を使うのが簡単でしょう。関数とは、数学的な関数のように「数字などを渡すと一つの値を返す」ものです。RNDの場合、100という数値を渡すと、「0-99の間の乱数」を返します(0から「渡された数-1」の範囲の整数を返す)。試しに

PRINT RND(100)

と入力しリターンキーで実行してみてください。最初は「0」が出ると思いますが、続いてもう一度。何度か実行してみると、その度に違う数が返されますね。これが(擬似)乱数です。ただ、このRNDでは計算によって乱数を返すので、実はそのままでは全く同じ順番で決まった数が返ってきます。

試しに、99BASICを一度終了し、また起動したら再度先ほどの「PRINT RND(100)」を実行してみてください。最初に0が出て、それからも先ほどと全く同じ数字が同じ順番で返されるはずです。

これは、RNDが擬似乱数の計算に使う最初の数が常に同じ(何も設定しないと0)だからです。乱数の計算に使う数値(乱数の種、シードなどと呼ばれます)を変えてやるようにすれば、毎回違った数の並び(乱数列)が返されるようになります。その最初の数(乱数の種、シード)を設定するのが、RANDOMIZEという命令。この命令は、シードを渡してRNDで返される乱数列を設定することができるほか、何も渡さないと現在の時刻をシードに設定してくれます。ですから、RNDを呼び出す前にこのRANDOMIZEを呼び出せば、毎回違った乱数列を得られるわけですね。

実際に何度か99BASICを起動しなおしながら

RANDOMIZE

としてリターンキー、続いて

PRINT RND(100)

を実行してみてください。今度は毎回違った乱数の並びが得られるはずです。
なお、「PRINT RND(100)」を何度か実行するときには、最初に実行して

PRINT RND(100)
 50
OK

などとなっている状態で、PRINT RND(100)の行にカーソルを持っていってそこでリターンキーを押すようにすると、実行することができます。こうすれば、再度「PRINT RND(100)」という文字列を自分で打ち込む必要がないので便利でしょう。一度「PRINT RND(100)」を実行するとOKの下の行にカーソルが来ているはずなので、3行上にカーソルを移動し、そこでリターンキーを押す。これを繰り返すことで、繰り返し「PRINT RND(100)」を実行できます。

これで、「毎回異なる乱数」を得られるようになりました。続いて、「最初に乱数列をRNDOMIZEで適当に設定(初期化)し、最初に得られた乱数(0-99)を変数Xに表示するプログラム」を作ってみましょう。といっても、単にRONDOMIZEして、RND(100)の値をXに代入するだけですね。

10 RONDOMIZE
20 X = RND(100)

といった感じでしょうか。このプログラムをRUNで実行したら、

PRINT X

を実行してXにどんな値が代入されたか、調べてみましょう。何度か実行しXの値を表示すると、その度に違った値が表示されますね。続いて、プログラムを修正し

10 RONDOMIZE(10)
20 X = RND(100)

などとRONDOMIZEに適当な数を渡して乱数の種を設定てみましょう。修正の際は、「LIST」と入力し、リターンキーを押すとプログラムが表示されるので、

10 RONDOMIZE

の位置にカーソルを持っていって修正し、リターンキーで行番号10の内容を書き換えるようにすると楽です。ついでに

30 PRINT X

という行も追加して、自動的にXの値が表示されるようにしましょうか。実行すると、今度は毎回同じ数が表示されます。このように乱数の種を設定すると、その種に応じて毎回決まった乱数列が得られるので、「乱数を使うけど、同じ条件なら同じ結果を得たい」という場合には、種を指定することになるでしょう。

戻る