public eksplozija unisten() { eksplozija explosion = new eksplozija(50, 50, Position, 0, 0); explosion.Velocity = Vector.CreateVectorFromAngle(0, 0); return(explosion); }
} //Sonde_Loop void Meteorite_Loop(TimeSpan elapsed) { bool DodajMeteor = false; if (Meteoriti.Count == 0) { DodajMeteor = true; } int dm = 550 - brojMeteora / 5; if (dm < 350) { dm = 350; } int slb = GetRandInt(1, dm); if (slb < 25) { DodajMeteor = true; } if (DodajMeteor) { brojMeteora++; if (brojMeteora % 10 == 0) { amunicija++; } Meteorite noviMeteor; int slb1, velicina; slb = GetRandInt(1, 5); velicina = GetRandInt(1, 5); int dodajBrzinu = 100 + brojMeteora * 2; if (dodajBrzinu > 400) { dodajBrzinu = 400; } switch (slb) { case 1: //meteor dolazi s slijeva slb1 = GetRandInt(0, 600); //početak putanje if (velicina != 1) { noviMeteor = new Meteorite(50, 50, new Point(5, slb1), GetRandInt(100, dodajBrzinu), GetRandInt(30, 150)); } else { noviMeteor = new Meteorite(25, 25, new Point(5, slb1), GetRandInt(100, dodajBrzinu), GetRandInt(30, 150)); } noviMeteor.MinY = 5; noviMeteor.MinX = 5; noviMeteor.MaxX = gameRoot.Width - 5; noviMeteor.MaxY = gameRoot.Height - 5; noviMeteor.Velocity = Vector.CreateVectorFromAngle(noviMeteor.kut, noviMeteor.brzina); Meteoriti.Add(noviMeteor); gameRoot.Children.Add(noviMeteor.SpriteCanvas); break; case 2: //sdesna slb1 = GetRandInt(0, 595); //početak putanje if (velicina != 1) { noviMeteor = new Meteorite(50, 50, new Point(gameRoot.Width - 5, slb1), GetRandInt(100, dodajBrzinu), GetRandInt(210, 330)); } else { noviMeteor = new Meteorite(25, 20, new Point(gameRoot.Width - 5, slb1), GetRandInt(100, dodajBrzinu), GetRandInt(210, 330)); } noviMeteor.MinY = 5; noviMeteor.MinX = 5; noviMeteor.MaxX = gameRoot.Width - 5; noviMeteor.MaxY = gameRoot.Height - 5; noviMeteor.Velocity = Vector.CreateVectorFromAngle(noviMeteor.kut, noviMeteor.brzina); Meteoriti.Add(noviMeteor); gameRoot.Children.Add(noviMeteor.SpriteCanvas); break; case 3: //od gore slb1 = GetRandInt(0, 745); //početak putanje if (velicina != 1) { noviMeteor = new Meteorite(50, 50, new Point(slb1, 5), GetRandInt(100, dodajBrzinu), GetRandInt(120, 150)); } else { noviMeteor = new Meteorite(20, 20, new Point(slb1, 5), GetRandInt(100, dodajBrzinu), GetRandInt(120, 150)); } noviMeteor.MinY = 5; noviMeteor.MinX = 5; noviMeteor.MaxX = gameRoot.Width - 5; noviMeteor.MaxY = gameRoot.Height - 5; noviMeteor.Velocity = Vector.CreateVectorFromAngle(noviMeteor.kut, noviMeteor.brzina); Meteoriti.Add(noviMeteor); gameRoot.Children.Add(noviMeteor.SpriteCanvas); break; case 4: //od dolje slb1 = GetRandInt(0, 745); //početak putanje if (velicina != 1) { noviMeteor = new Meteorite(50, 50, new Point(slb1, gameRoot.Height - 5), GetRandInt(100, dodajBrzinu), GetRandInt(300, 420)); } noviMeteor = new Meteorite(25, 25, new Point(slb1, gameRoot.Height - 5), GetRandInt(100, dodajBrzinu), GetRandInt(300, 420)); noviMeteor.MinY = 5; noviMeteor.MinX = 5; noviMeteor.MaxX = gameRoot.Width - 5; noviMeteor.MaxY = gameRoot.Height - 5; if (noviMeteor.kut > 360) { noviMeteor.kut -= 360; } noviMeteor.Velocity = Vector.CreateVectorFromAngle(noviMeteor.kut, noviMeteor.brzina); Meteoriti.Add(noviMeteor); gameRoot.Children.Add(noviMeteor.SpriteCanvas); break; } //switch(slb) } //if(DodajMeteor) foreach (Meteorite meteorit in Meteoriti) { if (Sprite.Collides(PlayerShip, meteorit)) { int ukupnaSteta = (meteorit.brzina / 2 + PlayerShip.brzina) / 10; if (meteorit.Width < 50) { ukupnaSteta /= 2; } if (stanjeStita > 0) { stanjeStita -= ukupnaSteta; } else { udarci++; zdravlje -= ukupnaSteta; } eksplozija explosion = meteorit.unisten(); Eksplozije.Add(explosion); Eksplozija_Zvuk(1); gameRoot.Children.Add(explosion.SpriteCanvas); MeteoritiRemove.Add(meteorit); if (zdravlje <= 0) { GameOver(); return; } } RotateTransform rotacija = new RotateTransform(); double rot = meteorit.rotacija + 1.5; if (rot >= 360) { meteorit.rotacija -= 360; } meteorit.rotacija = rot; rotacija.Angle = meteorit.rotacija; rotacija.CenterX = meteorit.CentarX; rotacija.CenterY = meteorit.CentarY; meteorit.SpriteCanvas.RenderTransform = rotacija; meteorit.Update(elapsed); if (meteorit.checkLocation()) { MeteoritiRemove.Add(meteorit); } } //foreach(Meteorite meteorit in Meteoriti) foreach (Meteorite meteorit in MeteoritiRemove) { Meteoriti.Remove(meteorit); gameRoot.Children.Remove(meteorit.SpriteCanvas); } MeteoritiRemove.Clear(); } //Meteorite_Loop
} //ExplosionLoop void Torpedo_Loop(TimeSpan elapsed) { foreach (Torpedo pucanj in Torpedi) { pucanj.Update(elapsed); if (pucanj.checkLocation()) { TorpediRemove.Add(pucanj); } foreach (Meteorite meteor in Meteoriti) { if (Sprite.Collides(pucanj, meteor)) { TorpediRemove.Add(pucanj); eksplozija explosion = meteor.unisten(); Eksplozije.Add(explosion); gameRoot.Children.Add(explosion.SpriteCanvas); Eksplozija_Zvuk(0.75); if (meteor.Width > 25) //ako je meteor veći, podjeliti ćemo ga u dva manja { Meteorite noviMeteor1, noviMeteor2; noviMeteor1 = new Meteorite(25, 25, meteor.Position, meteor.brzina * 2, pucanj.kut - 60); noviMeteor1.MinY = 0; noviMeteor1.MinX = 0; noviMeteor1.MaxX = gameRoot.Width; noviMeteor1.MaxY = gameRoot.Height; if (noviMeteor1.kut < 0) { noviMeteor1.kut += 360; } noviMeteor1.Velocity = Vector.CreateVectorFromAngle(noviMeteor1.kut, noviMeteor1.brzina); Meteoriti.Add(noviMeteor1); gameRoot.Children.Add(noviMeteor1.SpriteCanvas); noviMeteor2 = new Meteorite(25, 25, meteor.Position, meteor.brzina * 2, pucanj.kut + 60); noviMeteor2.MinY = 0; noviMeteor2.MinX = 0; noviMeteor2.MaxX = gameRoot.Width; noviMeteor2.MaxY = gameRoot.Height; if (noviMeteor2.kut > 360) { noviMeteor2.kut -= 360; } noviMeteor2.Velocity = Vector.CreateVectorFromAngle(noviMeteor2.kut, noviMeteor2.brzina); Meteoriti.Add(noviMeteor2); gameRoot.Children.Add(noviMeteor2.SpriteCanvas); } zdravlje += meteor.brzina / 25; MeteoritiRemove.Add(meteor); unisteniMeteoriti++; break; } //if(Sprite.Collides(pucanj, meteor)) } //foreach(Meteorite meteor in Meteoriti) foreach (Sonda sonda in Sonde) { if (Sprite.Collides(pucanj, sonda)) { TorpediRemove.Add(pucanj); eksplozija explosion = sonda.unistena(); Eksplozije.Add(explosion); gameRoot.Children.Add(explosion.SpriteCanvas); SondeRemove.Add(sonda); Eksplozija_Zvuk(0.75); break; } } foreach (Grumen grumen in Grumenje) { if (Sprite.Collides(pucanj, grumen)) { TorpediRemove.Add(pucanj); eksplozija explosion = grumen.unisten(); Eksplozije.Add(explosion); gameRoot.Children.Add(explosion.SpriteCanvas); GrumenjeRemove.Add(grumen); Eksplozija_Zvuk(0.75); break; } } } //foreach(Torpedo pucanj in Torpedi) foreach (Torpedo pucanj in TorpediRemove) { Torpedi.Remove(pucanj); gameRoot.Children.Remove(pucanj.SpriteCanvas); } TorpediRemove.Clear(); } //torpedo_Loop
} //btnStart_Click /*funkcija koja vrti glavni dio programa*/ void gameLoop_Update(TimeSpan elapsed) { if (torpedoCooldown > 0) { torpedoCooldown--; } if (pauseCooldown > 0) { pauseCooldown--; } /*detekcija korisnikova unosa*/ if (status == GameState.pokrenuto) { PlayerShip.Velocity = new Vector(0, 0); if (keyHandler.IsKeyPressed(Key.Left) || keyHandler.IsKeyPressed(Key.A)) { if (PlayerShip.kut == 0) { PlayerShip.kut = 355; } else { PlayerShip.kut -= 5; } } if (keyHandler.IsKeyPressed(Key.Right) || keyHandler.IsKeyPressed(Key.D)) { if (PlayerShip.kut == 355) { PlayerShip.kut = 0; } else { PlayerShip.kut += 5; } } if ((keyHandler.IsKeyPressed(Key.Up) || keyHandler.IsKeyPressed(Key.W)) && PlayerShip.brzina < maxBrzina) { PlayerShip.brzina += 5; } if ((keyHandler.IsKeyPressed(Key.Down) || keyHandler.IsKeyPressed(Key.S)) && PlayerShip.brzina > minBrzina) { if (PlayerShip.brzina > minBrzina) { PlayerShip.brzina -= 5; } } if ((keyHandler.IsKeyPressed(Key.Space) || keyHandler.IsKeyPressed(Key.NumPad0)) && amunicija > 0 && torpedoCooldown == 0) { torpedoCooldown = 10; Torpedo pucanj = PlayerShip.Fire(); pucanj.MinX = pucanj.MinY = 0; pucanj.MaxX = gameRoot.Width; pucanj.MaxY = gameRoot.Height; Torpedi.Add(pucanj); gameRoot.Children.Add(pucanj.SpriteCanvas); Torpedo_Zvuk(0.5); RotateTransform rotate = new RotateTransform(); rotate.Angle = PlayerShip.kut; rotate.CenterX = pucanj.CentarX; rotate.CenterY = pucanj.CentarY; pucanj.SpriteCanvas.RenderTransform = rotate; amunicija--; } if ((keyHandler.IsKeyPressed(Key.Delete) || keyHandler.IsKeyPressed(Key.Y)) && pauseCooldown == 0) { status = GameState.pauza; gameRoot.Visibility = Visibility.Collapsed; cnvInfo.Visibility = Visibility.Visible; pauseCooldown = 10; Style stil = gameRoot.Resources["btnStyle3"] as Style; btnStart.Style = stil; //Canvas.Left="269" Canvas.Top="446" LayoutRoot.Children.Add(btnStart); } if ((keyHandler.IsKeyPressed(Key.NumPad2) || keyHandler.IsKeyPressed(Key.Ctrl)) && brojStitova > 0 && stanjeStita == 0) { brojStitova--; stanjeStita = 100; Point pozicija = new Point(); pozicija = PlayerShip.Position; int brzina = PlayerShip.brzina; int kut = PlayerShip.kut; gameRoot.Children.Remove(PlayerShip.SpriteCanvas); PlayerShip = new Ship(30, 20, pozicija, brzina, kut, 1); PlayerShip.MaxX = gameRoot.Width - 30; PlayerShip.MaxY = gameRoot.Height - 30; PlayerShip.MinX = 10; PlayerShip.MinY = 10; gameRoot.Children.Add(PlayerShip.SpriteCanvas); } if ((keyHandler.IsKeyPressed(Key.X) || keyHandler.IsKeyPressed(Key.Enter)) && amunicija >= 10 && torpedoCooldown == 0 && killZonePresent == 0) { torpedoCooldown = 10; amunicija -= 10; killzone = new KillZone(300, 300, PlayerShip.Position, 0, 0); killZonePresent = 200; gameRoot.Children.Add(killzone.SpriteCanvas); Torpedo_Zvuk(1); foreach (Meteorite meteor in Meteoriti) { if (Sprite.Collides(killzone, meteor)) { eksplozija explosion = meteor.unisten(); Eksplozije.Add(explosion); gameRoot.Children.Add(explosion.SpriteCanvas); MeteoritiRemove.Add(meteor); unisteniMeteoriti++; Eksplozija_Zvuk(0.3); } } foreach (Sonda sonda in Sonde) { if (Sprite.Collides(killzone, sonda)) { eksplozija explosion = sonda.unistena(); Eksplozije.Add(explosion); gameRoot.Children.Add(explosion.SpriteCanvas); SondeRemove.Add(sonda); Eksplozija_Zvuk(0.3); } } foreach (Grumen grumen in Grumenje) { if (Sprite.Collides(killzone, grumen)) { eksplozija explosion = grumen.unisten(); Eksplozije.Add(explosion); gameRoot.Children.Add(explosion.SpriteCanvas); GrumenjeRemove.Add(grumen); Eksplozija_Zvuk(0.3); } } } if (zdravlje < 100) { zdravlje += 0.0001 * PlayerShip.brzina; } else { zdravlje = 100; } if (stanjeStita > 0) { stanjeStita -= 0.1; } else { stanjeStita = 0; } if (stanjeStita == 0) { Point pozicija = new Point(); pozicija = PlayerShip.Position; gameRoot.Children.Remove(PlayerShip.SpriteCanvas); int brzina = PlayerShip.brzina; int kut = PlayerShip.kut; PlayerShip = new Ship(30, 20, pozicija, brzina, kut, 0); PlayerShip.MaxX = gameRoot.Width - 30; PlayerShip.MaxY = gameRoot.Height - 30; PlayerShip.MinX = 10; PlayerShip.MinY = 10; gameRoot.Children.Add(PlayerShip.SpriteCanvas); } RotateTransform rotacija = new RotateTransform(); rotacija.Angle = PlayerShip.kut; rotacija.CenterX = 16.5; rotacija.CenterY = 25; PlayerShip.SpriteCanvas.RenderTransform = rotacija; PlayerShip.Velocity = Vector.CreateVectorFromAngle(PlayerShip.kut, PlayerShip.brzina); PlayerShip.Update(elapsed); Meteorite_Loop(elapsed); Torpedo_Loop(elapsed); ExplosionLoop(elapsed); InformacijeLoop(elapsed); GrumenjeLoop(elapsed); Sonde_Loop(elapsed); if (killZonePresent > 0) { KillZoneLoop(elapsed); } /*ažuriranje podataka na korisničkom sučelju*/ MP.MeteoriScore = brojMeteora; TA.TorpediAmunicija = amunicija; UM.MeteoriUnisteni = unisteniMeteoriti; zdravljeBroda.Health = zdravlje; KZ.Update(killZonePresent, amunicija); GS.Bodovi = pokupljeniGrumeni; SS.BrojStitova = brojStitova; SS.StanjeStita = stanjeStita; } else { if ((keyHandler.IsKeyPressed(Key.Delete) || keyHandler.IsKeyPressed(Key.Y)) && pauseCooldown == 0) { odpauziraj(); } } } //gameLoop_Update