Need help with Containers
Oct 29, 2014 at 7:10am UTC
I need help on creating a container in an already working program. What I already have is a poker hand stating that I have three numbers that the user inputs that says you have three (number or face card), you have a pair, you have a high-straight, or you have high card. Now my professor is asking us to do add another hand that states three cards and having the first hand beat, lose, or tie the second hand. He wants us to seperate the functions in a header file and the rest to do like normal. But i'm confuse on where to start on the existing program.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
#include<iostream>
#include<string>
using namespace std;
// input range
const int MIN_CARD_NORMAL_VALUE = 1;
const int MAX_CARD_NORMAL_VALUE = 13;
// numberic values of cards
const int ACE_LOW_VALUE = 1;
const int MIN_NON_FACE_CARD_VALUE = 2;
const int MAX_NON_FACE_CARD_VALUE = 10;
const int JACK_VALUE = 11;
const int QUEEN_VALUE = 12;
const int KING_VALUE = 13;
const int ACE_HIGH_VALUE = 14;
// face card names
const string JACK_NAME = "jack" ;
const string QUEEN_NAME = "queen" ;
const string KING_NAME = "king" ;
const string ACE_NAME = "ace" ;
// non-face card (number) names
const string NUMBER_2_NAME = "two" ;
const string NUMBER_3_NAME = "three" ;
const string NUMBER_4_NAME = "four" ;
const string NUMBER_5_NAME = "five" ;
const string NUMBER_6_NAME = "six" ;
const string NUMBER_7_NAME = "seven" ;
const string NUMBER_8_NAME = "eight" ;
const string NUMBER_9_NAME = "nine" ;
const string NUMBER_10_NAME = "ten" ;
int main(void )
{
// 1 Input hand
// 1.1 basic input
int card1, card2, card3;
cout << "Enter three cards in the range "
<< MIN_CARD_NORMAL_VALUE
<< " to "
<< MAX_CARD_NORMAL_VALUE
<< ", separated by spaces: " ;
cin >> card1 >> card2 >> card3;
cin.ignore(999,'\n' );
// 1.2 format check
if ( cin.fail() )
{
cin.clear();
cin.ignore(999,'\n' );
cout << "Input format error. Press ENTER to terminate: " ;
cin.ignore(999,'\n' );
return 1;
}
// 1.3 range check
if ( card1 < MIN_CARD_NORMAL_VALUE || card1 > MAX_CARD_NORMAL_VALUE
|| card2 < MIN_CARD_NORMAL_VALUE || card2 > MAX_CARD_NORMAL_VALUE
|| card3 < MIN_CARD_NORMAL_VALUE || card3 > MAX_CARD_NORMAL_VALUE )
{
cout << "Input range error. Press ENTER to terminate: " ;
cin.ignore(999,'\n' );
return 1;
}
// 2 process
// 2.1 Adjust aces from low to high cards
// (makes things much easier later)
if ( card1 == ACE_LOW_VALUE ) card1 = ACE_HIGH_VALUE;
if ( card2 == ACE_LOW_VALUE ) card2 = ACE_HIGH_VALUE;
if ( card3 == ACE_LOW_VALUE ) card3 = ACE_HIGH_VALUE;
// 2.2 sort cards
if ( card1 > card2 )
{
int temp = card1;
card1 = card2;
card2 = temp;
}
if ( card2 > card3 )
{
int temp = card2;
card2 = card3;
card3 = temp;
}
if ( card1 > card2 )
{
int temp = card1;
card1 = card2;
card2 = temp;
}
// 2.3 determine which hand type(s) apply
// (these look for a given hand criteria only - higher hands may exist)
bool is3OfAKind = card1 == card3;
bool isSimpleStraight = card2 == card1+1 && card3 == card2+1;
bool isStraightWithAceLow = card3 == ACE_HIGH_VALUE
&& card1 == ACE_LOW_VALUE+1
&& card2 == card1+1;
bool isStraight = isSimpleStraight || isStraightWithAceLow;
bool isPair = card1 == card2 || card2 == card3;
// 2.4 Key Card
// Most significant card of hand.
// 2.4.1 choose
int keyCard;
if ( is3OfAKind ) keyCard = card3; // high card
else if ( isStraightWithAceLow ) keyCard = card2; // end of straight
else if ( isStraight ) keyCard = card3; // end of straight
else if ( isPair ) keyCard = card2; // value of pair cards
else keyCard = card3; // high card
// 2.4.2 name
string keyCardName;
if ( keyCard == 2 ) keyCardName = NUMBER_2_NAME;
else if ( keyCard == 3 ) keyCardName = NUMBER_3_NAME;
else if ( keyCard == 4 ) keyCardName = NUMBER_4_NAME;
else if ( keyCard == 5 ) keyCardName = NUMBER_5_NAME;
else if ( keyCard == 6 ) keyCardName = NUMBER_6_NAME;
else if ( keyCard == 7 ) keyCardName = NUMBER_7_NAME;
else if ( keyCard == 8 ) keyCardName = NUMBER_8_NAME;
else if ( keyCard == 9 ) keyCardName = NUMBER_9_NAME;
else if ( keyCard == 10 ) keyCardName = NUMBER_10_NAME;
else if ( keyCard == JACK_VALUE ) keyCardName = JACK_NAME;
else if ( keyCard == QUEEN_VALUE ) keyCardName = QUEEN_NAME;
else if ( keyCard == KING_VALUE ) keyCardName = KING_NAME;
else if ( keyCard == ACE_HIGH_VALUE ) keyCardName = ACE_NAME;
else keyCardName = "error" ;
// 2.4.3 english support
// 2.4.3.1 article
string keyCardNameArticle;
if ( keyCardName == ACE_NAME || keyCardName == NUMBER_8_NAME )
keyCardNameArticle = "an" ;
else
keyCardNameArticle = "a" ;
// 2.4.3.2 pluralization
string keyCardNamePlural;
if ( keyCardName == NUMBER_6_NAME )
keyCardNamePlural = "es" ;
else
keyCardNamePlural = "s" ;
// 3 output hand evaluation
cout << endl;
cout << "You have " ;
if ( is3OfAKind ) cout << "three " << keyCardName << keyCardNamePlural << '.' ;
else if ( isStraight) cout << keyCardNameArticle << ' ' << keyCardName << "-high straight." ;
else if ( isPair ) cout << "a pair of " << keyCardName << keyCardNamePlural << "." ;
else cout << keyCardNameArticle << ' ' << keyCardName << '.' ;
cout << endl;
// 4 finish up
cout << endl;
cout << "Press ENTER to finish..." ;
cin.ignore(999,'\n' );
return 0;
}
Last edited on Oct 30, 2014 at 2:31am UTC
Oct 30, 2014 at 2:33am UTC
What I really have so far
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#include "Tools.h"
#include<iostream>
#include<string>
using namespace std;
#ifndef CARD_HAND_LOCK
#define CARD_HAND_h
enum CardRank {CR_ACE_CARD = 1, CR_TWO_CARD = 2, CR_THREE_CARD = 3, CR_FOUR_CARD = 4, CR_FIVE_CARD = 5,
CR_SIX_CARD =6, CR_SEVEN_CARD = 7, CR_EIGHT_CARD = 8, CR_NINE_CARD = 9, CR_TEN_CARD = 10,
CR_JACK_CARD = 11, CR_QUEEN_CARD = 12, CR_KING_CARD = 13};
struct Card
{
int face1;
int face2;
};
class Hand
{
Card cards[3];
public :
Hand(string input);
};
Hand getCardHand(string prompt);
void outputCardHand(Hand cardHand);
#endif
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include "CardHand.h"
#include<iostream>
#include<string>
using namespace std;
Hand getCardHand(string prompt)
{
Card userInput;
userInput.face1 = getInt(prompt + " Enter three space-separated cards in the range 1..13:" );
userInput.face2 = getInt(prompt + " Enter three space-separated cards in the range 1..13:" );
return userInput;
}
void outputCardHand(Hand cardHand)
{
cout << Card.face1 << "beats a " << Card.face2 << "." << endl;
}
Topic archived. No new replies allowed.