0

カードのデッキをシミュレートしようとしていますが、その作成方法がわからないため、カードをランダムに選択しますが、一度だけです。私はカードのダブルを取得し続けます。

#include <iostream>
#include <cstdlib> //for rand and srand
#include <cstdio>
#include <string>

using namespace std;

string suit[] = { "Diamonds", "Hearts", "Spades", "Clubs" };
string facevalue[] = { "Two", "Three", "Four", "Five", "Six", "Seven", "Eight",
        "Nine", "Ten", "Jack", "Queen", "King", "Ace" };

string getcard() {
    string card;
    int cardvalue = rand() % 13;
    int cardsuit = rand() % 4;

    card += facevalue[cardvalue];
    card += " of ";
    card += suit[cardsuit];

    return card;
}

int main() {
    int numberofcards = 52;

    for (int i = 0; i < numberofcards; i++) {
        cout << "You drew a " << getcard() << endl;
    }

    system("pause");
}

助言がありますか?

4

3 に答える 3

4

トランプのデッキです。これを行うだけです:

  1. デッキを初期化します。固定の 52 枚のカード配列内に 52 枚すべてのカードを配置します。
  2. デッキをシャッフルします。
  3. nextCardデッキのインデックスをゼロ (0) から初期化して、描画ループを開始します。「引く」( のカードdeck[nextCard]) ごとに 1 ずつ進みnextCardます。== 52 の場合nextCard、手札がなくなります。

以下は、デッキのセットアップ方法のサンプルです。nextCard索引付けと描画のアルゴリズムはあなたに任せます。

#include <iostream>
#include <algorithm>
using namespace std;

// names of ranks.
static const char *ranks[] =
{
    "Ace", "Two", "Three", "Four", "Five", "Six", "Seven",
    "Eight", "Nine", "Ten", "Jack", "Queen", "King"
};

// name of suites
static const char *suits[] =
{
    "Spades", "Clubs", "Diamonds", "Hearts"
};

void print_card(int n)
{
    cout << ranks[n % 13] << " of " << suits[n / 13] << endl;
}

int main()
{
    srand((unsigned int)time(NULL));

    int deck[52];

    // Prime, shuffle, dump
    for (int i=0;i<52;deck[i++]=i);
    random_shuffle(deck, deck+52);
    for_each(deck, deck+52, print_card);

    return 0;
}

デッキ ダンプのサンプルを以下に示します。

Seven of Diamonds
Five of Hearts
Nine of Diamonds
Ten of Diamonds
Three of Diamonds
Seven of Clubs
King of Clubs
Five of Diamonds
Ace of Spades
Four of Spades
Two of Diamonds
Five of Clubs
Queen of Diamonds
Six of Spades
Three of Hearts
Ten of Spades
Two of Clubs
Ace of Hearts
Four of Hearts
Four of Diamonds
Ace of Diamonds
Six of Diamonds
Jack of Clubs
King of Spades
Jack of Diamonds
Four of Clubs
Eight of Diamonds
Queen of Hearts
King of Hearts
Ace of Clubs
Three of Spades
Two of Spades
Six of Clubs
Seven of Hearts
Nine of Clubs
Jack of Hearts
Nine of Hearts
Eight of Clubs
Ten of Clubs
Five of Spades
Three of Clubs
Queen of Clubs
Seven of Spades
Eight of Spades
Ten of Hearts
King of Diamonds
Jack of Spades
Six of Hearts
Queen of Spades
Nine of Spades
Two of Hearts
Eight of Hearts
于 2012-11-06T18:37:27.100 に答える
2

カードが選択されたときにカードのリストから削除されるように、カードのデッキをシミュレートする必要があります。

つまり、完全なデッキから始めて、リストからカードをランダムに選択すると、リストから削除されます。

于 2012-11-06T18:30:23.707 に答える
0

つまり、カードを選んだら、それをデックに残します。データ構造から削除して、デックから取り出します。配列/ベクトル/その他の長さが変化するにつれて範囲を変更してcardvalue、それに応じてランダムサンプリングを調整する必要があります。cardsuit

于 2012-11-06T18:30:24.043 に答える