Пример #1
0
        //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;
            }
        }
Пример #2
0
        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();
                }
            }
        }