Summer project, 2014. Coded in Java. May port to C++ eventually.