Esempio n. 1
0
        private static void addFlares(Bomb bomb)
        {
            bool obstaclefound;

            flares.Add(new Flare(bomb, 0, 0, graphics, scales));

            obstaclefound = false;
            for (int i = 1; i <= bomb.getPotency(); i++)
            {
                Flare flare = new Flare(bomb, i, 0, graphics, scales);
                foreach (Obstacle obs in obstacles.getList())
                {
                    if (obs != null && obs.intersects(flare))
                    {
                        if (obs.isSolid())
                        {
                            flare.setAsFinal();
                            obs.die();
                            obstaclefound = true;
                            break;
                        }
                        else
                        {
                            goto flaresloop1;
                        }
                    }
                }

                if (!obstaclefound)
                {
                    for (int x = 0; x < powerups.Count; x++)
                    {
                        PowerUps pu = powerups[x];
                        if (pu != null && pu.intersects(flare))
                        {
                            flare.setAsFinal();
                            powerups.Remove(powerups[x]);
                            break;
                        }
                    }
                }
                flares.Add(flare);
                if (flare.isFinal())
                {
                    break;
                }
            }

            flaresloop1 : obstaclefound = false;
            for (int i = -1; i >= -bomb.getPotency(); i--)
            {
                Flare flare = new Flare(bomb, i, 0, graphics, scales);
                foreach (Obstacle obs in obstacles.getList())
                {
                    if (obs != null && obs.intersects(flare))
                    {
                        if (obs.isSolid())
                        {
                            flare.setAsFinal();
                            obs.die();
                            obstaclefound = true;
                            break;
                        }
                        else
                        {
                            goto flaresloop2;
                        }
                    }
                }

                if (!obstaclefound)
                {
                    for (int x = 0; x < powerups.Count; x++)
                    {
                        PowerUps pu = powerups[x];
                        if (pu != null && pu.intersects(flare))
                        {
                            flare.setAsFinal();
                            powerups.Remove(powerups[x]);
                            break;
                        }
                    }
                }
                flares.Add(flare);
                if (flare.isFinal())
                {
                    break;
                }
            }

            flaresloop2 : obstaclefound = false;
            for (int i = 1; i <= bomb.getPotency(); i++)
            {
                Flare flare = new Flare(bomb, 0, i, graphics, scales);
                foreach (Obstacle obs in obstacles.getList())
                {
                    if (obs != null && obs.intersects(flare))
                    {
                        if (obs.isSolid())
                        {
                            flare.setAsFinal();
                            obs.die();
                            obstaclefound = true;
                            break;
                        }
                        else
                        {
                            goto flaresloop3;
                        }
                    }
                }

                if (!obstaclefound)
                {
                    for (int x = 0; x < powerups.Count; x++)
                    {
                        PowerUps pu = powerups[x];
                        if (pu != null && pu.intersects(flare))
                        {
                            flare.setAsFinal();
                            powerups.Remove(powerups[x]);
                            break;
                        }
                    }
                }
                flares.Add(flare);
                if (flare.isFinal())
                {
                    break;
                }
            }

            flaresloop3 : obstaclefound = false;
            for (int i = -1; i >= -bomb.getPotency(); i--)
            {
                Flare flare = new Flare(bomb, 0, i, graphics, scales);
                foreach (Obstacle obs in obstacles.getList())
                {
                    if (obs != null && obs.intersects(flare))
                    {
                        if (obs.isSolid())
                        {
                            flare.setAsFinal();
                            obs.die();
                            obstaclefound = true;
                            break;
                        }
                        else
                        {
                            goto flaresloop4;
                        }
                    }
                }

                if (!obstaclefound)
                {
                    for (int x = 0; x < powerups.Count; x++)
                    {
                        PowerUps pu = powerups[x];
                        if (pu != null && pu.intersects(flare))
                        {
                            flare.setAsFinal();
                            powerups.Remove(powerups[x]);
                            break;
                        }
                    }
                }
                flares.Add(flare);
                if (flare.isFinal())
                {
                    break;
                }
            }
            flaresloop4 :;
        }
Esempio n. 2
0
        public Flare(Bomb bomb, int xdif, int ydif, GraphicsContext g, Vector2 scale) : base(scale)
        {
            //super(obs, map, player);
            this.g          = g;
            this.position.X = -(w * scale.X) / 2 + ((int)Math.Round(((float)(bomb.position.X + w * scale.X / 2) / (w * scale.X))) + xdif) * (w * scale.X);
            this.position.Y = -(h * scale.Y) / 2 + ((int)Math.Round(((float)(bomb.position.Y + h * scale.X / 2) / (h * scale.Y))) + ydif) * (h * scale.Y);

            this.position.Width  = 12 * scale.X;
            this.position.Height = 14 * scale.Y;

            this.sl = new SpriteLoader();

            this.draw = true;


            if (xdif == 0 && ydif == 0)
            {
                ANIMATION = midflare;
            }
            else if (xdif == 0)
            {
                if (ydif > 0)
                {
                    FINALANIMATION = botflare;
                }
                else
                {
                    FINALANIMATION = topflare;
                }
                if (Math.Abs(ydif) == bomb.getPotency())
                {
                    if (ydif > 0)
                    {
                        ANIMATION = botflare;
                    }
                    else
                    {
                        ANIMATION = topflare;
                    }
                }
                else
                {
                    ANIMATION = verticalflare;
                }
            }
            else
            {
                if (xdif > 0)
                {
                    FINALANIMATION = rightflare;
                }
                else
                {
                    FINALANIMATION = leftflare;
                }
                if (Math.Abs(xdif) == bomb.getPotency())
                {
                    if (xdif > 0)
                    {
                        ANIMATION = rightflare;
                    }
                    else
                    {
                        ANIMATION = leftflare;
                    }
                }
                else
                {
                    ANIMATION = horizontalflare;
                }
            }

            this.sl = new SpriteLoader();
            this.sl.cargarImagen(ANIMATION);
            this.sl.setImage(sl.getImage().Resize(new ImageSize((int)(sl.getImage().Size.Width *scale.X),
                                                                (int)(sl.getImage().Size.Height *scale.Y))));
            this.ss = new SpriteSheet(this.sl.getImage());

            Sprite[] anim;
            if (ANIMATION == midflare)
            {
                this.anim = new Sprite[] { ss.obtenerSprite(0, 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(0 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(1 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(2 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(3 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(4 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g) };
            }
            else
            {
                this.anim = new Sprite[] { ss.obtenerSprite(0, 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(0 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(0 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(1 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(2 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g),
                                           ss.obtenerSprite((int)(3 * w * scale.X), 0, (int)(w * scale.X), (int)(h * scale.Y), g) };
            }

            // Animacion inicial
            animation = new Animation(this.anim, 3, Animation.Direction.DOWN);
            animation.start();
        }
Esempio n. 3
0
        public static void Update()
        {
            // Query gamepad for current state
            var gamePadData = GamePad.GetData(0);

            input.tick(gamePadData);

            if (time.ElapsedMilliseconds > 240 * 1000 && playing)
            {
                // Tiempo acabado, Game Over
                //if (player.isInvincible()) invincible.close();
                //else music[keymusic].stop();
                player.setLives(player.getLives() - 1);
                setMenu(new GameOverMenu(player.getLives(), level, levelmap, graphics, scales));
                time.Reset();
                time.Start();
            }

            if (menu != null)
            {
                menu.tick(input);
                playing = false;
            }
            else
            {
                // Si se han matado a todos los enemigos y no se ha cogido el powerup
                // el obstaculo sobre el que esta el powerup parpadea
                if (((Exit)exit).isActive() && powerups.Count > 0)
                {
                    foreach (Obstacle obs in obstacles.getList())
                    {
                        if (obs.intersects(powerups[0]))
                        {
                            obs.blink();
                            break;
                        }
                    }
                }

                // Tecla ESC, salir al menu principal
                if (input.exit.clicked)
                {
                    //if (player.isInvincible()) invincible.close();
                    //else music[keymusic].stop();
                    playing = false;
                    pause   = false;
                    //initLevel();
                    level    = 1;
                    levelmap = 1;
                    offsetX  = 0;
                    offsetY  = 0;
                    setMenu(new TitleMenu(graphics, scales));
                }

                // Tecla P, pausa
                if (input.pause.clicked)
                {
                    //if (player.isInvincible()) invincible.pause();
                    //else music[keymusic].pause();
                    pause = !pause;
                }

                if (!pause)
                {
                    // Si bomberman no es invencible, musica normal
                    if (!player.isInvincible())
                    {
                        //if (playing) music[keymusic].play();
                        //invincible.close();
                    }
                    // Si no, musica de invencibilidad
                    else
                    {
                        //if (playing) invincible.play();
                        //music[keymusic].pause();
                    }

                    // Primer frame en el que se ha acabado el nivel
                    if (player.endLvlFirst())
                    {
                        //music[keymusic].stop();
                        //if (!playing) invincible.close();
                        //level_clear.play();
                    }

                    playing = true;
                    player.tick(input);

                    // Si el jugador se ha muerto parar la musica de fondo
                    //				if (player.isDyingFirst()) {
                    //					music.get(keymusic).stop();
                    //				}

                    // Si se ha acabado el nivel
                    if (player.endLvl())
                    {
                        //level_clear.stop();
                        levelmap++;
                        if (levelmap > 8)
                        {
                            levelmap = 1;
                            level++;
                            if (level > 8)
                            {
                                setMenu(new CreditsMenu(graphics, scales));
                                return;
                            }
                            else
                            {
                                setMenu(new LevelMenu(level, graphics, scales));
                            }
                        }
                        else
                        {
                            setMenu(new MapMenu(level, levelmap, graphics, scales));
                        }
                        initLevel();
                        return;
                    }

                    // Detonacion remota de las bombas
                    if (player.hasRemoteDetonator() && input.remote.clicked && bombs.Count > 0)
                    {
                        bombs[0].removed = true;
                        Sounds.bomb.play();
                    }

                    // Detonacion normal de las bombas
                    if (input.fire.clicked && bombs.Count < player.getBombs())
                    {
                        Bomb bomb  = new Bomb(player, graphics, scales);
                        bool found = false;
                        foreach (Bomb b in bombs)
                        {
                            if (bomb.intersects(b))
                            {
                                found = true;
                                break;
                            }
                        }
                        if (!found)
                        {
                            foreach (Obstacle obs in obstacles.getList())
                            {
                                if (obs != null && obs.intersects(bomb))
                                {
                                    found = true;
                                    break;
                                }
                            }
                        }
                        if (!found && !player.isTeleporting() && !player.isDying())
                        {
                            bombs.Add(bomb);
                        }
                    }

                    // Tick de las salida
                    exit.tick();

                    // Comprobar si el jugador ha muerto
                    if (player.removed)
                    {
                        //music[keymusic].stop();
                        player.setLives(player.getLives() - 1);
                        if (player.getLives() < 0)
                        {
                            initLevel();
                            player.setLives(2);
                            setMenu(new GameOverMenu(continues, level, levelmap, graphics, scales));
                            continues--;
                        }
                        else
                        {
                            initLevel();
                            setMenu(new MapMenu(level, levelmap, graphics, scales));
                        }
                    }

                    // Comprobar si los enemigos han muerto y hacer tick
                    for (int i = 0; i < enemies.Count; i++)
                    {
                        if (enemies[i] != null)
                        {
                            if (enemies[i].removed)
                            {
                                player.setScore(player.getScore() + enemies[i].getScore());
                                enemies.Remove(enemies[i]);
                                break;
                            }
                            enemies[i].tick();
                        }
                    }

                    // Tick de los powerups
                    foreach (Entity e in powerups)
                    {
                        e.tick();
                    }

                    // Tick de las bombas
                    for (int i = 0; i < bombs.Count; i++)
                    {
                        bombs[i].tick();
                        if (bombs[i].removed)
                        {
                            addFlares(bombs[i]);
                            bombs.Remove(bombs[i]);
                            //t.join();
                        }
                    }

                    // Tick de las llamas
                    for (int i = 0; i < flares.Count; i++)
                    {
                        if (flares[i].removed)
                        {
                            flares.Remove(flares[i]);
                        }
                        else
                        {
                            flares[i].tick();
                        }
                    }

                    // Tick de los obstaculos
                    for (int i = 0; i < obstacles.getList().Count; i++)
                    {
                        obstacles.getList()[i].tick();
                        if (obstacles.getList()[i].removed)
                        {
                            obstacles.getList().Remove(obstacles.getList()[i]);
                        }
                    }

                    // Comprobar colisiones
                    checkCollisions();
                }
            }

            hud.UpdateFPS(timeDelta);
            hud.UpdatePosition(timeDelta + "ms");
            hud.UpdateEnemyCount(enemies.Count);
        }