Choice #1: Game

Create a computer game. This can be entirely text based, or you can do some graphics with graphics.py or images.py if you like. No graphics are required or necessary, though; it's up to you whether you'd rather place more effort in the logic of a text-based game, or in the challenges of implementing graphics.

The choices for games are endless. A few suggestions to get you started are Bagels, 3D Tic-Tac-Toe, Dots and Boxes, Battleship, and Go Fish, to name a few.

Choice #2: A graphical simulation

One of the things computers are good at is simulation of systems that evolve over time. Consider, for example, a computer model of the solar system. You can give the computer the initial positions, masses, and velocities of the largest objects in the solar system, plus a computational mechanism for simulating the effects of Newton's law of gravitation. Then you can set the system running, and your solar system will go through its motions. You could then try adding a comet with a mouse click or two, and watch how the comet's orbit is perturbed by close encounters with planets or asteroids. If the simulation takes relevant physical laws into account, the evolution of the system will be a good representation of the workings of the real solar system.

If you choose this project, you will simulate some time-dependent system that can be represented effectively in a rectangular display. You could show a top view of the solar system, or a side view of an aquarium, or a landscape with rain, clouds, plants, and birds. Your system will need to be animated, and there will need to be a diverse enough collection of elements to your system that the objects will have interactions of some kind. Planets, for example, interact gravitationally, big fish eat little fish, and raindrops cause plants to grow.

Your simulation may include pretty much any features you can cook up, but its minimal features must include:

Choice #3: Your own idea

Would you like to apply what you're learning about computing to something in another discipline? Perhaps you want to do some kind of modeling or analysis of data; perhaps you want to do something artistic. Talk to me.

Thoughts on grading

I will grade the projects based on the following factors, in the following order:

  1. How cleanly the program runs: is it bug free? Does it crash?
  2. Complexity: a project that involves complex ideas or implementations is clearly cooler than a simple one.
  3. Style: how cleanly the program is written and how easy it is to read.

It is perfectly ok to pick an easy goal in order to achieve. If you're new to this, Bagels is a fine choice. For people who want to push a little further, Battleship tends to work well (you do need two-dimensional arrays, but these are easy to do). For people with more advanced experience, the sky is the limit. Indulge yourself. But submit something new. Don't submit to me code which you have written in the past.

This is your chance to show some creativity. Have fun!