COMP 303 Software Development - Fall 2011: Milestone 1
Due: 18:00, Wednesday, October 12, 2011
Requirements
- Import the project stub, reformat it in your agreed upon group programming style, and check it into your group svn directory.
- Now, design and implement code to provide a working game. You should include the following basic features:
- Invocation should be as implied by the command line parameters described in the stub code. You may add new options, but not remove options.
- Board configurations can be specified and read in from a given (or default)
Layout/*
file. Your code should work for any provided layout of tiles (you can assume the layout file itself is well-formed). Note that your code will will be tested with layouts other than the ones provided in the project stub.
- You can graphically present the initial board state, and update the presentation as the game is played. Your GUI design and use should result in a responsive and intuitive interface.
- The player can quit or start a new game at any point. You do not need to implement the hint button for this milestone.
- You can (using appropriate API calls) distinguish tiles which are on the board from ones eliminated, and within the former you can distinguish between exposed tiles and unexposed tiles.
- The player can play the game. A tile can be selected by clicking anywhere on the exposed surface of the tile, and a matching pair of selected tiles is removed as soon as the second tile is selected. The state of being selected is visible to the player. Note that you must ensure rational behaviour if the user does not act as expected (clicks on an unexposed tile, etc.).
- An empty board must be detected, and result in the game declaring a win state.
- A deadlocked board (no matches left but board not empty) must be detected, and result in the game declaring a lose state.
- Reaching win or lose must be visually apparent to the player. No user action should be possible after winning or losing other than to quit or start a new game.
- All code must be well documented with javadoc.
- You must incorporate (extensive) unit testing into your project. All important game behaviour and all significant methods should have associated unit tests. All tests must be linked from a class named
Milestone1Test.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.
- 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.
- A 1--2 page document describing your design. This should include components:
- a Class diagram showing the major classes and their relationships.
- a sequence diagram illustrating control flow when a user selects a pair of matching, exposed tiles and these tiles are removed from game-play without terminating the game.
- a brief description of the specific contributions of each group member.
Evaluation
This milestone is worth 30% of the project component of your course grade. Since it is also the foundation on which you will build in the rest of the semester, it is important that this milestone is done very well and you establish equitable and functional group dynamics. Grading will take the following into account:
- Code is well documented, clear and uniformly structured.
- Code provides the functionality listed above.
- 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).
- Code is well-designed following the principles discussed in class.
- Unit tests provide extensive and relevant coverage of potential bugs and problems.
- 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.