ランダム関数

本格的なゲームを作るにはランダム関数(乱数)が必要不可欠です。乱数といっても大まかに3種類に分類されていると思って構わないと思います。使い分けをすることによってゲーム全体の裏ハッタリ度がアップすることを願っています。

1.完全な乱数

2.完全パターンの擬似乱数

3.初期設定のみ乱数で、あとは擬似乱数(一定パターン乱数)

MT法

メルセンヌ・ツイスタ法の使用方法を以下に表します。基本的に中身には一切ふれず、関数の呼び出し名、引数の変更をしました。使用するときはライセンスの確認を怠らないでください。シード値はデフォルトで使用されている5489UL、テストの内容は0x0~0xfまでの値をひたすら生成してカウントアップさせています。

int main(void)
{
	REG_WSCNT = 0x4317;

	BgInit();
	IrqInit();
	RndInit(5489UL);
	KeyInit();


	char str[32];

	u32 num[0x10];
	_Memset(&num, 0x00, sizeof(num));

	for(;;)
	{
//		VBlankIntrWait();
		KeyExec();

		// Stop
		if(KeyGetCnt() & KEY_A)
		{
			continue;
		}

		num[RndU32() & 0xf]++;

		for(s32 i=0; i<0x10; i++)
		{
			_Sprintf(str, "0x%x:%d", i, num[i]);
			BgAsciiDrawStr(0, i, str);
		}
	}
}

動作画面

1.png

とてもバランス良い結果が出力されていると思います。

参考リンク

出典元

履歴


トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS