ランダム値生成

描画やキー入力も出来るようになったので何かゲームを作ろうと思うと
たいがい必要になるランダムな値の取得方法を今回は説明します。

一般にCや他の言語でもランダム取得命令は標準で用意されていますが
現状で判明しているPSP命令の中にはそのような物はわかっていません。
ですから代用命令を自作する必要があります。



まず一般に使われるランダム生成方を見てみます。
srand( (unsigned)time( NULL ));
このように初期値に現在時刻を入れて毎回違う値でランダムテーブルをかき混ぜます。

PSPでも現在時刻を調べる命令は判明していますのでそちらを使いましょう。

startup.sに以下を追加してください。

 STUB_START "UtilsForUser",0x40010000,0x00040005
  STUB_FUNC 0x91E4F6A7,sceKernelLibcClock
  STUB_FUNC 0x27CC57F0,sceKernelLibcTime
  STUB_FUNC 0x71EC4271,sceKernelLibcGettimeofday
  STUB_FUNC 0x79D1C3FA,sceKernelDcacheWritebackAll
 STUB_END



そして今回はランダムっぽくなる計算方法でランダム値を取得したいと思います。

static unsigned long rnd_seed;
int _rand()
{
 int xf;
 rnd_seed+=xf+sceKernelLibcTime((void *) 0);
 xf = rnd_seed/69069;
 return xf;
}


このように時間を69069で割るのがコツです。
この数字はランダムっぽい数を取り出せる不思議な数字として覚えておいて下さいw
何かと使えるかもしれませんので。

乱数を使う時のコツとして使う時も出来るだけタイトル画面で
キー入力があるまでかき混ぜ続ける等することが多いですね。