0

私には、走っている人をシミュレートするという使命があります。

1 つは 300 秒ごとに 2 ステップを実行し、もう 1 つは y 秒で x ステップを実行します。

完全な解決策は望んでいませんが、どのメカニズムがこれに適しているのか、そしてその理由を知りたいだけです。

ps - 最初はタイマーを使用することを考えましたが、2 回目のレースでは十分ではありません。

4

6 に答える 6

2

必要なのは、特定の時間に各ランナーが移動した距離を計算する式だけです。

runner[n].StepsTraveled = secondsPassed * (runner[n].StepsPerSecond);

更新間隔に関係なく、常に正確な移動距離が得られます。任意の解決タイマーを使用することも、ボタンをクリックするたびに更新することもできます。

また、マルチスレッドも必要ありません。

マルチスレッドが必須の場合、各スレッドは次の構造を持つことができます。

var runner = this runner for the thread;
while(running) 
{
  Thread.Sleep(runner.Seconds * 1000); // convert to milliseconds
  runner.StepsTraveled += runner.Steps;  
}

また、ランナーごとに同じスレッド コードを使用できます。変更する必要があるのは、ランナーがrunner使用するオブジェクトだけです。

于 2013-11-11T09:43:52.707 に答える
0

すべてのオブジェクトを移動させる独自のRace(またはWorld) クラスを作成します (おそらく、それらが を実装しているためIMoveable)。次に、このクラスにはメソッドIncrementTime()(およびおそらくIncrementTime(TimeSpan timeToElaps)) もあります。このメソッドが呼び出されるたびに、すべてIMoveableのから取得され、経過時間とオブジェクトの速度に応じてSpeed変更されます。Position

このアプローチを使用すると、現実世界の時間から独立し、必要に応じてシミュレーションをより速くまたはより遅く実行することもできます。Timerそれでも、アプリケーション内で規則性をトリガーする何らかの種類が必要ですがIncrementTime()、実行する必要があるリアルタイムに影響を与えることは非常に簡単です。

于 2013-11-11T09:47:18.093 に答える
0

必要な構成要素は次のとおりです。

  • メソッドで 1 人のランナーのレースを表現する。2 つの異なるメソッドを使用しないようにするには、共通のコードを因数分解して、速度のパラメーターを渡すことができます。

  • 2 つのランナー レースの同時実行を表すには、新しいコンテキストで各メソッドを実行する必要があります。System.Threading.Thread

  • 時間の経過を表すには、Thread.Sleepメソッドを使用します

  • メイン スレッドの待機を表すには (レフリーを表すとします)、次のThread.Joinメソッドを使用します。

何も見逃していないことを願っています...

于 2013-11-11T09:47:58.740 に答える
0

バックグラウンドワーカーを使用できます。「進行状況が変更されました」イベントにより、GUIを簡単に更新して「ランナー」を表示できます

于 2013-11-11T09:38:31.450 に答える
0

マルチスレッドは必要ありません。単に 2 つのタイマーを使用します: 300 / 2s とy / xseconds です。または、本当に必要な場合は、2 つのスレッドを作成し、最初に 300 を待ってから 2 ステップ (または均等に 150 秒と 1 ステップ) を実行し、次に 1 ステップを待っx / y実行します。

于 2013-11-11T09:32:19.800 に答える