0

デッキ (cardArray) からカードを手札に追加しようとしていますが、重複は許可されません。SuperCard クラスで、inPlay という bool のプロパティを作成しました。Program.cs の開始時に、すべてのカード inPlay bool を false に設定する「シャッフル」メソッドがあります。同じカードを引かないようにする方法を見つけようとしています。if/else if を試みましたが、うまくいきません。else if をそのままにしておくと、「オブジェクトのインスタンスがありません」という例外が発生します。ここにコードがあります。どんな助けでも素晴らしいでしょう。ありがとう!

public SuperCard[] GetCards(int number)
{ 
    SuperCard[] hand = new SuperCard[number];
    for (int i = 0; i < number; i++)
    {
        int x = myRandom.Next(0, 51);
        if (cardArray[x].inPlay == false)
        {
            hand[i] = cardArray[myRandom.Next(0, 51)];
            cardArray[x].inPlay = true;
        }
        else if (cardArray[x].inPlay == true) 
        {
            hand[i] = cardArray[myRandom.Next(0, 51)];

        }
    }
    return hand;
}
4

4 に答える 4

0

私が思う問題は、プロパティxをチェックするために使用し、最初のステートメントでカードを引くために再度使用することです。inPlaymyRandom.Next(0, 51)if

ステートメントでは、else ifチェックされたプロパティではない別のカードを引こうとしていると思いますinPlay

解決策は、 を持つ新しいカードを見つける新しいメソッドを作成することinPlay == falseです。その方法では、そのカードを取得するか、デッキのカードがなくなるまでループする必要があります。

于 2013-11-12T08:29:21.293 に答える
0

まず、コードを次のように変更しました。

public SuperCard[] GetCards(int cards_to_get)
{ 
    SuperCard[] hand = new SuperCard[cards_to_get];
    for (int i = 0; i < cards_to_get; i++)
    {
        int x = myRandom.Next(0, 51);

        if (cardArray[x].inPlay)
            hand[i] = cardArray[myRandom.Next(0, 51)];  
        else {
            hand[i] = cardArray[myRandom.Next(0, 51)];
            cardArray[x].inPlay = true;
        }
    }
    return hand;
}

次に、cardArray をいつどこでどのように初期化しますか?

3番目に、コメントが示唆するように、カードのリストを作成し、リストをシャッフルして、たとえばfirst cards_to_getを使用できます。ListName.Take(cards_to_get)

ここここでシャッフルを探すか、SOを検索してリストをシャッフルすることができます。

編集:
わかりました...これがあなたがすることです...あなたはここにランダムなカードを手に入れます:int x = myRandom.Next(0, 51);

次に、それが場にない(追加する必要がある)場合は追加しましょう...ただ...ランダムなカードを追加します:

 hand[i] = cardArray[myRandom.Next(0, 51)];
        cardArray[x].inPlay = true;

を追加する必要がありましたcardArray[x]。これで問題が解決するはずです。

別の問題は、次のビットにあります。そうでない場合は 、新しいランダム カードを追加します。

else if (cardArray[x].inPlay == true) 
{
        hand[i] = cardArray[myRandom.Next(0, 51)];
}

ただし、ここでは、場にあるかどうかを確認せずに、新しいランダム カードを追加します。

:)

于 2013-11-12T08:30:10.297 に答える