2012-04-19 4 views
0

GlutとOpenglで私自身のbejeweldを作成するつもりですgame info(wiki)C++ bejeweldリンクリストvs arraylist

短いゲーム情報 ゲームはグリッドで構成され、異なる宝石で8x8と言うことができます。 2つの隣接する宝石を交換することによって、同じタイプの少なくとも3つの宝石の行/列を作成すると、宝石は消滅します。競技場は上から塗りつぶされます。配列

2つの設計consepts リンクされたリストがあり、これを実装する方法はいくつかありますが、私は最も保守が容易かつ効率的な方法をしたいと思います。私のアイデア:

(2D配列はプレーフィールド/グリッドを表します)

1)宝石オブジェクト(インスタンス)へのすべてのポインタを含むリンクリスト。また、リストの高速アクセスのためにリンクされたリスト要素へのポインタをすべて含む2D配列。リンクされたリストは、ゲームオブジェクトを簡単に印刷するために使用できます。すべてのリンクされたリストオブジェクトは、位置(宝石、スコアボード、時間ETS)

2)上記と同様の考え方が、各行又は列と他のゲーム要素のリンクリストのためにリンクされたリストが付属して

3)オブジェクト/インスタンス(宝石)へのポインタを持つ2D配列のみ。

必要な操作

-swap要素(宝石)、ポインタを交換することによって?

- 私は私が作った願っています相互

隣の宝石の同じ種類の少なくとも3と行/ colomnsのために(グリッドの上部にある)新しい要素

-check「を作成します」それはすべて明らかです。何が最良の解決策になると思いますか?

+0

これは本当に非質問です。あなたが一番うまくいくと思うものを試してくださいもしそうでなければ、やり直してください。 – Anthales

+0

2次元配列だけを使うのが一番良いと思いますが、2次元配列をリンクリスト(アイデア1)と組み合わせて使うヒントがあります。だから私は他の人の考えを知りたいです – user1345112

答えて

1

リンクリストを使用するのは難しいことだと思います。私が考えることができるのは、宝石を上から落とすことだけですが、それでも2D配列では些細なことです。

012dの2d配列は問題ありません。シンプルで速いです。

0

私は2D配列を使用します。必要な要素に達するまでリストを反復するのではなく、要素に直接アクセスできるので、使いやすいです。

リンクリストの利点もわかります。スワップ後にメンバーを削除するだけで3行を取得できます。配列を使用する場合と同じように、各要素を反復してシフトするだけで、新しい要素をhead/tailに追加することができます。

+0

あなたの答えをありがとう、私はそれも考えていましたが、それは "宝石が消えるたびに新しいインスタンスを作成する必要がある"ということです。それはあまりにも非効率的だと思いますか? – user1345112

+0

いいえ。その特定の配列[x] [y]セルの値を設定するだけです。それがあまりにも大きければ、実際に配列に宝石の配列の代わりに宝石へのポインタの配列を作ることができます。それは役に立ちますか? –

+0

@ user1345112「ビージュエリーされたゲーム」について話しているとき、なぜ効率性を考えていますか?このような単純なゲームでは、効率は問題になりません。コード_development_と_maintainance_のメリットについて考えてみましょう! – Anthales

0

私の提案は、両方を実装しています。あなたは経験なしでちょっと聞こえる。これらの質問に次回に遭遇したときに、自分でこれらの質問に答えるために、より多くのコードを書く必要があります。優れた設計は、実装のこの部分を簡単に置き換えることができるようにします。そうすることを試み、それから学びます。