Computer Science 252
Problem Solving with Java

Fall 2014, The College of Saint Rose

Lab 8: Final Project
Proposal Due: 11:59 PM, Monday, November 10, 2014
Design Due: 11:59 PM, Monday, November 17, 2014
Program Due: 4:00 PM, Monday, December 8, 2014

This lab serves as a final programming project for the course. You are to propose, design, and implement a program that is interesting to you to demonstrate what you have learned this semester. You have a great deal of freedom in choosing what to program for this project. However, it must be an effective demonstration of your skills. More details can be found below.

This project will count for 150 points, about twice as much as a typical lab. See the "Grading" section for details.

Ground Rules

You may work individually or in a group of 2 or 3 on this program. While you may ask for help from your instructor or from the tutors in the Academic Support Center, that help will be more limited than for regular lab assignments. Additionally, any help you receive must be clearly documented in the comment at the top of your program (i.e., who helped you and exactly what that help was). If you work in a group, you will be required to include a detailed breakdown of who was responsible for which parts of your design and implementation. Group projects will earn a single grade, except in the rare situation where it becomes clear that a group member has not contributed significantly to the project. Also, the scope of the project is expected to be larger if you are working in a group.

Requirements

You may find it difficult to estimate the programming effort that will be required for programs you are considering. Please discuss ideas with with me before going too far.

Your project should showcase many of the programming skills you have worked on this semester. Projects of an appropriate scope will very likely include several of the major ideas and constructs we have seen this semester (graphics primitives, mouse/keyboard event handling, custom classes, active objects, Swing GUIs, recursive structures and methods, ArrayLists/arrays) as well as most of what you knew coming in (conditionals, loops, random numbers, files, methods). Using the material covered late in the semester is encouraged, and will likely make for a more fun and interesting project, but this is not a requirement. You may also make use of Java constructs and parts of the Java API that we have not used this semester, but check first.

There are two preliminary items to submit for this project.

By 11:59 PM, Monday, November 10, 2014, submit a written proposal (in SubmissionBox under "FinalProposal" or in hard copy), a few paragraphs long, describing your intended project. Clearly state what your program should do and which programming constructs you expect to use to complete your project. Please submit earlier if you can, so I am not overwhelmed with submissions at the deadline. I will make every effort to read these and give you feedback immediately. Once your proposal is accepted, your grade for the functionality portion of the project will be based on how well your submitted program matches what you proposed.

By 11:59 PM, Monday, November 17, 2014, you are to submit (in SubmissionBox under "FinalDesign" or in hard copy) a detailed design of your program, similar to those required for some of the lab assignments this semester. The design should list all of the classes that will make up your program, clearly indicating the purpose of each and if it is a "special" class like a WindowController or an ActiveObject. Include a list of the major instance variables you will use in each class and the methods you will need to implement. For each method, clearly indicate its parameters and return type and give a brief description of what the method will do and how it will do it. If any of your classes will involve the layout of graphical objects on the canvas, include drawings labelled with important coordinates and dimensions.

Some Ideas

For a course such as this, where we deal with graphics and event driven programming for so much of the semester, final projects are often video games, but they do not have to be. Along those lines, the following are games that have been successfully implemented using Objectdraw graphics and/or Java Swing components.

You could also do a greatly enhanced version of a game we used as an example or implemented in a lab earlier this semester such as Pong, Breakout, or Furious Fowl. Again, there is no requirement that your project must be a video game. Even if it is, do not limit yourself to the above list by any means. Have a look at your favorite list of old Atari games or check for games in your favorite app store for lots of ideas.

Have fun and good luck!

Submitting Your Work

Before 4:00 PM, Monday, December 8, 2014, submit your lab for grading. There are three things you need to do to complete the submission: (i) upload a copy of your Java program (a .7z or .zip file containing your project directory) using Submission Box under assignment "Final", (ii) print a copy of your program and hand it to your instructor, and (iii) demonstrate the execution of your program for your instructor (2 business day grace period for demos).

Don't forget to check your programs for compliance with the Style Guide for CSC 252 Programs

Grading

This assignment is worth 150 points, which are distributed as follows:

> FeatureValueScore
Proposal (10 points)
Proposal completeness 10
Written Design (30 points)
Major constructs and their purposes specified 4
Major classes/variables specified 6
Method signatures 10
Detailed method descriptions 10
Program Design, Efficiency, Style (50 points)
Appropriate comments 10
Good variable names 5
Appropriate variable declarations 6
Good use of constants 6
Appropriate formatting 3
Good overall design (classes and methods) 10
Appropriate use of language constructs 5
Efficiency (e.g., not reconstructing objects unnecessarily) 5
Program Correctness (60 points)
Determined by Grading Contracts

Total

150