2011-06-22 7 views
3

私はスレッドとMVCを使用して、ソートの戦闘シーケンスをエミュレートしようとしています。詳細:いくつかの実行可能オブジェクトに共通の変数の最小値を取得する方法は?

  • すべてのクリーチャーは、誰が最初に行くのかを決定するイニシアチブスコアを持っています。
  • すべてのクリーチャーは、意図した目標を述べなければなりません。
  • 生物は「戦闘」クラスのスタックに積み込まれます。スコアが最も低いクリーチャーが最初にスタックに入る。
  • すべてのクリーチャーがターゲットを1つ選択すると、スタックは空になり、クリーチャーはそのイニシアチブの順番に応じて行動します。

割り当て制約では、クリーチャーを別のスレッドとして扱う必要があります。問題は次のとおりです。

  • 「戦闘」クラスは、それ以上のクリーチャーがそれ以上進入しないため、スタック上のアクションを処理する必要があることを認識することはできません。
  • 私は、「戦闘」には実行中のすべてのスレッドの中で最低のイニシアチブスコアを知る方法が必要であると考えていますが、その管理方法はわかりません。

これを明確にすることができない場合はお詫び申し上げます。それは非常にイライラしています。

+0

優先度キューを使用してThreadPoolExecutorsを見てください。メインアプリケーションは、各クリーチャーをキューにプッシュしてから、プールエグゼキュータを実行します。プールエグゼキュータは、優先順に順番に実行されます。 ThreadPoolExecutorsが完了したら、リンスリピート – Suroot

+0

それはまだ私の専門知識を少し超えています。それを見て、私はそれで何ができるのか見てみよう。ありがとう:) –

+0

あなたの快適ゾーンの外に踏み出すことはプログラミングにとって重要です。あなたが探しているものが分からないときは、このようなことについての洞察を得ることは常に良いことです。 – Suroot

答えて

0

この課題の正確な要件を知らなくても、良い答えを与えるのは難しいですが、ここでは2つのアイデアがあります。

Combatクラスは、すべての移動がいつ処理されるかを知る必要があります。すべてのクリーチャーは、1ターンに1度、戦闘を行う必要があります。あるいは、それが戦闘の動きやそれに類似するものを作ろうとしていないとすれば何らかの方法があります。この情報がなければ、移動をいつ処理するのか分かりません。

イニシアチブの順序での処理は意味がありますが、順番にスタックにプッシュする必要がありますか?すべての動きを追加し、優先順位キューを並べ替えたり使用したりする方が良い解決策のようです。戦闘クラスが特定の順序で移動だけを受け入れる必要がある場合は、はい、最も低いスコアを知る必要があります。

関連する問題