Hi, just a quick comment. Those switch statements are going to get very long very quickly to take into account all cases of the player moving. You might consider keeping track of the player's position with a 2d array and then printing it (using a loop) to the screen whenever the game state is updated. That way you'll only need 1 of these (adjusted) map printouts:
Instead of using 1234, use WASD as most players are used to that format.
Use a single character to represent the player, and instead of using a switch-case function, try using a virtual function or class for the map generator. Then you can set the player's position with a code number and draw the map using a 2-D array and FOR loops. You can then build functions that take the WASD inputs and add to or subtract from the player's position. This might save you time from redrawing the map over and over again. You can probably also set Boolean variables for the items in the room.
Using the tildes for the doors might be impractical for times when you want the door to be on the side.
Hi, I strongly recommend this tutorial to get you started on ascii roguelikes. Once you have finished, it should give you a much more broad understanding on the concept, and from there you should be able to design your own code. That's what I did!