This was a CS242 project. There are a number of bugs (including bad collision detection) that I may fix someday.