Final Project (100 Points)

Overview

We have covered a wide range of assignments and class exercises spanning 3D design, drawing shapes and fractals, audio processing, image processing and information hiding, particle simulations, maze solvers, and databases. Now it's time to use some inspiration from these assignments to implement your own medium scale project from scratch. Try to pick something that interests you, and be mindful of the grading rubric below. Don't worry too much about intentionally trying to hit all of the goals there, though; if you just start pursuing something you're interested in and it's complex enough, it's very likely you will hit the objectives naturally.

NOTE: You are allowed to use an object-oriented language other than C++ to complete this assignment (e.g. Java, Javascript, Python, C#), as long as you use analaglous features to those required in the rubric.

NOTE ALSO: Though it is not required, I would prefer if you worked with a partner on this project. Let me know if you need help finding a partner.

Objectives

  • Students will learn to scope out and follow through on a medium sized, open ended project
  • Students will practice object oriented design from scratch
  • Students will show facility with C++ programming
  • Students will learn how to give and receive constructive feedback in a professional setting.

Scoping

One of the biggest challenges will be to appropriately scope out your project under the time constraints. You want to have enough done that it's clear what's interesting about the problem, what's working, and what the future challenges are. In this way, you can think about your efforts this semester as the background work you might do to write a grant. Whatever you do, you don't want to over-engineer and get stuck without anything to show.

To get an idea about scoping, have a look at these excellent videos. Even though they're about video game design, much of the wisdom there applies to scientific projects as well. In sum, you can think about this project as finding a "thin slice" through an idea. You want to slice all the way through from start to finish, even if you have to really simplify some steps.

Documentation

To save time in class, students will be required to make videos summarizing their work. Students may want to talk over a slide show and/or show some live demos of code they wrote. Feel free to upload this video to Microsoft Stream or to Youtube.

A good open source screen capture option for Windows is Captura. For Linux, I use RecordMyDesktop. There is also an option to record directly in Powerpoint while you're narrating the slides, and the final result can be uploaded directly to our Microsoft Stream. Click here for more information.

Once the videos are completed, each student/group will post a link to their video on our discord class channel.

No formal writeup will be required for the projects, but students will be expected to submit a brief document summarizing their accomplishments in bullet form, providing a summary of completed code, and providing directions to run the code.

Grading Rubric

Below is how I will score your final submissions

To Receive an A

  • Each item required for a grade of B is included
  • Classes use information hiding (public/private/protected) and a clear separation between implementation (cpp files) and specification (h files)
  • The program runs without memory leaks

To Receive a B

  • Each item required for a grade of C is included
  • Code is well encapsulated within methods and classes
  • Code has been reused where appropriate, using object oriented paradigms
  • Code is clean and well-documented

To Receive a C

  • Each item required for a grade of D is included
  • The program uses at least two different classes in tandem
  • The program uses at least one of:
    1. Templates (your own, or classes you use from the standard template library like vector and map)
    2. Inheritance
    3. Abstract classes

To Receive a D

  • It is possible to build your program from scratch by using makefiles or cmake, without errors
  • The project must be either different from or a significant extension of things we did in class.
  • Your program runs to the specification of what we agreed on during the final project proposals