Overview

This is an individual project.

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 interactive graphics. Should you choose to implement a graphics-oriented game (Tetris and Minesweeper are examples), you might find the sample programs clickablewindow.py, typeablewindow.py, and twowindows.py helpful in getting started.

Unless your game is quite complicated in implementation, 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 my course in Artificial Intelligence class is for, but some sort of 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 is some more info regarding games.

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 it minimally 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.

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 the grader can help direct you in the appropriate direction.

Make sure to indicate in program documentation how to run your program, especially if you submit more than one file.

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.

The first factor above is most important. A program that runs correctly, error-free, and achieves the above specifications will earn a better grade than an incredibly smart chess program that crashes and provides unreadable output. Of course, given two programs side-by-side that run perfectly, the one that accomplishes more will receive the better grade.

To reiterate: It is most important to submit something that works. Set modest goals and achieve them first, then enhance your program later.

On academic dishonesty: You must submit a program that you write yourself. You may obtain help from other students in getting ideas and in debugging your code, but you must write your own program. If you choose to utililize libraries (such as graphics.py, images.py, or others), you must clearly acknowledge them. Make sure to reread the section of the course syllabus regarding "collaboration, plagiarism, and the difference between the two."

Submission schedule

The Moodle assignment schedule indicates when you should turn in a design document describing what you wish to do for your project. This should contain a description of the game that you will implement, and a careful description of the algorithms you hope to implement. We will not be grading this for correctness, but rather to help you do a better job at getting your project done. The more info you provide, the better we can do at helping to steer you in the right direction. The design document should be at least a page in length, and should be as detailed as you can make it at this stage.

The Moodle schedule also indicates when the project itself is due, which is at the end of the final exam period. I CANNOT GRANT AN EXTENSION BEYOND THE END OF FINAL EXAMS UNDER ANY CIRCUMSTANCES. The College has strict policies that forbid faculty from taking assignments any later than the end of final exams without an extension granted by the Dean of Students office.

The final submission

In addition to submitting your Python file(s), you should submit the following items of documentation in a readme.txt file that is in your directory. You may be brief.

Resources

Remember that if you use any material that you have not created yourself (libraries, images, etc.), you need to cite it appropriately, and you need to have permission to use it. I have had problems in the past with this project where students have missed this. You must cite any such items that you use and include the appropriate licensing information indicating that you can do so legally.

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