Oneshot Gems
今すぐプレイ

ゲーム開発者向け

シードを再現可能なレイアウトの入力として扱う

手続き的に生成された部屋が不公平または不可能な場合、デバッグで重要な問題は、同じ部屋を再度構築できるかどうかです。すべての生成選択で一貫した順序でそのジェネレーターが使用される場合、シードはランダム ジェネレーターに反復可能な開始点を与えます。このタスクは、ランダムな結果が公平であるかどうかを判断することとは異なります。ここでの目標は、1 つのレイアウトを再現し、その構造を検査し、レベルの構造ルールに違反する場合にそのレイアウトを拒否することです。

このページの内容

シードされたジェネレータを 1 つレイアウト ビルダーに渡します

シードされた疑似乱数ジェネレーターを作成し、無関係なヘルパー全体で Math.random を呼び出すのではなく、それを各生成関数に渡します。 MDN は、Math.random の初期シードはユーザーが選択したりリセットしたりできないため、それ自体では再生可能なシードを提供できないと述べています。生成されたレベルまたはそのバグ レポートと一緒にシードを保存します。後でランダムな描画を追加または並べ替えると、同じシードで異なるレイアウトが生成される可能性があります。正確な長期再生が重要な場合は、ジェネレーターのバージョンを確認したり、生成されたマップを記録したりできます。

可能であれば目的別に選択を分けます。1 つのストリームは部屋の形状、もう 1 つは装飾、もう 1 つは敵の配置です。その後、装飾的な描画を追加しても、敵のパターンは自動的に移動しません。

生成、検証、そして提示

部屋を構築した後、それを表示する前に構造チェックを実行します。入口と出口が存在し、必要な鍵が歩行可能なタイルに収まり、必須アイテムを収集中に経路探索アルゴリズムが出口に到達できるかどうかを確認します。レイアウトが失敗した場合は、制限された数の新しいシードを使用して再試行し、既知のフォールバック ルームを使用するか、明らかな生成失敗を示します。拒否されたシードと失敗した不変式をログに記録し、予期しないレイアウトをローカルで再生できるようにします。

シード パーサーによって受け入れられる境界のような値を含む、意図的に選択されたシードの小さなセットと、通常のシードのサンプルをテストします。これは、考えられるすべてのシードが有効であることを証明するものではありません。これは、決定論的な再生とジェネレーターの拒否パスの両方を実行する実用的な方法です。

シードを難易度の主張から切り離してください

再現可能な部屋が自動的に公正な部屋になるわけではありません。生成された例を再生して、危険が見えるかどうか、また、意図したルートに対応するのに十分な時間があるかどうかを確認します。そのレビューを公平性レビューの分布分析とは別にしてください。欠陥が見つかった場合、シードを使用すると、チームは記憶からおおよその配置を説明するのではなく、1 つの正確なレイアウトについて話し合うことができます。

⁨シードされたランダムレベルの生成⁩についての質問

Math.random と保存された数値を使用してレベルを再現できますか?

Math.random の組み込み状態をリセットすることではありません。 MDN は、初期シードを選択したりリセットしたりすることはできないと述べています。シード ジェネレーターを制御下で使用し、それを通じて生成の選択肢をルートします。

シードは、生成されたすべてのレベルが解決可能であることを保証しますか?

いいえ、シードは選択シーケンスを再現します。結果として得られるマップは検証されません。到達可能性と必須オブジェクトのルールを確認し、失敗したレイアウトを拒否または修復します。

関連情報

古い情報を見つけましたか? 訂正を連絡

もっと遊ぼう。

いつでも遊べる無料ブラウザーゲーム。楽しいゲームを見つけて、次のお気に入りにしよう。

気になることを、もっと