The final project for this course is a program of your own design. This project should demonstrate a wide range of programming constructs and concepts from the course, including good commenting and design, including the use of methods to abstract the actions in your program. In addition to these features, your project will be graded for its complexity. However, be sure to build your programs incrementally, since a program must work to receive a good grade. The creativity and artistry of your final product will also be evaluated in the determination of your final grade.
Please submit a detailed proposal for your final project. This should be at least a few paragraphs. You may want to use some high level pseudocode for how your main method will work, and specify the methods you intend to create and what they do. The proposal should begin with a high level description of the program, and then break the problem down into parts, specifying the functionality in each part, and how the parts interact with one another.Projects may be worked on individually or in groups of two. Proposals for pairs must be substantially more ambitious than individual projects, and should clearly specify how the workload will be divided among both students.
Composite Photo Generator
This program would take a base image and create a new image that is composed of many smaller images, arranged so as to give the appearance of the original base image. One good example of this is at the end of the other hall in Olin, the Mona-Lisa generated from dice. You may have seen other images that are similar to this: a picture of earth created with hundreds of small pictures of animals, a picture of Einstein created with numerous small black and white photos of scientists, etc. Here, you would make a program that would take in a base photo and a set of smaller images, and use those to create a composite representation of the base photo using the smaller images as building blocks.
As some of you have discovered, you can make a simple animation by repeatedly displaying many MyPicture objects (or with a single such object that gets modified between displays). Use techniques from class to create a detailed image as in the first project, with animation. For example, you might create a cityscape, in which the sun moves through an arc in the sky, the sky brightens and then darkens as the sun rises and sets, lights turn on in windows at various times in the evening, and clouds sail across the sky, billowing, expanding, and contracting smoothly. Alternatively you might animate a plant that grows organically and eventually flowers. Or an elaborate dog-fight between monkey pirates in space ships.
By creating methods for overlaying pictures, you can also create a series of still pictures as jpegs that can then be "played" by creating a QuickTime movie from the set of stills.
Turn Based Games
A number of games where players take turns and are not timed can be created using the tools and techniques we have been working with. For example, you might create a battleship game. Or hangman. Or monopoly. For any of these games, you should display the board graphically after each move.
The class that we have designed for a POP3 client could be combined with a user interface and enhanced to build a full email client application.
A kaleidoscope program would take one or more images, and automatically use them to create a geometric collage of the sort often seen when looking through a kaleidoscope. That is, random fragments of each image would be thrown together in a highly symmetric way to form a composite image which would be itself highly symmetric, and yet be composed of many small components, each of which would come from one of the original images.
You are welcome to also propose other ideas; Fractal generators, physical or evolutionary simulations, or anything else you can think of. However, the complexity and depth of your project must be comparable those described above.