CSC 427: Data Structures and Algorithm Analysis
Fall 2004
HW2: Classes and Vectors
For this assignment, you will be using the Card and DeckOfCards classes (defined in Cards.h and Cards.cpp) to simulate the card game War. In
this game, a deck of cards is shuffled and cards are alternately dealt into two piles until the deck is
exhausted. One round of play consists of each player drawing from the top of his/her "active" pile of cards.
The player whose card has the higher rank wins the round and consequently places both drawn cards in a separate
"conquest" pile for that player. When a tie occurs, e.g., two kings, a battle between the two players ensues,
where the players lay down cards in multiples of three until a winner is declared. In practice, the outcome of
games is often determined by the players' fortunes in these battles. For example, the only way to capture the
other player's aces is in battles. When a player runs out of cards in his/her active pile, that player's
conquest pile is shuffled and then serves as the active pile from that point on. If the player has no cards in
either pile, then that player loses.
Note: you may want to define a PileOfCards class to encapsulate the functionality of card piles in
this game.
Simplified Version: Tie = Random (for 80% credit)
It is strongly recommended that you first implement your War game so that ties are handled in a simple way. When
a tie occurs, randomly award the cards to one of the players. This will simplify the game and make it easier to
test and debug the other aspects of the game. The output of your simulated game should look something like the
following (feel free to creatively embellish your output).
1) Player 1: 4C Player 2: TH Player 2 wins.
2) Player 1: 2D Player 2: AH Player 2 wins.
3) Player 1: JC Player 2: JS Tie -- Player 2 wins.
4) Player 1: 9H Player 2: 3D Player 1 wins.
.
.
.
548) Player 1: 5H Player 2: AS Player 2 wins.
Player 1 is out of cards. Player 2 wins!
Full Version: Tie = Battle (for 100% credit)
In the full version of War, a battle occurs whenever the cards drawn by the two players have equal rank. A
battle consists of each player drawing three cards from the top of his/her active pile and placing them in a
battle pile. The cards on the tops of these battle piles are compared to determine the winner, who takes the
contents of both battle piles and adds them to his/her conquest pile. If the cards on the top of the battle
piles have the same rank again, three more cards are drawn and the battle continues until a winner is determined.
For example,
1) Player 1: 4C Player 2: TH Player 2 wins.
2) Player 1: 2D Player 2: AH Player 2 wins.
3) Player 1: JC Player 2: JS Tie -- a battle ensues...
Player 1: 9H Player 2: 3D I
Player 1: QH Player 2: AD DECLARE
Player 1: 5D Player 2: 3H WAR -- Player 1 wins.
4) Player 1: AC Player 2: KH Player 1 wins.
.
.
.
486) Player 1: 8D Player 2: QS Player 2 wins.
Player 1 is out of cards. Player 2 wins!
If a player is unable to complete a battle due to lack of cards, then he/she forfeits the battle and loses the
game. For example, suppose a tie occurs and a battle ensues but Player 2 only has 2 cards in his/her active
pile. If Player 2's conquest pile is nonempty, then that pile is shuffled and becomes his/her active deck and
battle continues. If the conquest deck is empty, however, then Player 2 would forfeit the battle and lose the
game.