Ejemplo n.º 1
0
 public override void Update(GameTime gameTime)
 {
     if (!isActive)
     {
         foreach (SceneElement se in w.SceneElements)
         {
             if (se is TankEnemy)
             {
                 if ((se as TankEnemy).IsOnBridge)
                 {
                     TankEnemy te = se as TankEnemy;
                     if (te.RectPosition.Intersects(RectPosition))
                     {
                         te.IsActive = false;
                     }
                     else
                     {
                         te.RectEnd = new Rectangle(1, 1, 1, 1);
                         if (RectPosition.X > te.RectPosition.X)
                         {
                             te.Direction = Direction.LeftToRight;
                         }
                         else
                         {
                             te.Direction = Direction.RightToLeft;
                         }
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
        protected override void Update(GameTime gameTime)
        {
            KeyboardState currentState = Keyboard.GetState();

            Keys[] currentKeys = currentState.GetPressedKeys();

            foreach (Keys keys in currentKeys)
            {
                if (keys == Keys.Escape)
                {
                    this.Exit();
                }

                if (keys == Keys.F2 && !gameover)
                {
                    if (firstrun)
                    {
                        firstrun = false;
                        paused   = false;
                    }
                    else
                    {
                        if (gameTime.TotalGameTime.Milliseconds % 100 == 0)
                        {
                            paused = !paused;
                        }
                    }
                }
                if (keys == Keys.F5)
                {
                    initNewGame();
                    fuel     = 100;
                    points   = 0;
                    paused   = false;
                    gameover = false;
                    firstrun = true;
                    win      = false;
                }
            }

            if (!paused && !gameover)
            {
                ScrollingWorld.Update(gameTime);
            }

            for (int i = 0; i < Explosions.Length; i++)
            {
                if (Explosions[i].IsActive)
                {
                    Explosions[i].Update(gameTime);
                }
            }

            foreach (SceneElement e in w.SceneElements)
            {
                e.Update(gameTime);
            }

            for (int i = 0; i < w.Collisions.Length; i++)
            {
                int wo = Math.Abs(w.offsetY);
                int cy = w.Collisions[i].Y;

                Rectangle tr = new Rectangle(w.Collisions[i].X, w.Collisions[i].Y + w.offsetY,
                                             w.Collisions[i].Width, w.Collisions[i].Height);

                if (player.RectPosition.Intersects(tr))
                {
                    Explosions[0].Position = player.RectPosition;
                    Explosions[0].IsActive = true;
                    player.IsActive        = false;
                    gameover = true;
                }
            }

            for (int i = 0; i < Bullets.Length; i++)
            {
                if (Bullets[i].IsActive)
                {
                    Bullets[i].Update(gameTime);
                }
            }

            for (int i = 0; i < w.SceneElements.Count; i++)
            {
                if (w.SceneElements[i].IsActive)
                {
                    Rectangle tr = new Rectangle(
                        w.SceneElements[i].RectPosition.X,
                        w.SceneElements[i].RectPosition.Y + w.offsetY,
                        w.SceneElements[i].Width,
                        w.SceneElements[i].Height);

                    if (w.SceneElements[i] is TankEnemy)
                    {
                        TankEnemy te = w.SceneElements[i] as TankEnemy;
                        for (int b = 0; b < te.Bullets.Length; b++)
                        {
                            if (te.Bullets[b].RectPosition.Intersects(player.RectPosition))
                            {
                                player.IsActive = false;
                                gameover        = true;
                            }
                        }
                    }

                    if (tr.Intersects(player.RectPosition))
                    {
                        w.SceneElements[i].IsActive = false;
                        Explosions[0].IsActive      = true;
                        Explosions[0].Position      = tr;
                        Explosions[1].IsActive      = true;
                        Explosions[1].Position      = player.RectPosition;
                        player.IsActive             = false;
                        gameover = true;
                    }

                    for (int j = 0; j < Bullets.Length; j++)
                    {
                        if (Bullets[j].IsActive)
                        {
                            if (tr.Intersects(Bullets[j].RectPosition))
                            {
                                points += 10;
                                for (int k = 0; k < Explosions.Length; k++)
                                {
                                    if (!Explosions[k].IsActive)
                                    {
                                        Explosions[k].IsActive      = true;
                                        Explosions[k].Position      = tr;
                                        w.SceneElements[i].IsActive = false;
                                        Bullets[j].IsActive         = false;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            for (int f = 0; f < w.Fuels.Length; f++)
            {
                Rectangle tr = new Rectangle(
                    w.Fuels[f].X,
                    w.Fuels[f].Y + w.offsetY,
                    RiverRide.FuelTexture.Width,
                    RiverRide.FuelTexture.Height);

                for (int b = 0; b < Bullets.Length; b++)
                {
                    if (Bullets[b].IsActive)
                    {
                        if (tr.Intersects(Bullets[b].RectPosition))
                        {
                            for (int k = 0; k < w.Fuels.Length; k++)
                            {
                                if (w.Fuels[k] != new Rectangle(1, 1, 1, 1))
                                {
                                    for (int e = 0; e < Explosions.Length; e++)
                                    {
                                        if (!Explosions[e].IsActive)
                                        {
                                            Explosions[e].IsActive = true;
                                            Explosions[e].Position = tr;
                                            break;
                                        }
                                    }

                                    w.Fuels[k]          = new Rectangle(1, 1, 1, 1);
                                    Bullets[b].IsActive = false;
                                    break;
                                }
                            }
                        }
                    }
                }

                if (w.Fuels[f] != new Rectangle(1, 1, 1, 1))
                {
                    if (tr.Intersects(player.RectPosition))
                    {
                        if (gameTime.TotalGameTime.Milliseconds % 100 == 0)
                        {
                            if (fuel + 1 <= 100)
                            {
                                ++fuel;
                            }
                            ;
                        }
                    }
                }
            }

            if (gameTime.TotalGameTime.Milliseconds % 200 == 0)
            {
                if (fuel - 1 >= 0)
                {
                    if (!gameover && !paused && !firstrun)
                    {
                        fuel--;
                    }
                }
                else
                {
                    Explosions[0].IsActive = true;
                    player.IsActive        = false;
                    gameover = true;
                    Explosions[0].Position = player.RectPosition;
                    w.EndOfScrolling       = true;
                }
            }

            if (gameover)
            {
                return;
            }

            player.Update(gameTime);

            if (firstrun)
            {
                paused = true;
            }

            base.Update(gameTime);
        }
Ejemplo n.º 3
0
        public World initWorld(string mapFile)
        {
            World w = new World();

            w.SceneElements = new List <SceneElement>();

            List <Rectangle> rectCollisions = new List <Rectangle>();
            List <Rectangle> fuels          = new List <Rectangle>();
            List <Rectangle> bridges        = new List <Rectangle>();

            XmlTextReader xmlReader = new XmlTextReader(mapFile);

            while (xmlReader.Read())
            {
                xmlReader.MoveToElement();
                if (xmlReader.Name == "area")
                {
                    string tmpv = "";
                    if (xmlReader["nohref"] == "nohref")
                    {
                        string[]  ctmp       = xmlReader["coords"].Split(',');
                        Rectangle rtLeftSide = new Rectangle(int.Parse(ctmp[0]), int.Parse(ctmp[1]), int.Parse(ctmp[2]) - int.Parse(ctmp[0]), int.Parse(ctmp[3]) - int.Parse(ctmp[1]));
                        rectCollisions.Add(rtLeftSide);

                        Rectangle rtRightSide = new Rectangle()
                        {
                            X      = RiverRide.SCREEN_WIDTH - rtLeftSide.X - rtLeftSide.Width,
                            Y      = rtLeftSide.Y,
                            Height = rtLeftSide.Height,
                            Width  = rtLeftSide.Width
                        };
                        rectCollisions.Add(rtRightSide);
                    }
                    if ((tmpv = xmlReader["href"]) != null)
                    {
                        string[]  ctmp = xmlReader["coords"].Split(',');
                        Rectangle rt   = new Rectangle(int.Parse(ctmp[0]), int.Parse(ctmp[1]), int.Parse(ctmp[2]) - int.Parse(ctmp[0]), int.Parse(ctmp[3]) - int.Parse(ctmp[1]));

                        if (tmpv.StartsWith("enemyt"))
                        {
                            string[]     tmp = tmpv.Split('_');
                            SceneElement e   = null;
                            string       id  = "";
                            if ((e = w.getEnemy(id = tmp[0] + tmp[1])) == null)
                            {
                                switch (tmp[0])
                                {
                                case "enemyt1":
                                    e = new ShipEnemy(new Texture2D[]
                                    {
                                        RiverRide.ShipEnemyTexture1,
                                        RiverRide.ShipEnemyTexture2
                                    }, id, w);
                                    break;

                                case "enemyt2":
                                    e = new HellicopterEnemy(new Texture2D[]
                                    {
                                        RiverRide.HelicopterEnemyTexture1,
                                        RiverRide.HelicopterEnemyTexture2
                                    }, id, w);
                                    break;

                                case "enemyt3":
                                    e = new TankEnemy(new Texture2D[]
                                    {
                                        RiverRide.TankEnemyTexture1,
                                        RiverRide.TankEnemyTexture2
                                    }, id, w);
                                    break;

                                case "enemyt4":
                                    e = new Su22Enemy(new Texture2D[]
                                    {
                                        RiverRide.Su22EnemyTexture1,
                                        RiverRide.Su22EnemyTexture2
                                    }, id, w);
                                    break;
                                }
                                w.SceneElements.Add(e);
                            }
                            if (tmp[2] == "start")
                            {
                                e.RectStart    = rt;
                                e.RectPosition = rt;
                                if (tmp.Length == 4)
                                {
                                    if (tmp[3] == "onbridge")
                                    {
                                        (e as TankEnemy).IsOnBridge = true;
                                    }
                                }
                            }

                            else if (tmp[2] == "end")
                            {
                                e.RectEnd = rt;
                            }
                        }
                        if (tmpv == "island")
                        {
                            rectCollisions.Add(new Rectangle(int.Parse(ctmp[0]), int.Parse(ctmp[1]), int.Parse(ctmp[2]) - int.Parse(ctmp[0]), int.Parse(ctmp[3]) - int.Parse(ctmp[1])));
                        }
                        if (tmpv == "bridge")
                        {
                            Bridge b = new Bridge(new Texture2D[]
                            {
                                RiverRide.Bridge,
                                RiverRide.Bridge
                            }, "", w);
                            b.RectStart    = rt;
                            b.RectPosition = rt;
                            w.SceneElements.Add(b);
                        }
                        if (tmpv == "fuel")
                        {
                            Rectangle rtf = new Rectangle(int.Parse(ctmp[0]), int.Parse(ctmp[1]), int.Parse(ctmp[2]) - int.Parse(ctmp[0]), int.Parse(ctmp[3]) - int.Parse(ctmp[1]));
                            fuels.Add(new Rectangle()
                            {
                                X      = rtf.X,
                                Y      = rtf.Y,
                                Width  = RiverRide.FuelTexture.Width,
                                Height = RiverRide.FuelTexture.Height
                            });
                        }
                    }
                }
            }
            xmlReader.Close();
            w.Collisions = rectCollisions.ToArray <Rectangle>();
            Array.Sort(w.Collisions, new RectrangleComparer());
            w.Bridges = bridges.ToArray <Rectangle>();
            w.Fuels   = fuels.ToArray <Rectangle>();

            return(w);
        }