©2010 Felleisen, Proulx, et. al.

12  Final Project

Project goals and logistics

The goal of this assignment is to give you the opportunity to use all the concepts we have learned in the design and implementation of a small project. The project will involve user interactions, but the core is the design of the functionality, following the design recipes, building abstractions, and using the existing libraries. Good design and a simple user interaction part is much more valuable than a flashy user interactions with poor design of the program that drives it.

You should finish the design and most of the implementation of your project by the morning of Thursday, June 24th. The project presentation will be done during the regular lecture time on Thursday, June 24th.

You can then use the lab time and the rest of Thursday to finish the project, incorporate the suggestions given during the project review, and submit the final version by 10:00 pm on Thursday, June 24th.

Project details

Choose one of the three options for the project. Choose the option you feel most competent to tackle, and that interests you the most.

Here is a brief overview of the three options:

  1. Interactive game with sound effects.

    Assignment: Design an interactive graphics-based game with sound effects and/or background music.

    The goal of this project is to explore the possibilities provided by the new isdraw library that allows you to add musical accompaniment to your interactive games.

    The focus is on the design of the game and on making sure the background music and the special effects integrate with the game actions. You do not need to have a serious musical background to tackle this project.

    The project web site for the isdraw library includes a couple of samples of the kind of musical effect one can create and provides explanation of how the sounds are added to the game behavior.

    Doing this project will give you a start on understanding how you can work with MIDI synthesizers from a Java program.

  2. Musical explorations.

    Assignment: Design a program that will allow the user to experiment with music, either learning about the notes, chords, instruments, musical structures, or musical instruments; or will allow the user to interactively compose music from several components or musical tunes.

    Choose this project if you have some understanding of music and feel that you would like to engage your musical creativity.

    The goal of this project is to give you a chance to explore how a computer program can be used in music composition, or in learning to understand music notation, musical instruments, etc.

  3. Algorithm visualization and animation.

    Assignment: Design a program that will allow the user to visualize and explore the behavior of an algorithm. Include sound effects, if possible.

    The goal of this project is to provide the user with the opportunity to explore the behavior of the selected algorithm, see the effect of every step of the algorithm.

    Choose this project if you think you would like to help the user to understand the details of how the algorithm you select behaves, and are not really interested in exploring musical effects in depth.

The project grade will cover the following:

The design document

One part of the credit for this assignment will be given for a design document that describes the data, the organization of the program, the key program components, and the design of tests. Imagine you want someone to keep improving your program — provide a road map that explains what your program does and how does it do it. This document should complement the Javadoc generated web pages. A separate document will give you a more detailed guidelines for what we expect.

The design of the program model

One part of the credit for this assignment is for the model part: the design of the behavior of the program apart from the user interfaces.

The user’s guide

The user of your program needs to know the rules of the game, how to run the algorithm animation, or what are the features of your musical exploration program. You need to create a user’s guide that will explain concisely what to expect of your program and how to interact with it.

The design of the user’s interactions

You will also get credit is for the user interactions (view) — grading both the design of the user views and the design of the program that drives it. A small bonus may be earned for exceptionally well designed display or interactions. It is better if the user interaction is simple, but is well designed and documented, than if a fancy GUI display is driven by a code that another programmer cannot understand and maintain.

Project presentation

You will present your project (both partners together) during the lecture on Thursday. Each partner should be able to describe any part of the code in the project, regardless of who wrote it, as we expect that both partners work on the project together. More information about the presentations will be provided shortly.

12.1  The Advice

The design part of each project typically takes the greatest amount of time. the more time you spend thinking things through, the easier it is to actually write the code.

Make sure you think the whole framework through before you start programming. Spend some time researching the Java libraries to see what tasks can be done using the existing tools. Write sample adapters to see how the existing class can be used in your setting.

Then design the key component by specifying their interfaces — the method headers, the interfaces that various classes must implement or use to get information from others.

For now, you have not learned about various tools and techniques to support such design process — other than class diagrams. Any description that you find helpful in clarifying the roles of the different classes and interfaces in your program is acceptable.

The design document you produce should include a brief user’s guide, give a general overview of the project organization as well as describe all data definitions and the key methods. The Javadocs supplement this with detailed information about the actual implementation.

Last modified: Thursday, June 17th, 2010 11:21:58am