iOS および OSX 用の Lua でローグライクを開発しています。Lua はかなり新しく、自分のプラットフォームで math.random が非ランダムであることに がっかりしました。関数を介して設定された乱数の呼び出しを既に設定していました。
function rollD(max)
return math.random(max)
end
だから私はこの投稿に応えて素晴らしい答えを見つけました。それは私の問題を解決すると思います(ゲームが毎回異なることはローグライクにとって非常に重要です)しかし、次の微調整機能を作成するために:
function rollD(max)
return srandom(seedobj,1,max)
end
仕事、私はしなければならなかった:
local seedobj = { seed = -232343 }
Donati の Knuth 適応から、もうローカルではなく、実際に (os.time()*-1) を使用するように変更しました。これは実際のところ、これまでのところ完全に機能しており、私の (非常に初歩的な) ローグライク ゲームは、思いどおりにランダムな悪者やダンジョンを巻き上げています。でも、うまくいくと不安…。
srandomへの呼び出しの数が多い場合(おそらくレベルごとに 1000 回以上の呼び出し)、seedobjをグローバルにすることで何らかのパフォーマンス ヒットが発生するでしょうか? テーブルにネストされているので、そのシードは参照であり、何も心配していないと思いたいです。しかし、それ以外の場合:この関数をより効率的に呼び出すことができるように変更する方法はありますか?