Finished version of the final CS61A Project from Spring 2013