COMP 303 Software Development - Fall 2011: Milestone 2


Due: 18:00, Monday, November 14, 2011
In this milestone you will add significant usability features to your game code. This milestone assumes you have a satisfactory code-base from your efforts on the previous milestone (not all the previously required features need to be present, but basic functionality is necessary). If you need help improving your code to reach an appropriate level, please see a TA or the instructor.

Requirements

  1. Game boards are currently created randomly, but this potentially results in boards that cannot be solved. Modify your game generation so only boards for which a solution exists are generated. Your design should allow for randomized generation of as wide a variety of initial boards as possible, and should work for (almost) any layout.
  2. Add the ability to save and restore the current game state to the file-system. For this you need to add both the functionality to save/restore, as well as an appropriate user interface. Your design must be based on serialization.
  3. Solitaire Mahjong can be made competitive by adding timing features, so players can compare their ability to complete the game in a given time limit:
  4. Add a hint mode:
  5. Add an undo/redo facility:
  6. Add a high-score list:
  7. All code must be well documented, including javadoc and internal comments as appropriate.
  8. You must incorporate (extensive) unit testing into your project. All important game behaviour and all significant methods should have associated unit tests based on JUnit. All tests must be linked from a class named Milestone2Test.java to make it easy to run all of them as a single suite.

What to hand in

You should hand in one archive-file and one document per group. Recall we are using moodle to handle the submissions.
  1. An exported project in a zip or tar.gz file. This must include all files necessary to build and run your project, as well as all javadoc output. Please include your group number in the archive filename.
  2. A 1--2 page document describing your design. This should include components:
    1. a textual description of your strategy for building only solveable boards. Does your strategy allow you to generate all possible solveable boards (at least for, say, the turtle layout)? Give a convincing argument either way.
    2. an application state-diagram. There are now many buttons and options changing the state of your application. Show a state-diagram for your application (as a whole), adding states as appropriate with transitions to indicate how the state changes for each possible user interface action.
    3. a brief description of the specific contributions of each group member.
    4. Note: All documents should be provided using only common, OS-neutral format(s): pdf or ASCII text for textual documents, and pdf, png, gif, or jpg for images.

Evaluation

This milestone is worth 30% of the project component of your course grade. Grading will take the following into account:
  1. Code is well documented, clear and uniformly structured.
  2. Code provides the functionality listed above.
  3. Code is correct and does not exhibit bugs or other failures. Note we may apply tests of our devising (ie outside of your unit tests).
  4. Code is well-designed following the principles discussed in class.
  5. Unit tests provide extensive and relevant coverage of potential bugs and problems.
  6. The document supplied includes all components, correctly and cleanly expressed.
Note that all team members are expected to contribute in some fashion to all milestones. Your contribution to each milestone may be somewhat uneven, but your final project grade will be scaled according to your overall contribution throughout all the milestones.