CPE 103 Lab Activity - Chapter 5
Accordion Solitaire is a simple card game played with a standard
52-card deck.
To start, the entire deck of 52 cards is shuffled and dealt on the
table in a single row.
To make a move, a card can be placed on top of the card immediately
to its left, or a card three spots to the left, if the cards match
in suit or rank.
When a card is moved, any cards it previously
covered are moved along with it. Once a card is covered, it cannot
be uncovered.
When there are no valid moves left, the player's score is the number
of cards remaining on the table.
For example, here is an initial table configuration. The cards
are displayed in the first row, and the second row contains labels
for the card positions.
HK H7 SQ S5 D7 CT S4 C3 S6 HQ S9 H8 CQ C1 D8 HT S3 H5 H1 S2 D3
H3 D2 H6 CJ D5 ST D1 H9 DT C9 DQ CK S7 C6 C5 H2 C7 H4 SK DJ SJ D9
C4 C8 C2 S8 DK D6 S1 D4 HJ
a b c d e f g h
i j k l m n o p
q r s t u v w x
y z A B C D E F
G H I J K L M N
O P Q R S T U V
W X Y Z
A player move is designated with a 2-character string. The
first character is the card position, and the second character is
either '1' or '3' for the number of spots to move.
Thus, from the starting arrangement above, b1, s1, g3, v1, d1, T1
would each be an example of a valid move. d3 is an invalid
move. (Incorrectly formatted moves are also invalid, such as
1d.)
Part 1
Create an Accordion class. Write a method that finds all
the valid moves in a given table configuration.
The method signature is:
public String findValidMoves(Card[]
table, int tableLength)
The Card class is provided in Enums
Lab. The instructor solved
the entire lab without altering the Card class, but you may
modify it if you wish. However, if you modify it, you must
write JUnit tests for it.
The return value is a string containing the valid 2-character moves
separated by one blank space.
For example, given this table:
HK H7 SQ SK
the method could return the string "b1 d1 d3"
You must write a JUnit test of your method.
Don't use Lists in your solution.
Part 2
Write a method for the Accordion class that simulates
playing a complete game.
The method signature is:
public Card[] play(Card[] table, String
moveSequence)
table is an array of length 1 - 52 containing
some arrangement of Cards.
moveSequence is a sequence of moves in the order
they are to be played, separated by one blank space. Invalid
moves should be ignored.
The method returns the cards left on the table after all the moves
are made. The length of the returned array must equal the
number of cards.
You must write a JUnit test of your method.
Don't use Lists in your solution.
You may use or modify the code from the Card and Deck classes in the
Enums
Lab.
Tip: System.arraycopy() is your friend.
Submission
Submit printouts of all your source code files, your JUnit tests,
and a sample test execution.