Hi guys, so I'm writing a program that I can later implement into maybe a blackjack game or something if I want to. Anyways it's supposed to create a deck of cards, and each card is stored in 1 byte (each element of a 52 byte character array should store a card number/suit). I'm using bitwise operators etc to do this.
Anyways I'm not receiving the output that I want. The output that I should be getting (if it worked properly) would be an even amount of suits (13 of each suit). Instead I'm getting 5 clubs, 16 diamonds, 15 hearts, 16 spades. I'm pretty certain it's a flaw in my constructor, which is modifying the binary in each byte of the array.
Here is the output that I get when I run the program:
As you can see, that's not right.. It is SUPPOSED to be Club, Diamond, Heart, Spade, in that order for every card. So ovbiously there is something wrong with the method I'm using in the constructorCode:Card 0: 00000000 suit: Club Card 1: 00010001 suit: Diamond Card 2: 00100010 suit: Heart Card 3: 00110011 suit: Spade Card 4: 00000100 suit: Club Card 5: 00010101 suit: Diamond Card 6: 00100110 suit: Heart Card 7: 00000111 suit: Club Card 8: 00011000 suit: Diamond Card 9: 00101001 suit: Heart Card 10: 00001010 suit: Club Card 11: 00011011 suit: Diamond Card 12: 00101100 suit: Heart Card 13: 00001101 suit: Club Card 14: 00011110 suit: Diamond Card 15: 00101111 suit: Heart Card 16: 00010000 suit: Diamond Card 17: 00010001 suit: Diamond Card 18: 00110010 suit: Spade Card 19: 00010011 suit: Diamond Card 20: 00010100 suit: Diamond Card 21: 00110101 suit: Spade Card 22: 00010110 suit: Diamond Card 23: 00010111 suit: Diamond Card 24: 00111000 suit: Spade Card 25: 00011001 suit: Diamond Card 26: 00011010 suit: Diamond Card 27: 00111011 suit: Spade Card 28: 00011100 suit: Diamond Card 29: 00011101 suit: Diamond Card 30: 00111110 suit: Spade Card 31: 00011111 suit: Diamond Card 32: 00110000 suit: Spade Card 33: 00100001 suit: Heart Card 34: 00100010 suit: Heart Card 35: 00110011 suit: Spade Card 36: 00100100 suit: Heart Card 37: 00100101 suit: Heart Card 38: 00110110 suit: Spade Card 39: 00100111 suit: Heart Card 40: 00101000 suit: Heart Card 41: 00111001 suit: Spade Card 42: 00101010 suit: Heart Card 43: 00101011 suit: Heart Card 44: 00111100 suit: Spade Card 45: 00101101 suit: Heart Card 46: 00101110 suit: Heart Card 47: 00111111 suit: Spade Card 48: 00110000 suit: Spade Card 49: 00110001 suit: Spade Card 50: 00110010 suit: Spade Card 51: 00110011 suit: SpadeHere is the code:
I receive no compiler errors or warnings, and I'm using visual studio C++ in case you're wondering. Thanks!Code:#include <iostream> #include <cstdlib> using namespace std; void outputBinary(char value); void checkSuit(char value); class CardDeck { public: CardDeck(); ~CardDeck(); unsigned char * cards; }; CardDeck::CardDeck() { int i = 0; int x = 0; int count = 0; this->cards = new unsigned char[52]; for (int i = 0; i < 52; count++) { this->cards[i] = i++ | x; x+=16; if (count == 3) { x = 0; count = 0; } } } CardDeck::~CardDeck() { delete [] this->cards; } int main() { CardDeck c; for (int x = 0; x < 52; x++) { cout << endl << "Card " << x << ": "; outputBinary(c.cards[x]); cout << " suit: "; checkSuit(c.cards[x]); } } void checkSuit(char value) { unsigned char x = 0x30 & value; switch ( x ) { case 0x30: cout << "Spade"; break; case 0x20: cout << "Heart"; break; case 0x10: cout << "Diamond"; break; case 0x0: cout << "Club"; break; default: cout << "No match found."; break; } }



LinkBack URL
About LinkBacks
Here is the code:


