Source

(*grid = {1,1}20;*)
valToGrid[val_,max_]:= Ceiling[Clip[val,{0.0001,max}],1]
ptToGrid[pt_,grid_]:= MapThread[valToGrid,{pt,grid}]
(*buildMap[map_]:= Graphics[
Table[
Text[map[[j,i]],{i,j}]
,{i,1,grid[[1]]},{j,1,grid[[2]]}]
,ImageSize-> {Automatic,400},PlotRangePadding-> 0,PlotRange-> All]*)

mapmaker[]:= Deploy@DynamicModule[{grid,map,pt={1,1}/2,prev,visual="",(*indicator,*)clickLoc = {1,1},selector = "#",outmap,traffic,allPaths,sym1 = {-1,1},sym2 = {-1,1},fnameOut="test"},
grid=3{20,20};
map=ConstantArray[".",grid];
prev = pt;
indicator = "";
Column[{LocatorPane[Dynamic[pt]
,Dynamic[
(*value painting*)
visual =  (*Dynamic@buildMap@Transpose@map*) TableForm[Reverse@Transpose@map,TableSpacing-> {1,1}];
If[pt≠ prev,prev=pt;
(*new click*)
clickLoc = ptToGrid[pt*grid,grid];
map[[clickLoc[[1]],clickLoc[[2]]]]=selector;
map[[clickLoc[[1]]*sym1[[1]],clickLoc[[2]]*sym1[[2]]]]=selector;
map[[clickLoc[[1]]*sym2[[1]],clickLoc[[2]]*sym2[[2]]]]=selector;
map[[clickLoc[[1]]*sym1*sym2[[1]],clickLoc[[2]]*sym1*sym2[[2]]]]=selector;
];
Dynamic@visual
,SynchronousUpdating-> False
],Appearance-> None
]
,Button["Clear Map",map=ConstantArray[".",grid],ImageSize-> {100,Automatic}]
,Row[{"Paint character ",InputField[Dynamic@selector,String,ImageSize-> {100,Automatic}]}]
,Row[{"Symmetry 1",InputField[Dynamic@sym1,ImageSize-> {100,Automatic}]}]
,Row[{"Symmetry 2",InputField[Dynamic@sym2,ImageSize-> {100,Automatic}]}]
,Row[{"Output Filename",InputField[Dynamic@fnameOut,String,ImageSize-> {100,Automatic}]}]
,Button["Export Map",exportMap[map,grid,fnameOut],ImageSize-> {100,Automatic}]
}]
]

tableToString[map_]:= StringJoin@Flatten@Riffle[Transpose@map,"\n"]

exportMap[map_,grid_,fnameOut_:"test"]:=Module[{rawtext,dimText},
rawtext = Import[FileNameJoin[{NotebookDirectory[],"simple.xml"}],"Text"];
dimText=StringReplace[rawtext,{
"heightspec"-> ToString@grid[[2]]
,"widthspec"-> ToString@grid[[1]]
,"cdatspec" -> tableToString@map
,"hdatspec"-> tableToString@ConstantArray["G",grid]
}];
SetDirectory["C:\\Users\\Max\\Desktop\\Battlecode2013\\maps"];
Export[fnameOut<>".xml",dimText,"Text"];
]

Use

LEGEND
open space: .
void space: #
encampment: @
player A: a
player A’s mine: 1
player B: b
player B’s mine: 2
neutral mine (anti-rush): 3

Quiet@mapmaker[]

rangeDiagram[range_]:= Module[{},
{"Range "<>ToString@range,
TableForm[r=Table[
If[(i^2+j^2)≤ range,"#","."]
,{i,-size,size},{j,-size,size}];r[[size+1,size+1]]="O";r,TableSpacing-> {0,0}]
}
];
size = 10;
rangeList = {63,32,14,8};
ranges = Rasterize[TableForm[Transpose[rangeDiagram/@rangeList]],ImageSize-> {Automatic,50*Length@rangeList},AspectRatio-> 1/Length@rangeList]