Случайно — проблема с вытягиванием одной и той же карты

Я создаю игру Spades для своего класса C ++. У меня большая часть разобралась. Однако, когда я вытаскиваю карту из колоды, это та же самая карта на протяжении всего прогона программы. Я не могу понять, как заменить вторую карту и так далее обратно на случайную карту. Любая помощь будет принята с благодарностью. Кроме того, я знаю, что большая часть кода, вероятно, написана неправильно, и есть более простые способы написания некоторых областей, но я должен был следовать определенным критериям.

#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;
}
}

0

Решение

Строка 85:

Deck.iCardIndex = 0;

Это внутри петли. Каждый раз, когда вы хотите взять карту, вы сбрасываете индекс и начинаете сначала с верхней части колоды.

В более общем смысле, вы должны пройти путь от простого к сложному, тестируя на каждом этапе. Когда вы имели Deck готово, вы должны были попробовать раздать несколько карт, прежде чем вводить интерактивные варианты и другие вещи. Тогда эту ошибку было бы легче обнаружить.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]