あなたの質問がよくわかりません。これはアルゴリズムの質問ではなく、プログラミングのアドバイスのようなものです。私はまさにこれを必要とするゲームを持っています(車ではなくモンスター用)、これが私がしたことです。これは一種の .Net 疑似コードですが、他の環境にも同様のものがあります。
手動でアニメーションを実行している場合、基本的に「ゲームループ」が必要です。
while (noinput):
timenow = getsystemtime();
timedelta = timenow - timeprevious;
update_object_positions(timedelta);
draw_stuff_to_screen();
timeprevious = timenow;
noinput = check_for_input()
は、このループが最後に実行されてからの時間であるupdate_object_positions(timedelta)
に沿ってすべてを移動します。timedelta
timedelta ごとに完全な再描画が実行されます。20ミリ秒ごとに1回など、一定の速度で実行したい場合はthread.sleep(20-timedelta)
、時間を20ミリ秒に詰め込むことができます。
ご質問に戻ります。速度、車線、タイプなど、および表示される時間を含む車のクラスがありました。限られた数の「車」を持っていたので、これらは事前に生成されました。私はこれらをリストに入れ、それらが出現した時点でソートしました。次に、update_object_position(time)
ルーチンで、次の車の開始時刻が現在の時刻より前であるかどうかを確認し、そうであれば、最初の (次の) 車の開始時刻が将来の時刻になるまで、その車をリストから除外しました。
無限の数の車が必要です (私は推測します)。これにはわずかな変更が必要です。各車線の最初の車を生成し、その開始時間を記録します。を呼び出すときupdate_object_position()
、車を発進させる場合は、その車線の次の車とその時間を見つけて、それを次の車にします。繰り返したいパターンがある場合は、パターン全体を一度に生成してリストに入れ、リストが空になったら新しいパターンを生成します。これは、ユーザーに可変パターン フローを指定させるという点でもうまく機能します。
最後に、ボリュームが増加するにつれて、実際のトラフィック フローで何が起こるかを見てきましたか? ランダムな小さなブレーキ動作により、後ろの車がわずかに過剰に反応し、わずかな過剰反応が蓄積すると、道路の 1 km 後方で完全に停止する車に変わります。それは非常に奇妙で、適切なシミュレーションであるだけでなく、壁紙/スクリーンセーバーに大きな効果をもたらす可能性があります.