Lab #10: Project 3 Progress Here are some suggested steps that we can help you with in lab. Feel free, though, to substitute other parts of the project. 1. Generate some test cases for your project solution. You may use the 'checkers' program now available on the CS61B accounts: the command is checkers OPTIONS (no "java" in front) where the OPTIONS are as specified for the assignment. 2. If you haven't already done so, copy the new subdirectory ~cs61b/hw/proj3/eg into your project 3 directory. Compile the PingPong class, set up two instances of it (possibly on two different terminals), and get them to communicate. (All terminals in the same lab actually connect to the same machine, so you can use 'localhost' as the host. You might try logging in to another machine---such as nova, pulsar, or quasar---and see whether you can set up communication between two different machines. 3. Create a new program, Chat.java, by copying PingPong.java and modifying it so that instead of the program constructing artificial messages, it reads lines from the terminal and sends those to the other program. Make a program hang up when you type "quit" to it (alone on a line). You can adopt the code in the eg subdirectory to the implementation of RemotePlayer (or whatever you decide to put in its place, if you don't like our program structure). 4. Implement the Move class. You needn't bother implementing all the create methods. If you'd prefer, just implement the ones you end up using. However, do add one method: static Move parseMove (String move) { ... } that converts the String form of move (as typed by the user or sent in a message) into the appropriate Move object. 5. Implement enough of Checkerboard that makeMove works (the comment indicates that makeMove can assume that the move is legal). 6. The skeleton suggests having legalMoves return an iterator. Another possibility (which you might find easier) is to have it return the list of Moves, instead. To start with, try getting it to give you a list or iterator of legal Moves for the side that is to move, ignoring jumps (the real rules of checkers require that legalMoves give you ONLY jumps if some jump is possible). (I have added a couple of arrays to ~cs61b/hw/proj3/game/Move.java that give the numbers of all squares that are within one move or within one jump of a given square. Feel free to use them, if you find them convenient.)