This simple example shows how to use srand() and rand(),
as well as showing some simple classes.
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 |
// cardplay-1/main.cpp -- Very simple program to deal cards.
// Fred Swartz 2004-11-22
// Summary: Reads a number and then "deals" that many cards.
// Illustrates: Random methods (strand and rand).
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
#include "card.h"
#include "deck.h"
//================================================== main
int main() {
int numOfCards; // Input number for how many cards to deal.
srand(time(0)); // Initializes random "seed".
Deck deck;
while (cin >> numOfCards) {
deck.shuffle();
cout << "Your hand is: ";
for (int cardNum=0; cardNum<numOfCards; cardNum++) {
Card c = deck.dealOneCard();
string suit = c.getSuit();
string face = c.getFace();
cout << face << suit << " ";
}
cout << endl;
}
return 0;
}//end main
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// cardplay-1/card.h
// Fred Swartz 2004-11-22
#ifndef CARD_H
#define CARD_H
class Card {
public:
Card();
Card(int card);
string getSuit() const;
string getFace() const;
private:
int _card; // range 0..51
static const string CARD_FACES[];
static const string CARD_SUITS[];
};
#endif
|
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 |
// cardplay-1/card.cpp
// Fred Swartz 2004-11-22
#include <string>
using namespace std;
#include "card.h"
//================================================= static constants
const string Card::CARD_FACES[] = {"A", "2", "3", "4", "5", "6", "7"
, "8", "9", "10", "J", "Q", "K"};
const string Card::CARD_SUITS[] = {"S", "H", "C", "D"};
//================================================= Constructor
Card::Card() {
_card = 0; // TODO: Should initialize to Joker.
}
//================================================= Constructor
Card::Card(int card) {
_card = card;
}
//================================================== getFace
// Action : Returns face value of card.
// Returns : a string representing card face: "A", "2", ...
string Card::getFace() const {
return CARD_FACES[_card%13];
}//end getFace
//================================================== getSuit
// Action : Returns suit of a card value.
// Returns : a string "S" (Spades), "H", (Hearts),
// "C" (Clubs), or "D" (Diamonds).
string Card::getSuit() const {
return CARD_SUITS[_card/13];
}//end getSuit
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// cardplay-1/deck.h
// Fred Swartz 2004-11-22
#ifndef DECK_H
#define DECK_H
class Deck {
public:
Deck();
Card dealOneCard();
void shuffle();
private:
Card _cards[52];
int _nextCardIndex;
};
#endif
|
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 |
// cardplay-1/deck.cpp
// Fred Swartz 2004-11-22
#include <cassert>
#include <cstdlib>
#include <string>
#include <algorithm>
using namespace std;
#include "card.h"
#include "deck.h"
//=========================================== Constructor
Deck::Deck() {
// Initialize the array to the ints 0-51
for (int i=0; i<52; i++) {
_cards[i] = Card(i);
}
shuffle();
_nextCardIndex = 0; // index of next available card
}
//================================================== deal
// Action : Returns random Card.
Card Deck::dealOneCard() {
assert(_nextCardIndex >= 0 && _nextCardIndex<52);
return _cards[_nextCardIndex++];
}//end dealOneCard
//================================================ shuffle
// Action : Shuffles Deck.
// Returns : none.
void Deck::shuffle() {
// Shuffle by exchanging each element randomly
for (int i=0; i<52; i++) {
int randnum = rand() % 52;
swap(_cards[i], _cards[randnum]);
}
_nextCardIndex = 0;
}//end shuffle
|