Due: 2:00 PM, Wednesday, 9/29/10
This assignment builds on Program 3. Your system should be organized as follows:
A package named games. In the package are these types (a type is a class or interface):
A class named Game. This is an abstract class that can be extended to create classes for specific games that are played on a square board, like checkers, chess, and tic-tac-toe. The Game class has one instance variable that is an object in the Board class. Its methods should be public, but its instance of Board should be default. If it has any other instance variables, they should be private.
An interface named Moves. It specifies the methods that are to be implemented by the Board class.
A class named Board that
implements Moves. You should be able to use the Board class from
the previous assignment with some changes. The Board class and its
methods are public, but its variables should be private. In
particular, it has an nXn array that represents the game board, and
it must be private. The main modifications that you have to make
are to allow game pieces of different kinds. For example, in
checkers, pieces can be red or black, and they can be regular
checkers pieces or kings, giving a total of four kinds of pieces.
(You don't need to know what these mean to do this assignment.)
Each kind of piece is identified by a unique code. Squares on the
game board can be unoccupied or occupied by a single piece of some
kind. Use the following codes to indicate the occupancy of a
square:
0: unoccupied
1: red checker
2: black checker
3:
red king
4: black king
A class named Checkers, which must be a direct subclass of Game. The Checkers class and its methods should be public, but its variables should be private.
A class named TestCheckers containing a main program that thoroughly tests the Checkers and Board classes. TestCheckers should not be in the package games.
The classes Game, Board and Checkers must satisfy the interfaces given below; that is, you are not free to change the name, type, or behavior of the given methods.
Your grade will be based on how well you design and implement the code (including whether you followed the directions in 1.1., 1.2, 1.3, 1.4, and 2. above), on good programming practices, and on thorough testing. Coding guidelines for Java programs are posted here.
Class Game describes objects that implement a game on an nXn game board.
|
Game |
|
Game(int n) |
|
Game(final Game agame) |
|
abstract void display() |
The first constructor creates an instance variable of type Board by using the constructor Board(n).
The second constructor is a copy constructor.
Interface Moves lists the access and mutator methods for the game board.
|
Moves |
|
void remove(int row, int col) |
|
void place(int piece, int row, int col) |
|
int show(int row, int col) |
Class Board contains the nXn game board and its access and mutator methods.
|
Board |
|
Board(int n) |
|
Board(final Board oldboard) |
|
void remove(int row, int col) |
|
void place(int piece, int row, int col) |
|
int show(int row, int col) |
The first constructor creates an instance of an nXn board with all squares empty.
The second constructor is a copy constructor.
The remove(int row, int col) method will remove the piece from the square (row,col).
The place(int piece, int row, int col) method will store the value of piece in the square (row,col).
The show(int row, int col) method will return the value stored in the square (row,col).
Class Checkers is an extension of Game that implements a checkers game.
|
Checkers |
|
Checkers() |
|
Checkers(final Checkers game) |
|
void remove(int row, int col) |
|
void place(int piece, int row, int col) |
|
int show(int row, int col) |
|
void move(int fromrow, int fromcol, int torow, int tocol) |
|
void display() |
The first constructor initializes the instance of Board that it inherits from Game so that the board is set up for the start of a checkers game. (If you don't know checkers, I can show you the starting positions of a game.)
The second constructor is a copy constructor.
The remove(int row, int col) method calls the remove method of Board to remove the piece from square (row,col) in its Board instance. Remember: Checkers objects can't directly remove a piece from the board because the 8X8 array in the Board object is private.
The place(int piece, int row, int col) method calls the place method from Board to place the piece on the board.
The show(int row, int col) method calls the show method from Board to show the contents of square (row,col).
The move(int fromrow, int fromcol, int torow, int tocol) method will move the piece from (fromrow,fromcol) to (torow,tocol).
The display() method will output a picture of the board. As before, it can be very simple, but now it should indicate whether a square is empty or contains a red or black checker or king.
The main method in TestCheckers should create several instances of Checkers and demonstrate the functionality of the methods in the Checkers class. This time, error handling does not need to be considered.
Add comment documentation to your program (all four classes) and use javadoc to extract the documentation into an HTML file. Include a javadoc comment for each class and each method. The class comment should include your name and the date (use the @author tag). Method comments should briefly describe the purpose of the method, its arguments, and what, if anything, it returns (using @param and @return as appropriate).
The physical location of the javadoc comments is critical. A class comment must immediately precede the line containing the keyword class, and method comments must immediately precede the method.
When you have commented your source files, run javadoc to create the .html files and view them in a browser of your choice.
What to submit:
Turn in a hardcopy printout of your java source files TestCheckers.java, Game.java, Board.java, Checkers.java, and Moves.java, and a printout of your test runs. Do not give me a copy of the javadoc.html files.
All Java programs will be submitted by copying (or ftping) them to a specially designated directory in AFS. Each person in the class has a subdirectory which has the same name as your login in
/afs/cu/class/cs242/fa10
Within this individual directory, create a subdirectory named p4. Copy only the source files into this directory, not class files or javadoc files. So, for example, if your login name was smithjd then the five files TestCheckers.java, Game.java, Board.java, Checkers.java, and Moves.java should be copied to /afs/cu/class/cs242/fa10/smithjd/p4. These directories have permissions set so that no one other than yourself and Prof. Lynch can read the files. You may, of course, use whatever operating system and compiler you wish to develop your code, but the version you turn in, both hardcopy and the files submitted to AFS, must compile and run under JDK installed in the Clarkson ITL (our lab room). In particular, it should run with your files packaged according to the specifications in this assignment: Game.java, Board.java, Checkers.java, and Moves.java in a folder named games, and TestCheckers.java in some other folder.
Your grade on the program will be based on:
Correct execution. The program must follow all the specifications above. The hardcopy of your program's execution should clearly demonstrate that it does. You may want to turn in hardcopy of more than one execution.
Correct implementation. The program must follow all the design requirements above, in particular the interfaces of the classes and their access attributes, and the packaging.
Readability of the code: commented and well-structured, so that it is clear what the code is doing. Use an accepted programming style. The style of the text is fine, or you can follow the Code Conventions. Whatever you do, be consistent.
Appearance of the output. At this point, we haven't covered any of the ways to generate really nice looking output, but the display method should produce a picture of the board with all the rows and columns lined up nicely, and any error messages should be well-formatted and easy to read.
Timely submission of your program. All hardcopy must be turned in by the deadline. Late programs will not be accepted. Printouts submitted electronically will be ignored.