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. Pairs will be expected to complete projects of slightly larger scope than people working alone, for the same grade. If you want a partner and don’t have one, email me by Friday 2/21/20 so I can attempt to pair up anybody who expresses interest. In the email, include if you’re interested in any specific project idea.

Deliverables

There are three deliverables for this project:

  • Proposal, due Wednesday 2/26/20
  • Code, due Wednesday 3/11/20
  • Writeup, due Wednesday 3/11/20

Note that you can use up to two late days on the proposal, although you really do want to get the project proposal okayed as soon as possible.

Late days cannot be used on the code or writeup, as these are due on the last day of class and will have one submission per project, rather than one per person.

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 a proposal on Moodle by 5pm on Wednesday 2/26/20.

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 three new classes defined by you (this can include subclasses, which we’ll see in week 8)
  • 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 (including the writeup, below) on Moodle by 5:00pm on Wednesday 3/11/20.

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 part of your project .zip on Moodle by 5:00pm on Wednesday 3/11/20.

Project ideas

Write a game

  • Tic-Tac-Toe against a computer player
  • Tetris (there is starter code, but it’s Python 2)
  • Break Out
  • Flappy Bird
  • Hangman (text-based)
  • Ghost, a text-based game of word building (example: part 1 and part 2 and part 3)

Simulation

Data visualization – find your own interesting dataset!

Image processing

  • Find the “most common colors” in an image, and recolor the image
  • 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