Улучшаем карту

Допустим, вы сгенерировали карту, скажем так и теперь ее нужно задизайнерить.
Например у нас есть сочленения (как например в DOS'овской псевдографике) -
соответственно нужно на месте одиночных стен поставить их, ну еще заменить просто квадратные стены на горизонтальные и вертикальные.

типы стен

Для этого обработаем каждую отдельную стену в соответствии с ее соседями:

пронумерованый квадрат

Типа так:

char *Map;
int w,h;
for(int i=0;i<h;i++)
for(int j=0;j<w;j++)
if (isWall(i,j))
{
unsigned int b=0;

for(int k=0;k<9;k++)
{
if (k!=4)
if (isWall(m,j+k%3-1,i+k/3-1))
b+= (1 << ((k>3?(k-1):k)));
}

if ( b&0x2 && b&0x8 && b&0x10 && b&0x40) tp='Л';
else
if ( b&0x2 && b&0x10 && b&0x40) tp='З';
else
if ( b&0x2 && b&0x08 && b&0x40) tp='Ж';
else
if ( b&0x40 && b&0x08 && b&0x10) tp='Е';
else
if ( b&0x02 && b&0x08 && b&0x10) tp='Д';
else
if ( b&0x02 && b&0x08) tp='Г';
else
if ( b&0x10 && b&0x40) tp='В';
else
if ( b&0x08 && b&0x40) tp='Б';
else
if ( b&0x02 && b&0x10) tp='А';
else
if ( !(b&0x02) && !(b&0x40) && b) tp='И';
else
if ( !(b&0x08) && !(b&0x10) && b) tp='К';
Map[i*w+j]=b;
}

Два последних if'а сделали не проверку на присутствие, а проверку на отсутствие соседних стен, ну и само-собой начали с самого сложного - что окружены со всех сторон