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
- Simulate a robot cleaning a room
- Simulate Conway’s Game of Life
- Simulate entropy (see Tanya about the kids’ book that inspired this idea)
- Simulate a string of weights connected by a rope
- Simulate virus dynamics
Data visualization – find your own interesting dataset!
- Implement least-squares regression to plot a curve to fit data
- Perform Principal Component Analysis (PCA) given a set of data
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