2

私は言語を学ぶためにRubyでゲームを設計しています.私のゲームは、配列から項目を削除して別の配列に追加するという一定のサイクルにある必要があります. Array.delete() を呼び出したときに内部で何が起こるか知りたいです。リンクされたリストからの削除とリンクされたリストへの追加は、配列よりもはるかに効率的であるため、ゲームにはむしろリンクされたリストを使用したいと思います。ただし、これまでに Ruby で遭遇したデータ構造は Array だけです。それは本当に唯一のものですか?

編集: これは、敵の船がプレイヤーに向かって弾丸を発射できる基本的なシューティング ゲームです。敵がプレイヤーに向かって発砲するたびに新しい弾丸を割り当てなくても済むように、ゲーム開始前にたくさんの弾丸を割り当てます。敵が発砲すると、使用可能な弾丸のリストから弾丸を 1 つ選び、それを「アクティブな」弾丸のリストに入れます。画面に弾丸を描画するクラスは、アクティブな弾丸のリストにあるそれらの弾丸のみを描画します。弾丸が画面を離れると、使用可能な弾丸のリストに戻ります。すべてのシャッフルはここから始まります...

4

2 に答える 2

4

リンクリストをRubyで実装するのは簡単ですが、実際に実装したときのパフォーマンスは、配列を使用した場合とまったく同じでした。Rubyの優れたアルゴリズムは、内部Cコードの速度によって正確にバランスが取れていました。

今、私は自分の配列の途中にあるものを削除しようとしていませんでした。

あなたの場合、配列が短い場合はアルゴリズムは重要ではなく、組み込みのArrayクラスを使用しても問題ないと言っても差し支えないと思います。配列が長い場合は、ある種のマップを作成できることは間違いありません。これにより、配列の中央から物を削除しても、配列の再パックとその2次時間計算量が不要になります。

実際、最初にゲームをシンプルで直接的な方法で実装する必要があります。何を買うのかさえ知らずに、最初は複雑さをかき混ぜるべきではありません。誰が知っているか、あなたはゲームの他の部分がより多くの時間を使うことに気付くかもしれません。

そして、実際に配列の削除に悩まされていることに気付いた場合、次のステップは、マップ、またはおそらく、Rubyに実装されたリンクリストまたはツリーを追加することです。そして、それが十分に速くない場合は、カプセル化されたRubyソリューションと一連のテストを使用して、C拡張機能を作成するのに適した立場にあり、ほぼ正確にその利点を理解できます。

于 2013-03-16T02:20:03.180 に答える
-2

を使用しHashます。より効率的ですArray

于 2013-03-16T02:15:53.907 に答える