HSP3命令入門講座 <rnd関数>

Last Update : 2009/03/xx

rnd関数 (HSP 3.x)

 乱数を発生させる関数です。関数名の由来は、「random number」から。

 この命令を呼ぶと、HSPがランダムな整数値を提示してくれます。HSP2では命令形式のrnd命令として提供されてきましたが、HSP3では関数形式になりました。内部的にはC標準のrand関数を呼んでおり、「線形合同法」というアルゴリズムを使って擬似的に乱数を発生させてます。

 rnd(数値)

 第1パラメータに乱数発生範囲を指定します。指定できる数値は「1〜32768」です。たとえば、100を指定したならば、「0〜99」の範囲でバラバラな数値が返ります。

 HSPの拡張プラグインHSPDA.dllには「メルセンヌ・ツイスタ」(Mersenne Twister)と言う高性能なアルゴリズムを採用した乱数発生命令も用意されてます。

↑TOP↑

サンプルコード

 rnd関数を利用したサンプルコードです。

//	乱数数値表示

	button "クリック!", *jump

	stop

*jump
;	乱数発生
	mes rnd(100)
//	点の表示で四角形?

	pos 400, 100
	button "クリック!", *jump

	stop

*jump
;	色
	color rnd(256), rnd(256), rnd(256)

	redraw 0

	repeat 1000
;		点を描画
		pset rnd(250) + 50, rnd(200) + 50
	loop

	redraw 1

 rnd関数を呼ぶと、一定のパターンで乱数が発生します。一番最初のサンプルをコンパイル実行して、同じサンプルを別にコンパイル実行してみてください。必ず同じ数値のパターンで表示されていくと思います。パターンを不定にする(発生系列の初期化)には、パラメータなしのrandomize命令を一度だけ宣言しておきます。

//	乱数数値表示

	randomize

	button "クリック!", *jump

	stop

*jump
;	乱数発生
	mes rnd(6) + 1

 全く何か目的がない限りrandomize命令を何度も呼ぶような処理にしないでください。randomize命令が呼ばれるたびに乱数発生パターンが初期化されるので、無駄に呼ぶと逆に乱数が発生しなくなる場合があります。

↑TOP↑

重複しない乱数

 出現した数値を2度と出さない乱数発生です。HSP2掲示板(No. 608)で大分前にchokkoさんが提示されたものです。

#define MAX 10

	randomize

	dim kekka, MAX
	repeat MAX
		value = rnd(cnt + 1)
		kekka.cnt = kekka.value
		kekka.value = cnt
	loop

	repeat MAX
		mes kekka.cnt
	loop

↑TOP↑

〜HSP3 あれこれ〜
ウィンドウ | オブジェクト | ファイル | フォルダ | キーボード | マウス | メニュー | システム | 文字列 | COM | その他

Copyright © 2005-2011 ゲーム作成ソフトHSPの情報をいろいろと Let's HSP!. All rights reserved.