public virtual void AtualizaVisao() { Config.Point pos = new Config.Point((int)transform.position.x, (int)transform.position.y); int startC = pos.x - raioDeVisao; int startL = pos.y - raioDeVisao; int fimC = pos.x + raioDeVisao; int fimL = pos.y + raioDeVisao; int x = startC; int y = startL; for (x = startC; x <= fimC; x++) { for (y = startL; y <= fimL; y++) { if (controleMapa.DentroMapa(x, y)) { int raio = raioDeVisao - matrizIlha [x, y].bloqueioVisao; if (Mathf.Pow((x - pos.x), 2) + Mathf.Pow((y - pos.y), 2) <= raio * raio) { matrizIlha [x, y].Mostra(); } } } } }
void EscolheSpawnJogador(Area[,] mapa) { Config.Point ponto = new Config.Point(0, 0); //Descobre em qual "quadrante" ta o boss //Primeiro quadrante - superior esquerdo if (pontoBoss.x < mapa.GetLength(0) / 2 && pontoBoss.y >= mapa.GetLength(1) / 2) { ponto = LinhaSpawn(mapa, 3, mapa.GetLength(0), mapa.GetLength(1)); } //Segundo quadrante - superior direito if (pontoBoss.x >= mapa.GetLength(0) / 2 && pontoBoss.y >= mapa.GetLength(1) / 2) { ponto = LinhaSpawn(mapa, 4, mapa.GetLength(0), mapa.GetLength(1)); } //Terceiro quadrante - inferior direito if (pontoBoss.x >= mapa.GetLength(0) / 2 && pontoBoss.y < mapa.GetLength(1) / 2) { ponto = LinhaSpawn(mapa, 1, mapa.GetLength(0), mapa.GetLength(1)); } //Quarto quadrante - inferior esquerdo if (pontoBoss.x < mapa.GetLength(0) / 2 && pontoBoss.y < mapa.GetLength(1) / 2) { ponto = LinhaSpawn(mapa, 2, mapa.GetLength(0), mapa.GetLength(1)); } pontoSpawn = ponto; mapa [ponto.x, ponto.y].tipo = SPAWN; }
Area[,] ColocaAreaFinal(Area[,] mapa1) { Area[,] mapaRetorno = new Area[mapa1.GetLength(0), mapa1.GetLength(1)]; Area[,] mapa2 = FazMapaTesouroFinal(); Vector2 ponto = PegaPontoInicial(mapa1); int xCentro = (int)ponto.x; int yCentro = (int)ponto.y; int tamanhoX = mapa2.GetLength(0) / 2; int tamanhoY = mapa2.GetLength(1) / 2; int zeroX = xCentro - tamanhoX; int zeroY = yCentro - tamanhoY; int contagem2 = 0; while (contagem2 < tamMinimoBoss) { contagem2 = 0; for (int l, c = 0; c < mapaRetorno.GetLength(0); c++) { for (l = 0; l < mapaRetorno.GetLength(1); l++) { mapaRetorno [c, l] = mapa1 [c, l]; if (c >= zeroX && c < xCentro + tamanhoX) { if (l >= zeroY && l < yCentro + tamanhoY) { int difX = c - zeroX; int difY = l - zeroY; if (mapa1 [c, l].tipo == GRAMA && mapa2 [difX, difY].tipo == GRAMA) { mapaRetorno [c, l].tipo = FINAL; mapaRetorno [c, l].dificuldade = 5; contagem2++; } if (difX == tamanhoX && difY == tamanhoY) { pontoBoss = new Config.Point(c, l); mapaRetorno [c, l].tipo = BOSS; mapaRetorno [c, l].dificuldade = 6; } } } } } if (contagem2 < tamMinimoBoss) { contagem2 = 0; mapa2 = FazMapaTesouroFinal(); } } return(mapaRetorno); }
/*** Secao de interface ***/ public Area[,] ConstroiIlha() { mapaIlha = new ConstrutorMapa(largura, altura, iteracoes, iteracoesDif, percentAguaInicial, percentDifMinInicial); //mapaIlha.matrizMapa = ColocaAreaFinal (mapaIlha.matrizMapa); Vector2 v = PegaPontoInicial(mapaIlha.matrizMapa); pontoBoss = new Config.Point((int)v.x, (int)v.y); EscolheSpawnJogador(mapaIlha.matrizMapa); DesenhaMapa(mapaIlha); matrizFinal = mapaIlha.matrizMapa; return(matrizFinal); //DesenhaMapa(mapaIlha.matrizMapa); }
public void Popula(Area[,] mapa, Config.Point spawn) { playerTransform.position = new Vector2(spawn.x, spawn.y); List <Area> listaMapa = mapa.Cast <Area> ().ToList(); areasGrama = listaMapa.Where(i => i.dificuldade == 1 && i.tipo == FazIlha.GRAMA).ToList(); areasMato = listaMapa.Where(i => i.dificuldade == 2).ToList(); areasRuinas = listaMapa.Where(i => i.dificuldade >= 3 && i.dificuldade <= 4).ToList(); areasBoss = listaMapa.Where(i => i.dificuldade >= 5).ToList(); PopulaGramas(mapa); PopulaMatos(mapa); PopulaSeparadas(mapa); }
protected void EscolheAtaque() { Config.Point pontoAlvo = new Config.Point((int)alvo.transform.position.x, (int)alvo.transform.position.y); Config.Point pontoBoss = new Config.Point((int)transform.position.x, (int)transform.position.y); if (pontoAlvo.x == pontoBoss.x || pontoAlvo.x == pontoBoss.x + 1) { if (pontoAlvo.y < pontoBoss.y) { Fogo(); } else if (pontoAlvo.y > pontoBoss.y + 1) { Rabo(); } } else { if (pontoAlvo.y == pontoBoss.y || pontoAlvo.y == pontoBoss.y) { Asas(); } else if (pontoAlvo.y < pontoBoss.y) { if (pontoBoss.y - pontoAlvo.y <= larguraExtraAsa) { Asas(); } else { Fogo(); } } else if (pontoAlvo.y > pontoBoss.y + 1) { if (pontoAlvo.y - (pontoAlvo.y + 1) <= larguraExtraAsa) { Asas(); } else { Rabo(); } } } }
void TiraDesconectadas() { Config.Point pontoInicial = new Config.Point(largura / 2, altura / 2); List <Config.Point> lista = FloodFill(pontoInicial); if (lista.Count == 0) { return; } Config.Point np = new Config.Point(0, 0); for (int l, c = 0; c < largura; c++) { for (l = 0; l < altura; l++) { np.x = c; np.y = l; if (!lista.Contains(np)) { matrizMapa [c, l].tipo = 1; matrizMapa [c, l].dificuldade = difMin; } } } }
List <Config.Point> FloodFill(Config.Point startP) { if (matrizMapa [startP.x, startP.y].tipo == 1) { return(new List <Config.Point> ()); } Queue <Config.Point> fila = new Queue <Config.Point> (); List <Config.Point> pontosArea = new List <Config.Point> (); fila.Enqueue(startP); pontosArea.Add(startP); while (fila.Count > 0) { Config.Point p = fila.Dequeue(); Config.Point np = new Config.Point(0, 0); if (!EAgua(p.x - 1, p.y)) { np.x = p.x - 1; np.y = p.y; if (!pontosArea.Contains(np)) { fila.Enqueue(np); pontosArea.Add(np); } } if (!EAgua(p.x + 1, p.y)) { np.x = p.x + 1; np.y = p.y; if (!pontosArea.Contains(np)) { fila.Enqueue(np); pontosArea.Add(np); } } if (!EAgua(p.x, p.y + 1)) { np.x = p.x; np.y = p.y + 1; if (!pontosArea.Contains(np)) { fila.Enqueue(np); pontosArea.Add(np); } } if (!EAgua(p.x, p.y - 1)) { np.x = p.x; np.y = p.y - 1; if (!pontosArea.Contains(np)) { fila.Enqueue(np); pontosArea.Add(np); } } } return(pontosArea); }