A 2-d game in Java with design patterns