2012-02-28 11 views
0

私はプログラミングとjavascriptを初めて使用しています。私は疑問を抱いています。私はカードゲームを構築しようとすると、フォーマット(カード#、スーツ、例えば5、ハーツ)のカード表現を返すカードオブジェクトを持っている。私はプログラムの開始時にカードを扱い、そのカードが一意である(すなわち、まだ使用されていない)ことを確認する。私は以下の構造を持っています:カードアレイで一意の値を取得できません

var usedCards= []; 

function dealCards() { 
    for (i = 0; i < 3; i++) 
    { 
    var card = createUniqueCard(); 
    usedCards.push(card.cardRepresentation); 
    } 
} 

function createUniqueCard() { 
    do { 
    var newCard = new Card(); 
    } 
    while (usedCards.indexOf(newCard.cardRepresentation) != -1); 

    return newCard; 
} 

これは私のusedCards配列に私の重複したカードを返します。誰も私の論理エラーを指摘できますか?

おかげ

答えて

2

newCard.cardRepresentationは、2つのオブジェクト参照は、それらが同じインスタンスを参照している場合にのみ等しいと見なされますので、その後.indexOf()が一致するものを見つけることはありませんオブジェクトである場合 - あなたはnew Card()で新しいインスタンスを作成しておきます。

newCard.cardRepresentationを文字列として使用することができればうまくいくはずです。または、.indexOf()の代わりに自分の関数を書いて、関数が2つの.cardRepresentationオブジェクトを比較する方法を知っている場合...

もっと良い解決策は、すべての可能なカードを生成して配列に入れ、あなたの取引関数はその配列からランダムに選択できます。

+0

umの代わりに.indexOf()がよく聞こえます。私はそれをすることを学ぶことができる場所に私を指摘できますか? –

+0

あなたはすべての可能なカードを事前に生成してからランダムに選択するほうが良いと思います。新しいカードを生成するのではなく、それらのカードへの参照を保存すると、それらを比較したり、 '.indexOf()'を使うことができます。あなたの 'Card'と' cardRepresentation'オブジェクトの構造を教えてください。簡単な例で私の質問を更新することができます。 – nnnnnn

関連する問題