public void AdicionarInfoPortas(Zona zonaInserida) { for (int i = 1; i < Config.tamanhoMatrizZona.x - 1; i++) { for (int j = 1; j < Config.tamanhoMatrizZona.y - 1; j++) { if (zonaInserida.zona[i, j] != null) { //checar lados //cima if (zonaInserida.zona[i, j - 1] != null) { if (zonaInserida.zona[i, j - 1].secreta == false) { zonaInserida.zona[i, j].entradas[2] = zonaInserida.zona[i, j - 1].posicaoMatriz; } if (zonaInserida.zona[i, j - 1].secreta == true) { zonaInserida.zona[i, j].entradasSecretas[2] = zonaInserida.zona[i, j - 1].posicaoMatriz; } } //baixo if (zonaInserida.zona[i, j + 1] != null) { if (zonaInserida.zona[i, j + 1].secreta == false) { zonaInserida.zona[i, j].entradas[3] = zonaInserida.zona[i, j + 1].posicaoMatriz; } if (zonaInserida.zona[i, j + 1].secreta == true) { zonaInserida.zona[i, j].entradasSecretas[3] = zonaInserida.zona[i, j + 1].posicaoMatriz; } } //esquerda if (zonaInserida.zona[i - 1, j] != null) { if (zonaInserida.zona[i - 1, j].secreta == false) { zonaInserida.zona[i, j].entradas[0] = zonaInserida.zona[i - 1, j].posicaoMatriz; } if (zonaInserida.zona[i - 1, j].secreta == true) { zonaInserida.zona[i, j].entradasSecretas[0] = zonaInserida.zona[i - 1, j].posicaoMatriz; } } //direita if (zonaInserida.zona[i + 1, j] != null) { if (zonaInserida.zona[i + 1, j].secreta == false) { zonaInserida.zona[i, j].entradas[1] = zonaInserida.zona[i + 1, j].posicaoMatriz; } if (zonaInserida.zona[i + 1, j].secreta == true) { zonaInserida.zona[i, j].entradasSecretas[1] = zonaInserida.zona[i + 1, j].posicaoMatriz; } } //FIM CHECAGEM } } } }
public void PreencherZona(Zona zonaInserida, Area areaPartida, int totalAreasCriadas, Vetor2[] coordAreas, int nAreas, System.Random rnd) { bool permissao; Vetor2 novaCoord; //numeroDeAreasRandomizado--- if (totalAreasCriadas >= nAreas) { //interrompe a recursão. return; } else { int porta = rnd.Next(0, 4); switch (porta) { //Não cria; case 0: //baixo //Cria; novaCoord = new Vetor2(areaPartida.posicaoMatriz.x, areaPartida.posicaoMatriz.y + 1); //Checa permissao = true; for (int i = 0; i <= totalAreasCriadas; i++) { if ((coordAreas[i].x == novaCoord.x && coordAreas[i].y == novaCoord.y) || (novaCoord.x >= Config.tamanhoMatrizZona.x || novaCoord.x >= Config.tamanhoMatrizZona.y) || (novaCoord.x < 1 || novaCoord.y < 1)) { permissao = false; } } //Insere if (permissao == true) { zonaInserida.zona[areaPartida.posicaoMatriz.x, areaPartida.posicaoMatriz.y + 1] = new Area(novaCoord); totalAreasCriadas++; coordAreas[totalAreasCriadas] = novaCoord; } break; case 1: //cima: //Cria; novaCoord = new Vetor2(areaPartida.posicaoMatriz.x, areaPartida.posicaoMatriz.y - 1); //Checa permissao = true; for (int i = 0; i <= totalAreasCriadas; i++) { if (coordAreas[i].x == novaCoord.x && coordAreas[i].y == novaCoord.y) { permissao = false; } } //Insere if (permissao == true) { zonaInserida.zona[areaPartida.posicaoMatriz.x, areaPartida.posicaoMatriz.y - 1] = new Area(novaCoord); totalAreasCriadas++; coordAreas[totalAreasCriadas] = novaCoord; } break; case 2: //esquerda //Cria; novaCoord = new Vetor2(areaPartida.posicaoMatriz.x - 1, areaPartida.posicaoMatriz.y); //Checa permissao = true; for (int i = 0; i <= totalAreasCriadas; i++) { if (coordAreas[i].x == novaCoord.x && coordAreas[i].y == novaCoord.y) { permissao = false; } } //Insere if (permissao == true) { zonaInserida.zona[areaPartida.posicaoMatriz.x - 1, areaPartida.posicaoMatriz.y] = new Area(novaCoord); totalAreasCriadas++; coordAreas[totalAreasCriadas] = novaCoord; } break; case 3: //direita //Cria; novaCoord = new Vetor2(areaPartida.posicaoMatriz.x + 1, areaPartida.posicaoMatriz.y); //Checa permissao = true; for (int i = 0; i <= totalAreasCriadas; i++) { if (coordAreas[i].x == novaCoord.x && coordAreas[i].y == novaCoord.y) { permissao = false; } } //Insere if (permissao == true) { zonaInserida.zona[areaPartida.posicaoMatriz.x + 1, areaPartida.posicaoMatriz.y] = new Area(novaCoord); totalAreasCriadas++; coordAreas[totalAreasCriadas] = novaCoord; } break; } //Chama a recursão: if (totalAreasCriadas > (nAreas / 4)) { PreencherZonaLimitado(zonaInserida, totalAreasCriadas, coordAreas, nAreas, rnd); } else { int posicaorandom = rnd.Next(0, totalAreasCriadas + 1); PreencherZona(zonaInserida, zonaInserida.zona[coordAreas[posicaorandom].x, coordAreas[posicaorandom].y], totalAreasCriadas, coordAreas, nAreas, rnd); //Console.WriteLine("entrou" + (totalAreasCriadas + 1)); } } }
public void PreencherZonaLimitado(Zona zonaInserida, int totalAreasCriadas, Vetor2[] coordAreas, int nAreas, System.Random rnd) { int nAdjacentes; bool permissao = false; Vetor2 novaCoord; //numeroDeAreasRandomizado--- if (totalAreasCriadas >= nAreas) { //interrompe a recursão. return; } else { while (permissao == false) { int coordx = rnd.Next(1, Config.tamanhoMatrizZona.x - 2); int coordy = rnd.Next(1, Config.tamanhoMatrizZona.y - 2); nAdjacentes = 0; //checa se a posicao da matriz está vazia if (zonaInserida.zona[coordx, coordy] == null) { //checa os adjacentes: //cima: if (zonaInserida.zona[coordx, coordy - 1] != null) { nAdjacentes++; } //baixo if (zonaInserida.zona[coordx, coordy + 1] != null) { nAdjacentes++; } //esquerda if (zonaInserida.zona[coordx - 1, coordy] != null) { nAdjacentes++; } //direita if (zonaInserida.zona[coordx + 1, coordy] != null) { nAdjacentes++; } if (nAdjacentes > 0 && nAdjacentes < 2) { //insere uma area na posicao da matriz. novaCoord = new Vetor2(coordx, coordy); zonaInserida.zona[coordx, coordy] = new Area(novaCoord); totalAreasCriadas++; coordAreas[totalAreasCriadas] = novaCoord; permissao = true; } } } //Chama a recursão: if (totalAreasCriadas > (nAreas / 4)) { PreencherZonaLimitado(zonaInserida, totalAreasCriadas, coordAreas, nAreas, rnd); } else { int posicaorandom = rnd.Next(0, totalAreasCriadas + 1); PreencherZona(zonaInserida, zonaInserida.zona[coordAreas[posicaorandom].x, coordAreas[posicaorandom].y], totalAreasCriadas, coordAreas, nAreas, rnd); //Console.WriteLine("entrou" + (totalAreasCriadas + 1)); } } }