Prog 4: Vexed

10/16 Added the error message shown in blue: Invalid move direction.  Please retry.

10/25 You may use a 1d or 2d array to store your boards.  The sample code I have provided assumes use of a 1d array, but you can change that part of it to use a 2d array without penalty.

10/30 Vector based approach (rather than recursion) to blanking out adjacent matching pieces, shown in purple.

Write an ASCII text version of the classic Palm game called Vexed.  There are ad-supported online versions (shown below), as well as Android and iOS versions, though they may be dated and buggy.

In our solution commands will be entered from the Terminal and not done graphically.  This should look like the following, and is explained more fully below:

Welcome to Vexed!   The objective is to place identical pieces next to each other, so that they vanish,    clearing the board completely within the indicated number of moves. On each move       enter the row, column, and direction (L or R) to move, in either upper or lower        case. You may also enter 'x' to exit the program, or 'r' to reset the current level.        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . . @ &     . . . | C   D | . . . . .     . . . | D   E | . . .         . . . | E   F | . . . &     @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9   1. Your move: c4r      Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . . @   &   . . . | C   D | . . . . .     . . . | D   E | . . .         . . . | E   F | . . . &     @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . . @       . . . | C   D | . . . . . &   . . . | D   E | . . .         . . . | E   F | . . . &     @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . . @       . . . | C   D | . . . . .     . . . | D   E | . . .     &   . . . | E   F | . . . &     @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . . @       . . . | C   D | . . . . .     . . . | D   E | . . .         . . . | E   F | . . . &   & @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9   2. Your move: c3r      Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .   @     . . . | C   D | . . . . .     . . . | D   E | . . .         . . . | E   F | . . . &   & @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9   3. Your move: c4r      Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .     @   . . . | C   D | . . . . .     . . . | D   E | . . .         . . . | E   F | . . . &   & @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .         . . . | C   D | . . . . . @   . . . | D   E | . . .         . . . | E   F | . . . &   & @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .         . . . | C   D | . . . . .     . . . | D   E | . . .     @   . . . | E   F | . . . &   & @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9   4. Your move: f5l      Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .         . . . | C   D | . . . . .     . . . | D   E | . . .     @   . . . | E   F | . . . & &   @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .         . . . | C   D | . . . . .     . . . | D   E | . . .         . . . | E   F | . . . & & @ @ . . . | F   G | . . . . & @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .         . . . | C   D | . . . . .     . . . | D   E | . . .         . . . | E   F | . . .     @ @ . . . | F   G | . . . .   @ . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 0 par 4       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .         . . . | C   D | . . . . .     . . . | D   E | . . .         . . . | E   F | . . .         . . . | F   G | . . . .     . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9    Congratulations!  On to the next level. Score: 4      Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .     &     . . | C   D | . . .     @     . . | D   E | . . .   & +     . . | E   F | . . .   @ %     . . | F   G | . . . @ % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9   1. Your move: d5l      Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .     &     . . | C   D | . . .   @       . . | D   E | . . .   & +     . . | E   F | . . .   @ %     . . | F   G | . . . @ % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .   @ &     . . | D   E | . . .   & +     . . | E   F | . . .   @ %     . . | F   G | . . . @ % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9   2. Your move: d4l      Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . . @   &     . . | D   E | . . .   & +     . . | E   F | . . .   @ %     . . | F   G | . . . @ % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .     &     . . | D   E | . . . @ & +     . . | E   F | . . .   @ %     . . | F   G | . . . @ % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .     &     . . | D   E | . . .   & +     . . | E   F | . . . @ @ %     . . | F   G | . . . @ % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .     &     . . | D   E | . . .   & +     . . | E   F | . . .     %     . . | F   G | . . .   % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .     &     . . | D   E | . . .     +     . . | E   F | . . .   & %     . . | F   G | . . .   % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9   3. Your move: e5r      Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .     &     . . | D   E | . . .       +   . . | E   F | . . .   & %     . . | F   G | . . .   % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .     &     . . | D   E | . . .           . . | E   F | . . .   & % +   . . | F   G | . . .   % +   + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .     &     . . | D   E | . . .           . . | E   F | . . .   & %     . . | F   G | . . .   % + + + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .           . . | D   E | . . .     &     . . | E   F | . . .   & %     . . | F   G | . . .   % + + + . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .           . . | D   E | . . .     &     . . | E   F | . . .   & %     . . | F   G | . . .   %       . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .           . . | D   E | . . .     &     . . | E   F | . . .   &       . . | F   G | . . .   % %     . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .           . . | D   E | . . .           . . | E   F | . . .   & &     . . | F   G | . . .   % %     . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .           . . | D   E | . . .           . . | E   F | . . .           . . | F   G | . . .   % %     . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9        Board 1 par 3       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . . . . . . . . | B   C | . . .           . . | C   D | . . .           . . | D   E | . . .           . . | E   F | . . .           . . | F   G | . . .           . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9    Congratulations!  On to the next level. Score: 7      Board 2 par 14       0 1 2 3 4 5 6 7 8 9       -----------------------   A | . . . . . . . . . . | A   B | . . . .     . . . . | B   C | . . .         . . . | C   D | . . ^   = #   ^ . . | D   E | . . #   . .   = . . | E   F | . . . #     = . . . | F   G | . . . .     . . . . | G   H | . . . . . . . . . . | H     -----------------------       0 1 2 3 4 5 6 7 8 9   1. Your move: 

You need to know the following concepts in order to write this program:

Classes and Objects in C++.  More specifically you need to know how to create a class that contains private data members, get() and set() member functions, a default constructor, and a fully qualified constructor (with all the initialization values).  You need to know how to declare an instance of a class, and how to create utility functions (e.g. displayBoard() for this program).

Notes:

SourceForge has a historic Palm Vexed site, along with source code. (Warning: write your own, don't use any of theirs. Moss is very picky about things like this...)  The bottom of this page has links to some starting code (vexed.cpp) as well as the data file boards.txt.

I suggest you write your program using the following steps.  

                       B.  Using a recursive "marking" algorithm.  

                       Keep repeating the above two steps (1. Move pieces downward; 2. Delete adjacent matching pieces) while there are changes to the board.

While not required this time around, for programs 5 and 6 we will likely implement a graphical version for program 5, and then for program 6 we will use linked lists to implement infinite undo (and perhaps also mouse-driven input).