Final Project

Proposal due
Friday, November 18, 2016
Project demos
2-4 p.m., Wednesday, December 14, 2016
Goals
Develop a larger program of your own design.
Collaboration
Work alone or in a team of up to three students.
Submitting
See below.
Scoring
50 points

Options

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.

Deliverables

1. Proposal

First, let me know whether you are working alone or with a team, and who is on your team.

Then, describe in brief your plan for your final project. First, it should contain a description of the game, simulation, or investigation that you will implement. If it is one of the games I mentioned, you need only give a few sentences of description. If it is something else, then please give a few paragraphs of description.

Second, give a carefeul object-oriented description (or top-down design) for the system that you hope to implement. What objects are in your program? What are their attributes? What are their methods?

Submission

Submit your design document as a .pdf file via the turnin tool as part of Homework 15.

Your design document will count for 2 points of your final project.

2. Demonstration

Project demonstrations will occur during our normally scheduled exam times.

You will be required to show your project to me and your classmates, and anyone else who happens to show up during this time. You and your group should run your project and be prepared to explain what it should be doing, how to play (if it’s a game), how the simulation works (if it’s a simulation), etc.

The format of the presentation will be a gala of sorts: Groups will have 20 minute slots during which they will have their project running on a computer, they will log in and show it off to anyone who asks questions. Multiple groups will be presenting at the same time, so everyone else is welcome to check out what is going on.

Feel free to invite your friends who aren’t in intro to come and check out your projects.

It is not required that your project be in its final, finished state at the time of the demo. But enough of it should be finished that you can demonstrate what is going on, how your project works, and maybe have only some small changes left that you will make.

Submission

There isn’t anything to submit for this, just show up and demonstrate your project. 5 points of your final grade will be on your submission, and you will be graded on how well your demonstration shows what your project is doing.

3. Final Project

The final project code is due at the end of the finals period.

Your final project will consist of:

  • All Python files that are required to run your project

  • A file named readme.txt with the following information:

    • A description of your program and its features.

    • Instructions for how to run your program, especially if you submit multiple Python files.

    • A brief description and justification of how it is constructed (classes, functions, etc.)

    • A discussion of the current status of your program, what works and what doesn’t, etc.

  • Any additional data files, if necessary (images, data info…)

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

I CANNOT GRANT AN EXTENSION BEYOND THE END OF FINAL EXAMS UNDER ANY CIRCUMSTANCES.

Grading

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

  • How cleanly the program runs: Does it crash? Does it have other apparent bugs?

  • Complexity: A project that involves complex ideas or implementations is clearly cooler than a simple one.

  • Style: Documentation, comments, variable names, and good design of classes, methods, and functions

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.

On academic dishonesty: You must submit a program that you write yourselves. 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, image.py, or others), you must clearly acknowledge them.

Points will be allocated as follows:

  • Proposal - 2 pts

  • Demonstration - 5 pts

  • Execution - 25 pts

  • Complexity - 10 pts

  • Style - 5 pts

  • Readme - 3 pts



Janet Davis (davisj@whitman.edu). Most of this writeup copied from Dave Musicant.

Created November 14, 2016
Last revised November 14, 2016, 08:47:39 PM PST
CC-BY-NC-SA This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.