c++ - 绘制同一张卡的问题 C++

标签 c++ random playing-cards

<分区>

我正在为我的 C++ 类(class)创建黑桃游戏。我已经解决了大部分问题。但是,当我从一副牌中抽出一张牌时,它在整个程序运行过程中都是同一张牌。我不知道如何将第二张卡等改回随机卡。任何帮助将不胜感激。此外,我知道大部分代码可能没有正确编写,并且有更简单的方法来编写某些区域,但我必须遵循某些标准。

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <algorithm>

using namespace std;


enum eSuit {H, C, D, S};


struct SSingleCard
{
    int iRank;
    eSuit Suits;
};

struct SDeck
{
    SSingleCard aiDeck[52];
    int iCardIndex;
};

struct SPlayerHand
{
    SSingleCard aiHand[13];
    int iTotalHand;
};

struct SCardDisplay
{
    char cSuit;
    char cRank;
};

void showCard(SSingleCard);



int main(int argc, char* argv[])
{

cout << "Welcome! This is a 2-Player Version of Spades! You vs. The Computer!";

cout << endl;

cout << "You draw first!";

cout << endl;
char cKeepCard;

SDeck Deck; 

Deck.iCardIndex = 0;

for(int i = 0; i < 4; i++)
{
    for(int j = 0; j < 13; j++)
    {
        Deck.aiDeck[Deck.iCardIndex].iRank = j + 2;
        Deck.aiDeck[Deck.iCardIndex].Suits = eSuit(i);
        Deck.iCardIndex++;

    }
}


srand( time( NULL ) );

for( int i = 0; i < 52; i++ )
{
    int iRandomNumber = ( rand() % 51) + 1; 
    SSingleCard card = Deck.aiDeck[i];
    Deck.aiDeck[i] = Deck.aiDeck[iRandomNumber];
    Deck.aiDeck[iRandomNumber] = card;

}   

do
{
    SPlayerHand sPlayersHand;
    SPlayerHand sComputersHand;

    Deck.iCardIndex = 0;

    cout << "You drew ";

    showCard(Deck.aiDeck[Deck.iCardIndex]);

    cout << "Keep this card? (Y/N)";
    string sDecision;
    cin >> sDecision;

    if(sDecision == "N" || sDecision == "n")
    {
        sPlayersHand.aiHand[0,1,2,3,4,5,6,7,8,9,10,11,12] = Deck.aiDeck[Deck.iCardIndex];;
        cout << "You discarded ";
        showCard(Deck.aiDeck[Deck.iCardIndex]);
        Deck.iCardIndex++;
    } else if (sDecision == "Y" || sDecision == "y") 
    {
        sPlayersHand.aiHand[0,1,2,3,4,5,6,7,8,9,10,11,12] = Deck.aiDeck[Deck.iCardIndex];
        showCard(Deck.aiDeck[Deck.iCardIndex]);
        Deck.iCardIndex++;
        showCard(Deck.aiDeck[14]);
        Deck.iCardIndex++;
        sComputersHand.aiHand[0] = Deck.aiDeck[Deck.iCardIndex];
        Deck.iCardIndex++;

    } else {
        cout << "That input is invalid. Try again." << endl;
    }
}while (Deck.iCardIndex < 52);

std::cin.sync();
std::cin.get();
return 0;
}

void showCard(SSingleCard card)
{

    if( card.iRank >= 2 && card.iRank <=9 )
        cout << card.iRank;
            switch( card.iRank )
            {
                case 10:
                    cout << "T";
                    break;          
                case 11:
                    cout << "J";                
                    break;
                case 12:
                    cout << "Q";                
                    break;
                case 13:
                    cout << "K";                
                    break;
                case 14:
                    cout << "A";                
                    break;
            }

    if( card.Suits >= 0 && card.Suits <= 4 )
            switch( card.Suits )
            {
                case 0:
                    cout << 'C' << endl;                    
                    break;
                case 1:
                    cout << 'D' << endl;                    
                    break;
                case 2:
                    cout << 'S' << endl;                    
                    break;
                case 3:
                    cout << 'H' << endl;                    
                    break;
            }
}

最佳答案

第 85 行:

Deck.iCardIndex = 0;

这是循环内部。每次你想抽一张牌时,你都会重置索引并从牌组的顶部重新开始。

更一般地说,您应该从简单到复杂,在每一步都进行测试。当您准备好 Deck 时,您应该尝试发几张牌,然后再放入交互式选项和其他内容。那么这个错误会更容易被发现。

关于c++ - 绘制同一张卡的问题 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774807/

相关文章:

ios - 随机字符串和 UIImageView 在一起

java - 如何显示我原来的一副纸牌 Java

c++ - 'to_string' 不是 'std' 的成员

c++ - 表示同一矩阵中无向图的个数

c++ - 如何优化 VBO/IBO 以最大化 GPU 缓存使用

python - 如何用python制作一副带有多个变量的纸牌?

javascript - 从一副牌中发牌和从阵列中取出牌

c++ - Main 函数与状态之间的通信

c - Mersenne Twister init_by_array() 函数说明

java - 如何在数组中生成唯一的随机数