Calvin seal CS 108: Introduction to Computing
Spring 2006

Final Project

The final project counts for 10% of your grade for this course; it pays to take it very seriously. There's no sit-down final exam for this course; this final project is your final exam.

The Project

Write a Java application that either implements a turn-based game or a sophisticated simulation.

The Requirements

General

  • A game must be turned based; no realtime games or animations.
  • The game must be more sophisticated than tic-tack-toe; connect-four, minesweeper, and hangman are sufficiently sophisticated. A Magic 8-ball is not. Ask to be sure.
  • Some games are not easily adapted to my requirements. Mad Libs is one such (forbidden) game.
  • A simulation must work in discrete steps controlled by the user.
  • Tell me what game you are doing as soon as possible.

Coding

  • Put all of your code in a package named edu.calvin.userid.finalproject, where userid is your Calvin-issued user name.
  • Name your driver GameGUIDriver or SimulationGUIDriver (as appropriate).
  • Follow all of the code conventions throughout the semester---Javadoc comments, naming of variables, naming of classes, formatting of the code, etc., etc., etc. This will be graded strictly, perhaps more so than for the labs and projects.
  • You must use the model-view-controller pattern to implement your game.
  • For maximum credit, you must use inheritance or a list/array in at least one significant way in the model. Don't force inheritance; you're more likely to need a list or array.

Model-View-Controller

  • Your model must be fully unit tested with JUnit.
  • You must implement at least one GUI view (without JOptionPanes) for your application.
  • Your model must be fully unit tested with JUnit.

Getting Help

I am willing to help you work out your final project, but the later you wait for this help, the less you'll get.

Help with the GUI from others is acceptable (to a point); include the names of the people, books, and websites which helped you with your GUI in the comment of the GUI code.

Help with the model from anyone else but me is forbidden.

The project is due by 5pm on Wednesday, May 17 (the last day of exams).

You're always free to turn in the final as soon as you like.

Grading

Your grade for this final project is "by contract". How far you get through this list of contract items determines your grade. It is not worthwhile working on later contract items if the earlier ones are not finished.

This final project is worth 10% of the grade you get for the whole course. An F on this project earns you 0%; a C earns you 5%; an A earns you 10%. All other letter grades are scaled accordingly.

Contract Items

Grade

  • You have a sufficient amount of code.
  • No static methods.
  • Code compiles.
D
  • Implement a model-view-controller.
  • Fully unit-tested model.
  • Implement a GUI.
  • Some inheritance.
C
  • Complete javadoc documentation of the code.
  • Good looking GUI.
B
  • Inheritance in the model or use an array or list.
A

Grades will be modified plus/minus depending on how well you've written your code and how well the application works.

To reiterate the warning given above: make sure you've secured a particular grade before working on the next grade. That is, a good looking GUI does you absolutely no good if the model isn't fully unit-tested; if your model is not fully unit-tested, you'll get some form of a D!

Reference Material & Other Help

Office Hours

I will have office hours during exam week. I will answer questions about your final projects and other assignments during these times only so that everyone has a fair opportunity to ask me questions.

Administrative questions can be asked at any time.

You can also email me at any time.

SwingSet2

The SwingSet2 example that I demoed in class can be found in /usr/local/jdk1.5.0_04/demo/jfc/SwingSet2/ on the GLUW-lab machines. You can run the demo with this command:

java -jar /usr/local/jdk1.5.0_04/demo/jfc/SwingSet2/SwingSet2.jar

The source code can be found in /usr/local/jdk1.5.0_04/demo/jfc/SwingSet2/src/.

If you install the JDK on your machine, you should be able to find this example in a similar folder.

Lecture Code

All of the code from lecture (including the game code) is available /home/cs/108/game-src/ on the GLUWlab machines; import the code. (My CVS repository does not work.)

Links

  • Java API
  • Java Almanac
  • JGoodies (I'm unsure how useful this site really is; it looks like there might be a few useful things.)
  • RelativeLayout manager (This is a great layout manager, so if you find you want more control than what the standard layouts provide, this might be your answer. It'll take some time, though, getting this set up and working.)

Turning the Project In

The project is due by 5pm on Wednesday, May 17 (the last day of exams).

If your GUI uses any images, please put them in a folder Images/final in your Java project in Eclipse. In your code, you can refer to these files from that folder (e.g., "Images/final/picture.gif"). The handin program will automatically include this folder in your tarball if it exists.

Hand your code as final.