2011-10-26 4 views
2

私はこれがゲームデザインに関連していることを知っていますが、私はStackOverflow FAQを読んでおり、ソフトウェアアルゴリズムの質問にはここで質問することができます。これがゲームデザインの方が良ければ、誰かが私の動きを助けることを願っています。ありがとう!このマルチスレッド手続き生成アルゴリズムの潜在的な問題は何ですか?

私はマルチスレッド手続き型ダンジョンジェネレータを設計しています。しかし、私はどのような種類の問題に直面しているのだろうか、私は明らかにそれらにマルチスレッドを示す多くのアルゴリズムを見つけることができませんでした。

私は3つの異なるオブジェクトを作成する必要があります。複数の「部屋」を収容する「世界」と各部屋は潜在的な「物体」を収容する。

現在のアルゴリズムは次のように機能します。

Step 1: Generate World 
Step 2: Generate Rooms and Objects concurrently 

世界は部屋のリストを収容し、「利用可能なオブジェクトのリスト」。部屋の作成方法は部屋を生成して世界の部屋リストに追加します.--オブジェクト作成手順はどのような方法でも部屋手順と通信しません。むしろ、オブジェクト作成プロシージャは、Worldのルームリストからランダムなルームを選択し、ルーム内にランダムなオブジェクトを生成します。

私が見るのは、オブジェクト作成プロシージャがあらかじめ成熟して終了している場合のみです。言い換えれば、ルーム作成手順がオブジェクト作成手順よりも遅れて完了したため、ルームリストのルームの一部にのみオブジェクトが作成されます。

さらに問題がありますか、誰もそのようなアルゴリズムの開発に関するアドバイスや経験がありますか?

答えて

3

あなたは、単に3つのステップで動作するはずですので、まず、あなたが言及した問題は、本物ではありません。

  1. 同時に
オブジェクトを生成します
  • 同時に部屋を生成し、世界
  • を生成します

    この順序で、すべての部屋が確実に存在します。とにかくパフォーマンス面で2 + 3を一緒に保つことはあまり得られません。

    しかし、並行処理の典型的な主な問題は、結果を一緒に結合するときです。あなたの部屋がリストに保存されている場合、そのリストに追加する必要があります。これにより、処理が遅くなります。ワールド空間に実際に部屋を作成し、並列に生成された部屋が同じ空間を占有しないようにする必要があります(部屋の中のオブジェクトと同じです)。

  • +0

    これは興味深いアプローチです(私の初期のアプローチよりも複雑ですが)。一度に1つずつ部屋を生成し、部屋の側に並んでオブジェクトを並行させることによって、その複雑さの大部分を避けたいと考えました。しかし、あなたのように私のアプローチは部屋と物体を一緒に保つことではあまり効果がないかもしれない、と言っています。オブジェクトの作成は部屋自体に比べて軽いと仮定します。 –

    +0

    また、部屋の生成手順で、その部屋のオブジェクト生成手順を呼び出すこともできます。 –

    +0

    私は部屋を並行して部屋ごとに一度オブジェクト作成プロシージャを呼び出すというアイデアが気に入っています。私は、払い戻しが高くなり、部屋や物件を同時に行うよりも管理が簡単だと思います。 –

    関連する問題