este post eh continuação de

http://www.athanazio.com/2009/01/11/c-criando-um-labirinto-v1/

Fazer as conexões entre os elementos do labirinto foi uma coisa interessante, porque eu preciso de uma representação onde cada posição, seja parede ou celula vazia tenha a mesma largura para representar isto para cada item do labirinto criei uma matriz 3×3 onde a posição do centro representa a celula em si e as posições ao redor são as possiveis conexões com as proximas células, veja o desenho abaixo

o centro do quadro eh a celula atual sendo processada, e as caixa ao redor sao os possiveis vizinhos, note que para cara vizinho existe uma combinacao de modificadores para x e y, por exemplo o vizinho ao norte é 0 e -1 o do leste 1 e 0 e assim por diante.

alem disto para conectar ao vizinho armazenei tambem que coordenada na matriz de conexões é necessário atualizar para realizar a conexão, por exemplo para o norte a conexão é feita em 1,2 da matriz de conexões.

a matriz com estas definições está na classe de geração do maze

int[,] SearchNeighBorNumbers = { { 0, -1, 1, 2 }, { 1, 0, 0, 1 }, { 0, 1, 1, 0 }, { -1, 0, 2, 1 } };

desta forma preciso sortear somente que linha desta matriz vou usar para manipular o vizinho, e assim realizo as conexões. Antes que eu me esqueça ! além de mudar a matriz de conexões do vizinho é necessário fazer o mesmo na célula corrente e para encontrar a célula correta basta usar o mesmo deslocamento usado para encontrar o vizinho, dentro da matriz de conexões da celula atual, a partir da posicao 1,1 conforme este treco abaixo

current.conections[
1 + SearchNeighBorNumbers[neighborRow, NEIGHBOR_X],
1 + SearchNeighBorNumbers[neighborRow, NEIGHBOR_Y]] = OPEN;

algumas referencias para labirintos

tutorial sobre a geração do labirinto
http://www.mazeworks.com/mazegen/mazetut/index.htm

mais comentarios sobre o algoritmo
http://en.wikipedia.org/wiki/Maze#Generating_mazes

uma visao mais detalhada do Deep-first
http://en.wikipedia.org/wiki/Depth-first_search