2010 March 9 / j d a v i s @ c a r l e t o n . e d u
Most of the rest of this course will be occupied by the final project. It must be handed in electronically by Saturday 2010 March 13 at 6:00PM. You must complete it with one partner. The goal of the project is for you to write a program of significant size and complexity in an object-oriented style. The project should represent at least twice as much work as a typical assignment, and it must involve at least one subclass of your own creation, that demonstrates that you understand subclassing. Most students will use the Bopa graphics module, but this is not required. The kind of program is up to you, but here are a couple of suggestions.
Games are fun. Here is a Tic Tac Toe game that I wrote. You might try a similar game such as Connect Four, with some degree of artificial intelligence. You might try a falling blocks game such as Tetris or Dr. Mario. You might try a puzzle game such as Sokoban. You could even do an arcade game such as Asteroids. If you do choose to write a game, keep in mind that you have only two weeks. A game with huge amounts of art work or extremely complicated articifical intelligence is not feasible.
Instead of a game, you might consider a scientific simulation. In class and in the textbook we have seen simulations of gravity, zombies, and predator-prey relations. You could improve on the zombie simulation by adding obstacles, differently shaped arenas, a doctor who cures zombies, cooperation or competition among people or among zombies, etc. You could simulate something else entirely. For example, if you have 100 Carleton students with taking random classes in various buildings, then what does class change time look like? If you have a bunch of oxygen and hydrogen atoms floating around, then how do they react?
If neither of these ideas interests you, then come up with your own plan and run it by me. It could be related to our earlier assignments. For example, maybe you'd like to pursue cryptography. Can you crack the substitution cipher? Can you implement more secure cryptosystems? Or would you like to make a really interactive digital elevation model, closer to Google Earth?
Your final project should present a high level of polish. Test your program thoroughly, to make sure that all of the errors are worked out and the user can't derail it by doing something unexpected.
Your code is expected to be clean and in good style. Because many students had difficulty using good style on Exam 2, I'll reiterate the key points here.
if __name__ == "__main__":. For then the demo will run if the user executes the module directly, but will not run if the user imports the module into another module.
importstatements should come at the top of the module. For then anyone looking at the program can immediately see what other modules it requires.
importstatements, function definitions, and class definitions (and comments).
readme.txtto be handed in with your project. I will read this file before grading your project; it's your big chance to influence how I view your project. Explain what your project was. Describe its major features. Tell me how to use your software. Tell me how your code is structured; for example, what classes are there, and what roles do they play? Where have you used subclassing (which is required, recall). What parts of the program were most difficult? Were there any features that you planned, but had to leave out due to time? What features would you add next, if you were to work more?
You and your partner hand in a single copy of your project electronically on the Courses file server, as usual. Inside your
hand-in folder make a folder
final to hold the project. Put all necessary files in that folder. If your folder is lacking some files, so that I cannot run your code, then your grade may suffer greatly. Do not put any other files in the folder, except for