Option 1: A game
Create a computer game. This can be entirely text based, or you can create a graphical user interface using
the turtle
module or the graphics
module. No graphics are required or necessary, though;
it’s up to you whether you’d rather put more effort into the logic of a text-based game,
or in the challenges of implementing interactive graphics.
Unless your game is quite complicated to implement, your project should incorporate
some level of computer intelligence. In some sense, the computer should play against you
or manage your game in some kind of intelligent way. You don’t need to get the computer to
be a world class player at your game, or even close (as that’s what the Artificial Intelligence
class is for) but some effort here could really pay off.
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. Poker is way too
complex if you are going to consider any kind of computer intelligence, yet ends up somewhat
simplistic as just a game without it. Regular Tic-Tac-Toe makes for too simple a project
however you approach it.
Here are some more thoughts
regarding games.
Option 2: An interactive 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. (Actually, experience shows you
don't want to build this particular simulation--it is surprisingly hard
to get planetary orbits to behave as expected.)
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
balls on a billiard table, or a side view of an aquarium, or a map of
trees growing in a forest. Your system will need to
be animated, and there will need to be interactions between objects.
Billiard balls, for
example, collide with each other,
big fish eat little fish, and tall trees shade out understory trees.
Flocking birds try to stay close to each other, but not too close (see
Chapter 13).
Note that several of the projects in Chapters 9, 10, and 13 suggest potential directions for the simulation option.
Your simulation may include pretty much any features you can cook up, but it minimally must include:
Objects. Specifically, each moving or changing thing on your screen should be implemented as an object via
object-oriented programming.
Interactions between objects. It isn’t sufficient to pre-program in advance what your objects will
do, or have them only update themselves via some sort of loop. The objects must interact with each
other. Two objects can collide, for example, and change direction.
Some feature that allows either mouse-clicks or keystrokes to affect the simulation in some way
(click to plant a tree, or hit the "+" key to speed up the simulation, or click on a fish to
see a window pop up containing the fish’s vital statistics, etc.) This must work while the
simulation is running; it isn’t enough to ask the user a question at the beginning, and run the
simulation autonomously from there.
Option 3: Data investigation
Use your computational skills to
automatically analyze some large, interrelated body of data. Maybe you
want to scrape the web for census data and public-health statistics,
then compare all that to some theoretical epidemiological model. Or
maybe you’d like to process a bunch of ancient texts written in Latin,
looking for allusions among them. Or perhaps you’ve got a giant
database of protein interactions in human cells, and you want to try to
infer something about the network of interactions as a whole.
Your data investigation should be based on a
well-formed, testable hypothesis. The software you write should not
only analyze the data, but also collect it autonomously (if that makes
sense for your data source) and present the results in a useful and
nontrivial way.
Note that several of the suggested projects in Chapter 8 of our textbook fit into the requirements of this option.
In addition to writing an analysis program,
you must also prepare a short writeup (2–3 pages, single-spaced) that
discusses the background of your problem, your hypothesis, your data
sources, how your program addresses your hypothesis, the results, and
the conclusions you draw from these results.
Option 4: Your own idea
Would you like to apply what you’re learning about computing to something not covered by
the options above?
Perhaps you want to build some kind of complex tool. Perhaps you want to do
something artistic. Talk to me.
In the past, the biggest trap that students have fallen into this assignment is picking something
too complex and not having the time to finish it. That’s why I’m asking you to submit a design document
describing what your project will do. The more detail you provide, the better I can help direct you
in the appropriate direction.