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; } } } } } } }
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); }
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); }