Use tile editor to create the map. Normally those allow you to export the map in some format. Then create map loader for that map, that reads the exported file and create object from it, to your game.
If you have to use ascii, split those to sections so that "first town" would be saved to txt file "firstTown.txt" and that would contain the number-to-tile thingie. Then just load whatever file you need and consume it.
Examplefile.txt
1,1,1,1,1
1,2,2,2,1
1,2,3,2,1
1,2,3,2,1
1,2,3,2,1
This is example structure, that could be loaded from file. Layer1 is the base tile and layer2 would be trees, rocks and other stuff that should be drawn on top.
int[,] layer1 = new int[5,5]{
{1,1,1,1,1},
{1,2,2,2,1},
{1,2,3,2,1},
{1,2,3,2,1},
{1,2,3,2,1}
}
int[,] layer2 = new int[5,5]{
{0,0,0,0,0},
{0,0,4,0,0},
{0,4,0,0,0},
{0,0,0,0,0},
{0,4,0,0,0}
}
So, don't hardcode that map to your source files, edit map with editor, load it, make runtime changes if necessary. Actual tiles could be saved to "two dimensional array" that is int[,] and it could contain number that is mapped to certain tile image. For example number 1 could be grass and 1337 could be tiny rock.
Tiled ( IMHO the best too for this job)
Community wiki answer - List of tools for mapping
bigMap = { {A}, {B}, {C}, {D} }
where each holds data like "gameMap". so it would be a double array of int[][]. – neko Mar 06 '15 at 16:09