©2010 Felleisen, Proulx, et. al.
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 implementation of your project by Monday, December 6th. The final version is due on Wednesday, December 8th.
The project presentation will be done in the lab in 212 WVH during the regular lecture times on Monday, December 6th, and Wednesday, December 8th.
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.
You do not need any deep understanding of music or musical creativity to make this a successful project. Ask for help if you need it. Look at the sample applets on the SoundLib web page. The web site includes a couple of samples of the kind of musical effect one can create and the kind or user interactions you can program.
The simplest option is to add sound effects to the game similar to those you have designed before. Make a noise when a brick falls, the frog falls into the river, the anti-UFO shot hits the UFO. Play a song at the end as you announce the score.
Another option is to combine music and visual display and allow the user to interact with the music in some way. Show the tune that is playing, give the user an option to combine several tunes and play them in harmony, or to choose a different instrument for each tune and play an orchestra. Or play one tune with a proper delay to play a musical canon.
Yet another option is to engage the user as a composer who will choose pitches to play instruments to play, through some sensible interaction. The piano keyboard in the TunesDemo is one option. But, do add the black keys too :). Or teach the user how to play a guitar by showing a tune and the chords to play and asking the user to play along.
We want to make sure that you focus above all on the model part of the program. This means the behavior of the parts of the game, the proper design of the classes and methods that implement this behavior, and, of course, proper testing of all components.
The requirements for the view (the graphical display) are secondary — we expect a working game, but it does not have to be flashy, we are happier if it is well designed.
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.
Finally, you will give a 15 minute presentation of your project during the last two days of classes. You can present even if your project is not complete.
You will present your project (both partners together) during the lectures on Monday, December 6th and on Wednesday, December 8th. Both times we will meet in the lab in 212 WVH. 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.
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.