You generally want your map objects to simply contain a level. You could for instance make a Map class that has a .get(x, y) method, which when called on coords that are in bounds returns the tile at those coords, and when called on coourds outside the bounds returns nothing but an undiggable wall. If you want to keep the @ at the middle of the screen when rendering the UI (assuming the upper left corner of your rendering window is (0, 0) on the screen), just take the screen position, subtract half the playing window size, add the player's position on the map, and call your .get() on that.