public Area(Vetor2 posicaoMatriz) { this.posicaoMatriz = posicaoMatriz; tema = "semtema"; dungeonInserida = null; //Toda área possui uma dificuldade, logo será randomizado uma dificuldade: System.Random rnd = new System.Random(Guid.NewGuid().GetHashCode()); int resultRand = rnd.Next(1, 411); if (resultRand >= 1 && resultRand <= 20) { this.dificuldade = 0; } if (resultRand >= 21 && resultRand <= 250) { this.dificuldade = 1; } if (resultRand >= 251 && resultRand <= 380) { this.dificuldade = 2; } if (resultRand >= 381 && resultRand <= 400) { this.dificuldade = 3; } if (resultRand >= 401 && resultRand <= 409) { this.dificuldade = 4; } if (resultRand >= 410) { this.dificuldade = 5; } }
// public void CriarAreaBoss(Zona zonaInserida) { Vetor2 auxTamMin = new Vetor2(0, 0); Vetor2 auxTamMax = new Vetor2(0, 0); zonaInserida.bossArea = new Area(null); zonaInserida.bossArea.boss = true; auxTamMin.x = Config.tamanhoMinDungeon.x; auxTamMin.y = Config.tamanhoMinDungeon.y; auxTamMax.x = Config.tamanhoMaxDungeon.x; auxTamMax.y = Config.tamanhoMaxDungeon.y; Config.tamanhoMinDungeon.x = 100; Config.tamanhoMinDungeon.y = 40; Config.tamanhoMaxDungeon.x = 100; Config.tamanhoMaxDungeon.y = 40; zonaInserida.bossArea.dungeonInserida = new Dungeon(zonaInserida.bossArea); zonaInserida.bossArea.dungeonInserida.dungeon[Config.tamanhoMaxDungeon.x / 2, 2].spawnsbPlayer = true; zonaInserida.bossArea.dungeonInserida.dungeon[Config.tamanhoMaxDungeon.x / 2, Config.tamanhoMaxDungeon.y - 3].spawnsbBoss = true; Config.tamanhoMinDungeon.x = auxTamMin.x; Config.tamanhoMinDungeon.y = auxTamMin.y; Config.tamanhoMaxDungeon.x = auxTamMax.x; Config.tamanhoMaxDungeon.y = auxTamMax.y; for (int i = 1; i < zonaInserida.bossArea.dungeonInserida.tamanhoDungeon.y - 1; i++) { for (int j = 1; j < zonaInserida.bossArea.dungeonInserida.tamanhoDungeon.x - 1; j++) { if (zonaInserida.bossArea.dungeonInserida.dungeon[j, i].tipoCelula != "caminho") { zonaInserida.bossArea.dungeonInserida.dungeon[j, i].tipoCelula = "caminho"; } } } }
public void CriarAreasSecretas(Zona zonaInserida, int totalAreasCriadas, Vetor2[] coordAreasSecretas, int nAreasSecretas, System.Random rnd) { int nAdjacentes; bool permissao = false; Vetor2 novaCoord; //numeroDeAreasRandomizado--- if (totalAreasCriadas >= nAreasSecretas) { //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) { //insere uma area na posicao da matriz. novaCoord = new Vetor2(coordx, coordy); zonaInserida.zona[coordx, coordy] = new Area(novaCoord); zonaInserida.zona[coordx, coordy].secreta = true; totalAreasCriadas++; coordAreasSecretas[totalAreasCriadas] = novaCoord; permissao = true; } } } //Chama a recursão: CriarAreasSecretas(zonaInserida, totalAreasCriadas, coordAreasSecretas, nAreasSecretas, rnd); } }
public bool spawnItem = false; //identificar se já tem um item spawnando na celula; public Celula(Vetor2 coordCelulaDun, string tipoCelula) { //Pegando a cordenada da celula em questão. this.coordCelulaDun = coordCelulaDun; //Pegando o tipo da celula em questão. this.tipoCelula = tipoCelula; idCelula = idCelula++; }
public void PrimeiraArea(Zona zonaInserida) { Vetor2 coordAtual = new Vetor2((Config.tamanhoMatrizZona.x / 2), (Config.tamanhoMatrizZona.y / 2)); Area areaCriada = new Area(coordAtual); zonaInserida.zona[coordAtual.x, coordAtual.y] = areaCriada; coordAreas[0] = coordAtual; }
// public void EscolherAreaInicial(Zona zonaInserida) { System.Random rnd = new System.Random(Guid.NewGuid().GetHashCode()); int posicaoRandom = rnd.Next(0, numeroDeAreas); Vetor2 coordAreaInicial = coordAreas[posicaoRandom]; zonaInserida.zona[coordAreaInicial.x, coordAreaInicial.y].inicial = true; this.areaInicial = coordAreaInicial; }
public void EscolherAreaFinal(Zona zonaInserida) { System.Random rnd = new System.Random(Guid.NewGuid().GetHashCode()); bool loop = true; while (loop == true) { int posicaoRandom = rnd.Next(0, numeroDeAreas); Vetor2 coordAreaFinal = coordAreas[posicaoRandom]; if (zonaInserida.zona[coordAreaFinal.x, coordAreaFinal.y].inicial == false) { zonaInserida.zona[coordAreaFinal.x, coordAreaFinal.y].final = true; this.areaFinal = coordAreaFinal; loop = false; } } }
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)); } } }
public Sala() { //Instanciando a Randomizacao System.Random tamanho = new System.Random(Guid.NewGuid().GetHashCode()); // Gerando valores aleatorios de coordenada x e y, para instanciar o vector. int x = tamanho.Next(Config.tamanhoMinSala.x, Config.tamanhoMaxSala.x); int y = tamanho.Next(Config.tamanhoMinSala.y, Config.tamanhoMaxSala.y); Vetor2 tamanhoSala = new Vetor2(x, y); Celula[,] sala = new Celula[tamanhoSala.x, tamanhoSala.y]; this.tamanhoSala = tamanhoSala; int numeroPortas = tamanho.Next(Config.numeroMinPortas, Config.numeroMaxPortas); this.numeroPortas = numeroPortas; //Preenchendo a Sala; for (int i = 0; i < tamanhoSala.y; i++) { for (int j = 0; j < tamanhoSala.x; j++) { if (j == 0 || i == 0 || j == (tamanhoSala.x - 1) || i == (tamanhoSala.y - 1)) { Vetor2 coordPreenchida = new Vetor2(j, i); Celula celulaPreencheu = new Celula(coordPreenchida, "pSala"); //adicionando subtipo* if (j == 0 && i == 0) { celulaPreencheu.subTipoCelula = "quinaECp"; } if (j == 0 && i == (tamanhoSala.y - 1)) { celulaPreencheu.subTipoCelula = "quinaEBp"; } if (j == 0 && i != (tamanhoSala.y - 1) && i != 0) { celulaPreencheu.subTipoCelula = "esquerdap"; } if (j == (tamanhoSala.x - 1) && i == 0) { celulaPreencheu.subTipoCelula = "quinaDCp"; } if (j == (tamanhoSala.x - 1) && i == (tamanhoSala.y - 1)) { celulaPreencheu.subTipoCelula = "quinaDBp"; } if (j == (tamanhoSala.x - 1) && i != (tamanhoSala.y - 1) && i != 0) { celulaPreencheu.subTipoCelula = "direitap"; } if (i == 0 && j != 0 && j != (tamanhoSala.x - 1)) { celulaPreencheu.subTipoCelula = "cimap"; } if (i == tamanhoSala.y - 1 && j != 0 && j != (tamanhoSala.x - 1)) { celulaPreencheu.subTipoCelula = "baixop"; } celulaPreencheu.coordCelulaSala = coordPreenchida; sala[j, i] = celulaPreencheu; } else { Vetor2 coordPreenchida = new Vetor2(j, i); Celula celulaPreencheu = new Celula(coordPreenchida, "chao"); celulaPreencheu.coordCelulaSala = coordPreenchida; sala[j, i] = celulaPreencheu; } } } //Adicionando Portas. for (int i = 0; i < numeroPortas; i++) { int xPorta = tamanho.Next(2, tamanhoSala.x - 3); int yPorta = tamanho.Next(2, tamanhoSala.y - 3); int ladoPorta = tamanho.Next(1, 5); Vetor2 coordPreenchida2 = new Vetor2(0, 0); string subtipo = ""; switch (ladoPorta) { case 1: coordPreenchida2 = new Vetor2(0, yPorta); subtipo = "esquerdap"; break; case 2: coordPreenchida2 = new Vetor2(tamanhoSala.x - 1, yPorta); subtipo = "direitap"; break; case 3: coordPreenchida2 = new Vetor2(xPorta, 0); subtipo = "cimap"; break; case 4: coordPreenchida2 = new Vetor2(xPorta, tamanhoSala.y - 1); subtipo = "baixop"; break; } Celula celulaPreencheu = new Celula(coordPreenchida2, "porta"); celulaPreencheu.ehPorta = true; celulaPreencheu.subTipoCelula = subtipo; celulaPreencheu.coordCelulaSala = coordPreenchida2; sala[coordPreenchida2.x, coordPreenchida2.y] = celulaPreencheu; } this.sala = sala; }