Забив колоду карт

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

#include <iostream>

using namespace std;

#include <stdlib.h>
#include <time.h>
#include <string.h>

#include "Card .h"
char * ValueNames[13] = {
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Jack",
"Queen",
"King",
"Ace"};

void Display(const Card & C)
{
cout << (char)C.Suit << ' ' << ValueNames[C.Value] << endl;
}

void InitDeck(Card Deck[])
{
int     i;
Suits   S;
Values  V;

srand(time(0));
i = 0;
for (S = Hearts; S <= Spades; S = (Suits)(S + 1))
for (V = Two; V <= Ace; V = (Values)(V + 1))
{
Deck[i].Suit = S;
Deck[i].Value = V;
i++;
}
}

void SortHand(Card Hand[])
{
int     i;
int     j;
int     CardOne;
int     CardTwo;
Card    Temp;for (j = 0; j < 5; j++)
{
CardOne = 0;
CardTwo = 1;
for (i = 0; i <= 4; i++)
{
if (Hand[CardOne].Value > Hand[CardTwo].Value)
{
Temp = Hand[CardOne];
Hand[CardOne] = Hand[CardTwo];
Hand[CardTwo] = Temp;
}
else;

CardOne++;
CardTwo++;
i++;
}
}
if (Hand[3].Value > Hand[4].Value)
{
Temp = Hand[3];
Hand[3] = Hand[4];
Hand[4] = Temp;
}
if (Hand[2].Value > Hand[3].Value)
{
Temp = Hand[2];
Hand[2] = Hand[3];
Hand[3] = Temp;
}

if (Hand[1].Value > Hand[2].Value)
{
Temp = Hand[1];
Hand[1] = Hand[2];
Hand[2] = Temp;
}
if (Hand[0].Value > Hand[1].Value)
{
Temp = Hand[0];
Hand[0] = Hand[1];
Hand[1] = Temp;
}

}

void ShowDeck(const Card Deck[])
{
int     i;

for (i = 0; i < NumCardsInDeck; i++)
Display(Deck[i]);
}

void ShowHand(Card Deck[])
{
int     i;
for (i = 0; i < 5; i++)
Display(Deck[i]);
}

void Shuffle(Card Deck[])
{
int     CardOne;
int     CardTwo;
Card    Temp;

for (CardOne = 0; CardOne <NumCardsInDeck; CardOne++)
{
CardTwo = rand() % NumCardsInDeck;
Temp = Deck[CardOne];
Deck[CardOne] = Deck[CardTwo];
Deck[CardTwo] = Temp;
}
}

void Deal(Card Deck[])
{
int     CardOne;
int     CardTwo;
Card    Temp;

for (CardOne = 0; CardOne < 5; CardOne++)
{
CardTwo = rand() % 5;
Temp = Deck[CardOne];
Deck[CardOne] = Deck[CardTwo];
Deck[CardTwo] = Temp;
}
}

bool    HighestCard(Card Hand[])
{
if (Hand[0].Value != Hand[1].Value && Hand[0].Value != Hand[2].Value && Hand[0].Value != Hand[3].Value
&& Hand[0].Value != Hand[4].Value && Hand[1].Value != Hand[2].Value && Hand[1].Value != Hand[3].Value &&
Hand[1].Value != Hand[4].Value && Hand[2].Value != Hand[3].Value && Hand[2].Value != Hand[4].Value && Hand[3].Value != Hand[4].Value)
{
return true;
cout << "The High Card " << endl;
}
else
return false;
}

bool    OnePair(Card Hand[])
{
if ((Hand[0].Value == Hand[1].Value && Hand[0].Value != Hand[2].Value) ||
(Hand[1].Value == Hand[2].Value && Hand[1].Value != Hand[3].Value) ||
(Hand[2].Value == Hand[3].Value && Hand[2].Value != Hand[4].Value) ||
Hand[3].Value == Hand[4].Value)
{
return true;
cout << "One Pair" << endl;
//scoring = (scoring + 16);

}
else
return false;
}

bool IsTwoPair(Card Hand[])
{
if ((Hand[0].Value == Hand[1].Value && Hand[2].Value == Hand[3].Value) || (Hand[1].Value == Hand[2].Value && Hand[3].Value == Hand[4].Value) || (Hand[0].Value == Hand[1].Value && Hand[3].Value == Hand[4].Value))
{
return true;
cout << "Two Pair" << endl;
//scoring = (scoring + 17);
}
else
return false;
}

bool IsThreeOfAKind(Card Hand[])
{
if ((Hand[0].Value == Hand[2].Value) || (Hand[1].Value == Hand[3].Value) || (Hand[2].Value == Hand[4].Value))
{
return true;
cout << "Three of a Kind" << endl;
//scoring = (scoring + 18;
}
else
return false;
}

bool IsFourOfAKind(Card Hand[])
{
if ((Hand[0].Value == Hand[1].Value && Hand[0].Value == Hand[2].Value && Hand[0].Value == Hand[3].Value) || (Hand[1].Value == Hand[2].Value && Hand[1].Value == Hand[3].Value && Hand[1].Value == Hand[4].Value))
{
return true;
cout << "Four of a Kind" << endl;
//scoring = (scoring + 22);
}
else
return false;
}

bool IsStraight(Card Hand[])
{
if (Hand[1].Value == Hand[0].Value + 1 && Hand[2].Value == Hand[1].Value + 1 && Hand[3].Value == Hand[2].Value + 1 && Hand[4].Value == Hand[3].Value + 1)
{
return true;
cout << "Straight" << endl;
//scoring = (scoring + 19);
}
else
return false;
}
bool IsFullHouse(Card Hand[])
{
if ((Hand[0].Value == Hand[1].Value && Hand[0].Value == Hand[2].Value && Hand[3].Value == Hand[4].Value) || (Hand[0].Value == Hand[1].Value && Hand[2].Value == Hand[3].Value && Hand[2].Value == Hand[4].Value))

{
return true;
cout << "Full House" << endl;
}
else
return false;
}

bool IsRoyalFlush(Card Hand[])
{
if (Hand[1].Value == Hand[0].Value + 1 && Hand[2].Value == Hand[1].Value + 1 && Hand[3].Value == Hand[2].Value + 1 && Hand[4].Value == Hand[3].Value + 1)
{
return true;
cout << "Straight" << endl;
//scoring = (scoring + 19);
}
else
return false;
}

main.cpp

#include <iostream>

using namespace std;

#include "Card .h"
int main()
{
Card    Deck[52];
Card    Hands[4][5];
int     i, j;
const int StartingRank = 2;
const int NumRanks = 13;InitDeck(Deck);
cout << "\t The deck starts as " << endl;
ShowDeck(Deck);
Shuffle(Deck);
cout << "\t After shuffling it is" << endl;
ShowDeck(Deck);j = 0;

for (i = 0; i < 5; i++)
{
Hands[0][i] = Deck[j];
j++;
}
SortHand(Hands[0]);
cout << "Hand 1 is: " << endl;
if (HighestCard(Hands[0]))
cout << "\tHighest Card" << endl;
if (OnePair(Hands[0]))
cout << "\tOne Pair" << endl;
if (IsThreeOfAKind(Hands[0]))
cout << "\tThree of a kind" << endl;
if (IsTwoPair(Hands[0]))
cout << "\tTwo Pair" << endl;
if (IsFourOfAKind(Hands[0]))
cout << "\tFour of a Kind" << endl;
if (IsFullHouse(Hands[0]))
cout << "\tFull House" << endl;
if (IsStraight(Hands[0]))
cout << " \tStraight" << endl;

for (i = 0; i < 5; i++)
{
Display(Hands[0][i]);
}for (i = 0; i < 5; i++)
{
Hands[1][i] = Deck[j];
j++;
}
SortHand(Hands[1]);
cout << "Hand 2 is: " << endl;
if (HighestCard(Hands[1]))
cout << "\tHighest Card" << endl;
if (OnePair(Hands[1]))
cout << "\tOne Pair" << endl;
if (IsThreeOfAKind(Hands[1]))
cout << "\tThree of a kind" << endl;
if (IsTwoPair(Hands[1]))
cout << "\tTwo Pair" << endl;
if (IsFourOfAKind(Hands[1]))
cout << "\tFour of a Kind" << endl;
if (IsFullHouse(Hands[1]))
cout << "\tFull House" << endl;
if (IsStraight(Hands[1]))
cout << " \tStraight" << endl;
for (i = 0; i < 5; i++)
{
Display(Hands[1][i]);
}

for (i = 0; i < 5; i++)
{
Hands[2][i] = Deck[j];
j++;
}
SortHand(Hands[2]);
cout << "Hand 3 is: " << endl;
if (HighestCard(Hands[2]))
cout << "\tHighest Card" << endl;
if (OnePair(Hands[2]))
cout << "\tOne Pair" << endl;
if (IsThreeOfAKind(Hands[2]))
cout << "\tThree of a kind" << endl;
if (IsTwoPair(Hands[2]))
cout << "\tTwo Pair" << endl;
if (IsFourOfAKind(Hands[2]))
cout << "\tFour of a Kind" << endl;
if (IsFullHouse(Hands[2]))
cout << "\tFull House" << endl;
if (IsStraight(Hands[2]))
cout << " \tStraight" << endl;
for (i = 0; i < 5; i++)
{
Display(Hands[2][i]);
}for (i = 0; i < 5; i++)
{
Hands[3][i] = Deck[j];
j++;
}
SortHand(Hands[3]);
cout << "Hand 4 is: " << endl;
if (HighestCard(Hands[3]))
cout << "\tHighest Card" << endl;
if (OnePair(Hands[3]))
cout << "\tOne Pair" << endl;
if (IsThreeOfAKind(Hands[3]))
cout << "\tThree of a kind" << endl;
if (IsTwoPair(Hands[3]))
cout << "\tTwo Pair" << endl;
if (IsFourOfAKind(Hands[3]))
cout << "\tFour of a Kind" << endl;
if (IsFullHouse(Hands[3]))
cout << "\tFull House" << endl;
if (IsStraight(Hands[4]))
cout << " \tStraight" << endl;
for (i = 0; i < 5; i++)
{
Display(Hands[3][i]);
}

}

Я вроде начал метод оценки для этой программы. Как мне закончить, чтобы определить выигрышную комбинацию? Если остальная часть моего кода необходима, я опубликую это.

Спасибо!

-3

Решение

  1. Определить ИНТ значение для каждой комбинации в соответствии с их порядком. HighestCard — 0, OnePair — 1, …
  2. Узнайте, какую комбинацию имеет каждая рука. Вы уже сделали это с вашими заявлениями if. Просто храните соответствующие значения где-нибудь.
  3. Сортируйте карты в каждой руке по их рангу. Костюмы больше не нужны, так как все комбинации уже определены.
  4. Сортировка рук. Сначала сравните значения комбинации рук. Если они равны, сравнивайте карты, начиная с самой высокой, одну за другой.
  5. Выигрышная комбинация является первой (последней) в отсортированном контейнере.

Также может быть полезно проверить этот код для оптимизированного определения комбинаций.

1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector