/// <summary> /// provjera je li neprijateljski metak se sudario /// </summary> /// <param name="scene">scene</param> void ProvjeriNeprijateljskiMetak(GlavnaScena scene) { // Provjera je li metak neprijateljski if (Collider.Tags[0] == (int)Oznake.Neprijatelj) { // Provjeri je li se sudara s objektima od igrača if (Collider.CollideEntity(X, Y, Oznake.Igrac) != null) { // je li se sudario s igračem if (!(Collider.CollideEntities(X, Y, Oznake.Igrac)[0].GetType() == typeof(Metak))) { if (scene.Igrac.JeZiv) { RemoveSelf(); scene.Igrac.ZivotiIgraca -= 1; scene.Igrac.Smrt(); scene.PreostaloZivotaText.String = scene.Igrac.ZivotiIgraca.ToString(); scene.PreostaloZivotaText.Refresh(); } // Check if enemy bullet collides with player bullet else { RemoveSelf(); } } } } }
/// <summary> /// Azuriraj pokrete igrača /// </summary> void AzurirajKretanje() { GlavnaScena glavnaScena = Program.Igra.GetScene <GlavnaScena>(); if (JeZiv) { // provjeri jel se igrač kreće lijevo if (Input.KeyDown(Key.A) || Input.KeyDown(Key.Left)) { X -= BrzinaKretanja; } // provjeri jel se igrač kreće desno if (Input.KeyDown(Key.D) || Input.KeyDown(Key.Right)) { X += BrzinaKretanja; } // provjeri jel igrač puca if (Input.KeyDown(Key.Space) && !metak.Visible) { Pucaj(); } } // Check if player is in play area if (X < glavnaScena.PlayPosition.X) { X = glavnaScena.PlayPosition.X; } else if (X > glavnaScena.PlayPosition.X + glavnaScena.PlayWidth.X) { X = glavnaScena.PlayPosition.X + glavnaScena.PlayWidth.X; } }
public Igrac() { GlavnaScena glavnaScena = Program.Igra.GetScene <GlavnaScena>(); // Set position SetPosition(new Vector2(glavnaScena.PlayPosition.X + glavnaScena.PlayWidth.X, glavnaScena.PlayPosition.Y + glavnaScena.PlayWidth.Y)); // Set image AddGraphic(SlikaIgraca); // Add collider BoxCollider Collider = new BoxCollider(30, 30, Oznake.Igrac); AddCollider(Collider); // Initialize bullet Image metakIgraca = new Image("Slike/playerBullet.png"); BoxCollider bulletCollider = new BoxCollider(metakIgraca.Width, metakIgraca.Height, Oznake.Igrac); metak = new Metak(-6.0f, new Vector2(0, 0), bulletCollider); metak.Visible = false; metak.Collidable = false; metak.AddGraphic(metakIgraca); glavnaScena.Add(metak); }
/// <summary> /// Inicijalizacija igre /// mora se dodati u prvu scenu prije pozivanja /// </summary> public void Initialize() { OnBegin = delegate { Neprijatelj.Postavljanje(); Stit.Postavljanje(); GlavnaScena scene = Program.Igra.GetScene <GlavnaScena>(); Ufo = new UFO(); Program.Igra.GetScene <GlavnaScena>().Add(Ufo); // Create player and add to scene Igrac = new Igrac(); Add(Igrac); // Gametext for the entire game pretty much #region gameText var background = new Image("Slike/background.png"); background.Alpha = 0.4f; scene.AddGraphic(background); //Setting a default config file for the RichText to use var txtConfig = new RichTextConfig() { TextAlign = TextAlign.Center, CharColor = Color.Green, FontSize = 18, SineAmpX = 1, SineAmpY = 2, SineRateX = 1, Font = new Font("Slike/VCR_OSD_MONO.ttf"), }; // Writing the text graphics and setting position var livesLeftTxtLabel = new RichText("Zivoti", txtConfig); livesLeftTxtLabel.SetPosition(50, 16); scene.PreostaloZivotaText = new RichText(scene.Igrac.ZivotiIgraca.ToString(), txtConfig); scene.PreostaloZivotaText.Name = "livesLeftTxt"; scene.PreostaloZivotaText.SetPosition(70, 32); var curScoreTxtLabel = new RichText("Bodovi", txtConfig); curScoreTxtLabel.SetPosition(650, 15); scene.TrenutniBodoviText = new RichText(scene.Igrac.IznosBodova.ToString(), txtConfig); scene.TrenutniBodoviText.Name = "curScoreTxt"; scene.TrenutniBodoviText.SetPosition(670, 32); // Adds Graphic to Scene scene.AddGraphic(livesLeftTxtLabel); scene.AddGraphic(curScoreTxtLabel); scene.AddGraphic(scene.PreostaloZivotaText); scene.AddGraphic(scene.TrenutniBodoviText); #endregion gameText }; }
/// <summary> /// Check if bullet collides with entities. /// </summary> void ProvjeriSudaranjeMetka() { GlavnaScena glavnaScena = Program.Igra.GetScene <GlavnaScena>(); ProvjeriMetakIgraca(glavnaScena); ProvjeriNeprijateljskiMetak(glavnaScena); CheckBarricade(glavnaScena); CheckUfo(glavnaScena); }
/// <summary> /// Provjera je li metak pogodio UFO neparijetelja /// </summary> /// <param name="glavnaScena">scene</param> void CheckUfo(GlavnaScena glavnaScena) { UFO ufo = (UFO)Collider.CollideEntity(X, Y, Oznake.Ufo); // ako se sudario s UFO, ukloni ga if (ufo != null) { ufo.Smrt(); glavnaScena.Igrac.IznosBodova += ufo.Bodovi; glavnaScena.Igrac.metak.Visible = false; glavnaScena.Igrac.metak.Collidable = false; } }
static void Main(string[] args) { // Creates game window Igra = new Game("Andrea Space Invader", 800, 600, 60, false); Igra.Color = Color.Blue; FreeConsole(); // Kreiranje scene igre GlavnaScena glavnaScena = new GlavnaScena(); Igra.AddScene(glavnaScena); glavnaScena.Initialize(); Igra.WindowResize = false; Igra.SetIcon("Slike/windowPicture.png"); Igra.Start(); }
/// <summary> /// Ažurira metak /// </summary> public override void Update() { base.Update(); if (Visible) { Y += BrzinaKretanja; ProvjeriGraniceMetka(); ProvjeriSudaranjeMetka(); // provjeri je li igrač ima 0 života, ako ima 0, završi igru GlavnaScena glavnaScena = Program.Igra.GetScene <GlavnaScena>(); if (BrojZivota == 0) { Game.SwitchScene(new HighScoresScene(glavnaScena.Igrac.IznosBodova)); } } }
/// <summary> /// Ažuriraj kretanje /// </summary> void AzurirajKretanje() { GlavnaScena glavnaScena = Program.Igra.GetScene <GlavnaScena>(); List <Neprijatelj> neprijatelji = Scene.GetEntities <Neprijatelj>(); SetPosition(Position + SmjerKretanja); // Provjeri je li se neprijatelj pomakao 24p po Y osi, ako jeste pomakni ga u X os if (VisinaPomaka <= 0) { SmjerKretanja = SljedeciSmjerKretanja; VisinaPomaka = 24; SePomaknuo = true; } // Provjeri je li neprijatelj na krajnjoj desnoj strani ekrana, ako jeste, spusti ga dole if (Position.X > glavnaScena.GetPlayArea().X) { SetPosition(Position - SmjerKretanja); SmjerKretanja = new Vector2(0.0f, BrzinaKretanja); SljedeciSmjerKretanja = new Vector2(-1.0f * BrzinaKretanja, 0.0f); } // Provjeri je li neprijatelj na krajnjoj lijevoj strani ekrana, ako jeste, spusti ga dole if (Position.X < glavnaScena.PlayPosition.X) { SetPosition(Position - SmjerKretanja); SmjerKretanja = new Vector2(0.0f, BrzinaKretanja); SljedeciSmjerKretanja = new Vector2(1.0f * BrzinaKretanja, 0.0f); } // Provjeri je li neprijatelj na najnižoj točki, ako jeste, završi igru if (Position.Y >= glavnaScena.GetPlayArea().Y - 100) { Game.SwitchScene(new HighScoresScene(glavnaScena.Igrac.IznosBodova)); } // Pomiče neprijatelja VisinaPomaka -= SmjerKretanja.Y / neprijatelji.Count; }
/// <summary> /// provjeri sudaranje sa štitom /// </summary> /// <param name="glavnaScena">scene</param> void CheckBarricade(GlavnaScena glavnaScena) { Stit stit = (Stit)Collider.CollideEntity(X, Y, Oznake.Stit); if (stit != null) { // provjera je li igračev metak pogodio štit if (Collider.Tags[0] == (int)Oznake.Igrac) { stit.OstetiSe(); Visible = false; Collidable = false; } // provjera je li neprijateljev metak pogodio štit else { stit.OstetiSe(); RemoveSelf(); } } }
/// <summary> /// Check if player bullet collides with entities. /// </summary> /// <param name="glavnaScena">scene</param> void ProvjeriMetakIgraca(GlavnaScena glavnaScena) { // Check if bullet is player bullet if (Collider.Tags[0] == (int)Oznake.Igrac) { // Provjeri je li se metak sudario s neprijateljima if (Collider.CollideEntity(X, Y, Oznake.Neprijatelj) != null) { // provjeri je li metak pogodio metak if ((Collider.CollideEntities(X, Y, Oznake.Neprijatelj)[0].GetType() == typeof(Metak))) { Collider.CollideEntities(X, Y, Oznake.Neprijatelj)[0].RemoveSelf(); Visible = false; Collidable = false; } // Check if bullet hits enemy else { Neprijatelj neprijatelj = (Neprijatelj)Collider.CollideEntities(X, Y, Oznake.Neprijatelj)[0]; neprijatelj.RemoveSelf(); Visible = false; Collidable = false; if (glavnaScena.GetEntities <Neprijatelj>().Count <= 1) { glavnaScena.NextLevel(); } glavnaScena.Igrac.IznosBodova += neprijatelj.Bodovi; glavnaScena.TrenutniBodoviText.String = glavnaScena.Igrac.IznosBodova.ToString(); Program.TrenutniBodoviTekst = glavnaScena.Igrac.IznosBodova.ToString(); glavnaScena.TrenutniBodoviText.Refresh(); } } } }
/// <summary> /// Učitava sve neprijatelje po levelu /// </summary> /// <param level="level">level koji treba učitati</param> public static void UcitajNeprijatelje(string level) { GlavnaScena glavnaScena = Program.Igra.GetScene <GlavnaScena>(); List <string> neprijateljiLevel = DohvatiNeprijatelje(level); // Current enemy position to load Vector2 trenutnaPozicija = new Vector2(glavnaScena.PlayPosition.X, glavnaScena.PlayPosition.Y); foreach (var n in neprijateljiLevel) { Neprijatelj neprijatelj = SviNeprijatelji[n](); neprijatelj.Position = trenutnaPozicija; glavnaScena.Add(neprijatelj); // Set enemy position trenutnaPozicija.X += VelicinaNeprijatelja; if (trenutnaPozicija.X > 420) { trenutnaPozicija.X = glavnaScena.PlayPosition.X; trenutnaPozicija.Y += VelicinaNeprijatelja; } } }
/// <summary> /// poziva svaki frame /// </summary> public override void Update() { base.Update(); Ozivljavanje.Update(); if (!JeZiv && Ozivljavanje.AtMax) { GlavnaScena glavnaScena = Program.Igra.GetScene <GlavnaScena>(); JeZiv = true; RemoveGraphic(SlikaUnistenogIgraca); AddGraphic(SlikaIgraca); glavnaScena.Igrac.SetPosition(new Vector2(glavnaScena.PlayPosition.X + glavnaScena.PlayWidth.X, glavnaScena.PlayPosition.Y + glavnaScena.PlayWidth.Y)); } AzurirajKretanje(); //If playerLives are 0, then switch to highscore screen if (ZivotiIgraca == 0) { Game.SwitchScene(new HighScoresScene(IznosBodova)); } }