This is an initial working concept; refactoring is certainly needed (in particular, note the MapStae.movePlayer() 'bounds' argument).