Course Project

Project overview

The goal of the project is for you to use the knowldge you’re gaining this term to dive deeply into program design and implementation. You should implement some new idea, or expand further something we’ve done so far, in a way that interests you.

See below for project ideas. You can also brainstorm your own.

Scope

The scope of the project should be roughly two assignments. You will work with a partner, including submitting a single proposal.

Goals

The goals of the project are three-fold:

  • Implement something that interests you.
  • Practice code design, testing, and documentation.
  • Improve your project as the term progresses.

Partners

You are expected to work on the project with a partner, and for each deliverable (after Partner Selection), submit only one for the pair. This means that you can work together on the code, and do not need to type it up separately. (This is different than the homework policy in this course, for which you must type up your own code.)

Token use

Note that you can use one token on the proposal, although you really do want to get the project proposal okayed as soon as possible. You can use up to two tokens on the code deliverables and writeup. For the proposal, either partner may contribute a token. For the code deliverables and writeup, both partners must contribute a token for two to be used (they can’t both come from one person).

Deliverables

There are five deliverables for this project:

  • Partner Selection, due Monday 9/29/25
  • Proposal, due Monday 10/6/25
  • Code Part 1, due Thursday 10/23/25
  • Code Part 2, due Thursday 11/13/25 Monday 11/17/25
  • Writeup, due Monday 11/17/25 Wednesday 11/19/25

Partner Selection

You need to let me know who you’re planning to work with in the assignment on Moodle.

If you don’t have a partner in mind, you should fill out this survey to help me pair you up, and submit “see survey” on Moodle instead.

Partner selection is due on Moodle by 10pm on Monday 9/29/25.

Proposal

Your proposal should be similar in nature to the online writeups for each assignment. You do not have to provide code, but describing the functions you’ll need to write and overall functionality is necessary. If your project will have a UI, you should sketch it out (a picture of a pencil/paper sketch is fine). If it is text-based, you should give an example of the output. In both cases, you should describe the input to your program (a file of data, an image, user clicks, etc.).

You should submit the proposal as a .pdf or .txt file on Moodle by 10pm on Monday 10/6/25.

Code Part 1

Your program should be of the scope of two assignments, and include the following:

  • Some form of user input (can be a file, an image, the user typing or clicking, etc.)
  • Some form of output (a new file, a displayed image, an interactive UI, printed output, a plot, etc.)
  • At least two unit tests to test at least one function (we’ll discuss testing in Week 5)

The goal for this part of the project is to implement most of the functionality. You may not have it all working yet, but you should have comments in the code to clarify what works so far and what doesn’t.

You don’t need to have your writeup done yet, so for now just include a simple readme.txt file explaining how to run/use your project.

You should submit the code as a single .zip file on Moodle by 10pm on Thursday 10/23/25. Note that your code should work as-is, so if you need a file (e.g., graphics.py), you need to include that in your .zip file.

Code Part 2

In addition to the work you did for the first code deliverable, you must also now have:

  • At least two new classes defined by you (this can include subclasses, which we’ll see in Week 8)
  • At least two new unit tests to test at least one more function
  • Functions and classes should be well-used to divide the code up logically – if you have a function/method that is more than 10-20 lines of code, think about how you might simplify it

You should submit the code as a single .zip file on Moodle by 10pm on Thursday 11/13/25 Monday 11/17/25. Note that your code should work as-is, so if you need a file (e.g., graphics.py), you need to include that in your .zip file.

Writeup

You should provide a writeup for the final project, describing what you did, how to run/use your project, etc., as well as screenshots of your project in action.

You should submit the writeup as a .pdf file on Moodle by 10pm on Monday 11/17/25 Wednesday 11/19/25.

Grading

Your grade for the project will be distributed as follows:

  • Partner Selection: 2 points
  • Proposal: 18 points
  • Code Part 1: 40 points
  • Code Part 2: 20 points
  • Writeup: 20 points

Project ideas

Below are several project ideas. Note that you are encouraged to use the graphics.py library and possibly build on assignments we’ve had if you want to make a game, but you are not allowed to use pygame (it’s too heavy-handed – save that for December when you may have more free time to explore!).

Write a game

  • Tic-Tac-Toe against a computer player
  • Break Out
  • Flappy Bird
  • Ghost, a text-based game of word building (example: part 1 and part 2 and part 3)

Data analysis + visualization – find your own interesting dataset!

Simulation

Image processing

  • Find the “most common colors” in an image, and recolor the image using this smaller color set
  • Add the ability to “paint” an image by clicking on a pixel and using the color to modify nearby pixels
  • Blur/sharpen an image based on user clicks
  • Detect edges in an image
  • See this page or play around with a free image manipulation program like GIMP for more ideas