Final Project

Table of Contents

This is a pair programming assignment. If you are working in a pair, this means that you and your partner should be doing the entirety of this assignment side-by-side, on a single computer, where one person is "driving" and the other is "navigating." Set a timer to swap every 15 minutes. You can choose your favorite from this online timer page. Make sure your sound volume is audible, but not so loud to disturb the people around you.

If you are working in a pair, only one of you needs to submit your work via Moodle. That said, you should both have a copy of your work in case you want it someday, so make sure that both of you have copies of it; you can email it or use some other mechanism to transfer it.

We will use anonymous grading on Moodle, which means that the grader won't see your name until after the grading is done. This is an easy way to help add an extra element of fairness to the grading. Therefore, make sure your name doesn't appear on your actual submission. When you submit via Moodle, it will know you are. Thanks!

1 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 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.

2 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:

  • Objects. Specifically, each moving item 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 keystrokes or mouse-clicks to affect the simulation in some way (hit the "+" key to speed up the simulation, click to create a plant, 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.

3 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.

4 Thoughts on grading

I'll be grading the project on four criteria, each on a scale from 0-5.

  1. Correctness: how cleanly the program runs. Is it bug free? Does it crash? Does it do what you claim it does? A 5 in this category means that the program behaves entirely as intended (as best as I can tell). The "as far as I can tell" phrase is critical here. If I can't figure out how to run your program, or how to use it, you will lose points in this category even if it works perfectly when you use it. This category therefore critically involves documentation by you in a README.txt explaining to me whatever I need to know describing what your project does, and how I should use it. A program that doesn't run without an initial error will receive a 0 in this category.
  2. Complexity: A project that involves complex ideas or implementations is clearly cooler than a simpler one. The MovieLens analysis code that you wrote would earn a 5 in this category, whereas the CodeStepByStep exercises that you did at the beginning of the term would earn a 1. Note that I am referring here to what I would call inherent complexity, by which I mean complexity that is essential to the task that you are trying to do. Lots of unnecessary complex code to accomplish a simple task will not earn these points; rather, the complexity score is driven by the nature of the task that you are trying to solve.
  3. Design: This is unchanged from how we've been grading the other assignments.
  4. Style: This is unchanged from how we've been grading the other assignments.

Your final score will be determined as (3 * correctness) + (2 * complexity) + (2 * design) + (style). There is no "last point" as there was on many of our assignments.

On academic dishonesty: You must submit a program that you (and your partner) 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 utilize 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."

5 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 project that you will implement, and a careful description of the algorithms you hope to implement. We will not be grading this for correctness (assuming you turn in something reasonable), 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. I am not requiring a specific length that you must submit for the design document, but I estimate that you'll need at least a page in order to carefully describe what you'll do and the techniques that you'll need.

The Moodle schedule also indicates when the project itself is due, which is at the end of the final exam period. I CANNOT PERSONALLY 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. Any extension requests would have to be taken up with your Class Dean.

6 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.

  • A brief description of your program and its features.
  • A brief description and justification of how it is constructed (classes, functions, etc.)
  • A brief discussion of the current status of your program, what works and what doesn't, etc.

You may be brief in this file, but see the above grading section regarding the importance that I understand what your program does and how to run it.

7 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!

Author: Dave Musicant

Emacs 24.5.1 (Org mode 8.2.10)

Validate