//Se cargan los ataques a las listas de ataques public void Ataque(GameTime gameTime, Player player) { switch (opcionAtaque) { case 1: if (absorver == false) { absorver = true; llega = true; base.jefe_factor_daño = FACTOR_DANO_ABSORBER; } if (llega == true && player.posicion.X >= 12110) { if (!paralizaPlayerAboserviendo) { paralizaPlayerAboserviendo = true; player.paralizadoBool = true; } else if (player.paralizadoBool) { if (llega) { player.velocity.Y -= 0.35f; player.posicion.Y -= 0.05f; player.posicion.X += 5; } if (player.rectangulo_cuerpo.Intersects(jefeRect)) { if (player.muerteBool) { llega = false; absorver = false; player.paralizadoBool = false; } } } else { llega = false; absorver = false; base.jefe_factor_daño = FACTOR_DANO; opcionAtaque = 2; paralizaPlayerAboserviendo = false; } } break; case 2: Random random = new Random(); double ataqueProb = random.NextDouble(); //Ataque parase y comer tiene una probabilidad de 0.1 if (ataqueProb <= 0.1 && timeCounterComer-- == TIEMPO_COMER && llega == false) { parado = true; } //Ataque cierra tiene una probabilidad de 0.4 if (ataqueProb <= 0.4 && llega == false && !paralizarPlayer) { if (cierras.Count < 8) { int casoPosicionCierra = random.Next(1, 3); //1 es para que la cierra vaya hacia la izquierda y 2 es para que vaya a la derecha bool movIzq = false; int posicionPersonaje = (int)player.posicion.X; if (!(posicionPersonaje + 100 >= jefeRect.X)) { switch (casoPosicionCierra) { case 1: movIzq = true; break; case 2: movIzq = false; break; default: movIzq = false; break; } } if (timeCounterCierra-- == TIEMPO_CIERRA) { int velociadCierra = random.Next(1, 20); Cierra cierra = new Cierra(); cierra.Load(Content); cierra.setPisicionInicial(player, movIzq); cierra.velocidadPiso = velociadCierra; cierras.Add(cierra); } else if (timeCounterCierra <= 0) { timeCounterCierra = TIEMPO_CIERRA; } } //Valida si hay cierras y si ya se saliron de pantalla if (cierras.Count > 0) { for (int i = 0; i < cierras.Count; i++) { if (cierras[i].enemPosicion.X <LIMITE_TEMPLO || cierras[i].enemPosicion.X - 30> sillaRect.X) { cierras.Remove(cierras[i]); } } } } //Ataque zombie tiene una probabilidad de 0.1 else if (ataqueProb <= 0.5 && llega == false && !paralizarPlayer) { if (zombies.Count < 5) { if (timeCounterZombie-- == TIEMPO_ZOMBIE) { Zombie zombie = new Zombie(); zombie.Load(Content); zombies.Add(zombie); } else if (timeCounterZombie <= 0) { timeCounterZombie = TIEMPO_ZOMBIE; } } if (zombies.Count > 0) { for (int i = 0; i < zombies.Count; i++) { if (zombies[i].enemPosicion.X <LIMITE_TEMPLO || zombies[i].enemPosicion.X> jefeRect.X || zombies[i].enemDie) { zombies.Remove(zombies[i]); } } } } //Ataque succionar el alma tiene una probabilidad de 0.2 break; } }
public void Update(GameTime gameTime, Player player) { /* * if (player.posicion.X >= 13000) { * nivelCompleto = true; * player.posicion.X = 180; * player.posicion.Y = 1025; * * }*/ if (player.posicion.X > TEMPLO && !player.muerteBool) { listaCierras.Clear(); PuntaPedernal.Clear(); ListaPua.Clear(); jefeMiclan.Update(gameTime, player); base.jefe = (Jefe)jefeMiclan; base.banderaJefe = true; player.Update(jefeMiclan); if (jefeMiclan.moverCamara) { if (!camaraEnMovimiento) { camaraEnMovimiento = true; traslationTemp = new Vector3(camera.Transform.Translation.X, camera.Transform.Translation.Y, camera.Transform.Translation.Z); } else { float valorY = random.Next(1, 50); float valorX = random.Next(1, 70); switch (lado) { case 1: valorY *= -1; valorX *= -1; lado = 2; break; case 2: valorY *= -1; valorX *= -1; lado = 1; break; } camera.transform = Matrix.CreateTranslation(new Vector3(traslationTemp.X + valorX, traslationTemp.Y + valorY, traslationTemp.Z)); } } else { if (jefeMiclan.parado && player.paralizadoBool) { camera.transform = Matrix.CreateTranslation(traslationTemp); } } } else { if (player.posicion.X > 4000) { if (listaCierras.Count < 10) { int casoPosicionCierra = random.Next(1, 3); //1 es para que la cierra vaya hacia la izquierda y 2 es para que vaya a la derecha bool movIzq = false; int posicionPersonaje = (int)player.posicion.X; switch (casoPosicionCierra) { case 1: movIzq = true; break; case 2: movIzq = false; break; default: movIzq = false; break; } if (timeCounterCierra-- == TIEMPO_CIERRA) { int velociadCierra = random.Next(1, 20); Cierra cierra = new Cierra(); cierra.Load(Content); cierra.setPisicionInicial(player, movIzq); cierra.velocidadPiso = velociadCierra; listaCierras.Add(cierra); } else if (timeCounterCierra <= 0) { timeCounterCierra = TIEMPO_CIERRA; } } //Valida si hay listaCierras y si ya se saliron de pantalla if (listaCierras.Count > 0) { for (int i = 0; i < listaCierras.Count; i++) { float toleranciaMayor = player.posicion.X + TOLERANCIA; float toleranciaMenor = player.posicion.X - TOLERANCIA; if (!(listaCierras[i].enemPosicion.X >= 4000)) { listaCierras.Remove(listaCierras[i]); } } } } if (player.posicion.X <= 1000 && ListaPua.Count == 0) { Pua Pua = new Pua(); Pua.Load(Content); ListaPua.Add(Pua); Pua Pua2 = new Pua(); Pua2.Load(Content); pua2.PuaPos.X = 5700; pua2.PuaPos.Y = 1100; ListaPua.Add(Pua2); Pua Pua3 = new Pua(); Pua3.Load(Content); pua3.PuaPos.X = 5600; pua3.PuaPos.Y = 1100; ListaPua.Add(Pua3); } else { foreach (Pua pua in ListaPua) { pua.Update(); player.Update(pua); } } // si es diferente de nulo quiere decir que ya llego con el jefe if (listaCierras.Count > 0) { foreach (Cierra cierra in listaCierras) { cierra.Update(player); player.Update(cierra); } } //aqui se llama a la punta al juego if (player.posicion.X >= 1 && player.posicion.X < 12000) { if (timeCounterPunta-- == TIEMPO_PUNTA) { PuntaPedernal punta = new PuntaPedernal(); punta.Load(Content); Random random = new Random(); punta.PuntaPos.Y = random.Next(700, 1200); PuntaPedernal.Add(punta); } else if (timeCounterPunta <= 0) { timeCounterPunta = TIEMPO_PUNTA; } foreach (PuntaPedernal punta in PuntaPedernal) { punta.Update(gameTime); player.Update(punta); } if (PuntaPedernal.Count > 0) { for (int i = 0; i < PuntaPedernal.Count; i++) { if (PuntaPedernal[i].PuntaPos.X < player.posicion.X - 600) { PuntaPedernal.Remove(PuntaPedernal[i]); } } } } else { PuntaPedernal.Clear(); } } }