Course Project

Project overview

The goal of the project is for you to define how you spend your last few weeks of the term. 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 can work with a partner, including submitting a single proposal.

Goals

The goals of the project are two-fold:

  • Implement something that interests you.
  • Practice code design, testing, and documentation.

Partners

You are allowed to work on the project with a partner, and for each deliverable, 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.

Deliverables

There are three deliverables for this project:

  • Proposal, due Monday 5/13/24
  • Code, due Monday 5/27/24
  • Writeup, due Wednesday 5/29/24

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, but that will make it a bigger time crunch to finish the writeup.

Tokens cannot be used on the writeup, as that is due on the last day of class, and assignments cannot extend into reading days.

Proposal

Your proposal should be similar to the online writeups for each assignment. You do not have to provide code, but describing the functions you’ll need to write and the class(es) you’ll need to design 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 5/13/24.

Code

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 new classes defined by you (this can include subclasses, which we’ll see in Week 8)
  • At least four unit tests to test at least two functions
  • 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 Monday 5/27/24. 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 Wednesday 5/29/24.

Project ideas

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

Software engineering

  • Choose something, like image processing, and measure runtimes of various functions; plot these runtimes as the image changes size
  • Add error handling (for malicious user input) to the code for one of our previous assignments, and write test cases to check original and new functionality