Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- using Jypeli;
- using Jypeli.Assets;
- using Jypeli.Controls;
- using Jypeli.Effects;
- using Jypeli.Widgets;
- /// @author Sanni Laine ja Milla Patrikainen
- /// @version 11.12.2017
- /// <summary>
- /// Harkkatyö: Banaanijahti
- /// </summary>
- public class HARKKATYO : PhysicsGame
- {
- private double APINAN_NOPEUS = 200;
- private double POMMIEN_MAARA = 8;
- private const double BANAANIEN_MAARA = 13;
- private const double KOKO = 80;
- private const double ALKUVAUHTI = 50;
- private IntMeter apinanPisteet;
- private PhysicsObject apina;
- private EasyHighScore topLista = new EasyHighScore();
- private Timer ajastin;
- private RandomMoverBrain satunnaisAivot;
- readonly Image banaaninKuva = LoadImage("banaanirajattu");
- readonly Image apinanKuva = LoadImage("apina");
- readonly Image pomminKuva = LoadImage("pommirajattu");
- readonly Image viidakkoKuva = LoadImage("viidakkotausta");
- private List<Image> kuvat;
- public override void Begin()
- {
- SetWindowSize(1000, 800);
- Level.Size = new Vector(1000, 800);
- kuvat = new List<Image>() { banaaninKuva, apinanKuva, pomminKuva, viidakkoKuva };
- LuoKentta();
- AlkuValikko();
- }
- /// <summary>
- /// Luodaan peliin alkuvalikko.
- /// </summary>
- private void AlkuValikko()
- {
- MultiSelectWindow valikko = new MultiSelectWindow("Pelin alkuvalikko",
- "Aloita peli", "Parhaat pisteet", "Lopeta");
- valikko.Color = Color.GreenYellow;
- valikko.ItemSelected += PainettiinValikonNappia;
- Add(valikko);
- }
- /// <summary>
- /// Alkuvalikon kutsuminen.
- /// </summary>
- /// <param name="sender">Sender.</param>
- private void AlkuValikkoon(Window sender)
- {
- AlkuValikko();
- }
- /// <summary>
- /// Aliohjelma määrää mitä tapahtuu, kun
- /// painetaan valikon nappeja.
- /// </summary>
- /// <param name="valinta">Valittu vaihtoehto.</param>
- private void PainettiinValikonNappia(int valinta)
- {
- switch (valinta)
- {
- case 0:
- AloitaPeli();
- break;
- case 1:
- ParhaatPisteet();
- break;
- case 2:
- Exit();
- break;
- }
- }
- /// <summary>
- /// Käsitellään mitä tapahtuu kun apina törmää pommiin
- /// </summary>
- /// <param name="apina">törmäävä apina</param>
- /// <param name="pommi">pommi johon törmätään</param>
- private void ApinaTormasiPommiin(PhysicsObject apina, PhysicsObject pommi)
- {
- Explosion rajahdys = new Explosion(apina.Width * 3);
- rajahdys.Position = apina.Position;
- rajahdys.UseShockWave = false;
- this.Add(rajahdys);
- apina.Destroy();
- ajastin.Stop();
- topLista.EnterAndShow(apinanPisteet.Value);
- topLista.HighScoreWindow.Closed += AlkuValikkoon;
- }
- /// <summary>
- /// Aloitetaan peli.
- /// </summary>
- private void AloitaPeli()
- {
- ClearAll();
- LuoKentta();
- LisaaLaskurit();
- AsetaOhjaimet();
- ajastin = new Timer();
- ajastin.Interval = 1.5;
- ajastin.Timeout += delegate ()
- {
- LuoSatunnainenBanaani(this, Level.Left, Level.Bottom, Level.Right, 0, ALKUVAUHTI, "banaani");
- };
- ajastin.Start();
- AddCollisionHandler(apina, "pommi", ApinaTormasiPommiin);
- AddCollisionHandler(apina, "banaani", ApinaTormasiBanaaniin);
- }
- /// <summary>
- /// Näyttää pelaajan pisteet kun peli päättyy.
- /// </summary>
- void ParhaatPisteet()
- {
- topLista.Show();
- topLista.HighScoreWindow.Closed += AlkuValikkoon;
- }
- /// <summary>
- /// Aliohjelma lisää pelaajan pisteitä, kun apina törmää banaaniin.
- /// </summary>
- /// <param name="apina">apina</param>
- /// <param name="banaani">banaani</param>
- private void ApinaTormasiBanaaniin(PhysicsObject apina, PhysicsObject banaani)
- {
- Remove(banaani);
- apinanPisteet.Value += 1;
- }
- /// <summary>
- /// Lyödään apinaa voimavektorilla
- /// </summary>
- /// <param name="apina">mitä apinaa lyödään</param>
- /// <param name="suunta">voimavektori</param>
- private static void LyoApinaa(PhysicsObject apina, Vector suunta)
- {
- if (suunta == Vector.Zero)
- {
- apina.Velocity = suunta;
- }
- apina.Hit(suunta);
- }
- /// <summary>
- /// Luodaan apina.
- /// </summary>
- /// <returns>Apina.</returns>
- /// <param name="peli">Peli.</param>
- /// <param name="minx">alaraja x</param>
- /// <param name="miny">alaraja y</param>
- /// <param name="maxx">ylaraja x</param>
- /// <param name="maxy">ylaraja y</param>
- /// <param name="vauhti">max alkunopeus skalaarina.</param>
- /// <param name="tunniste">nimi jota vastaan törmäyksiä katsotaan.</param>
- private PhysicsObject LuoApina(PhysicsGame peli, double minx, double miny, double maxx, double maxy, double vauhti, string tunniste)
- {
- apina = new PhysicsObject(KOKO, KOKO, Shape.Heart);
- apina.Position = RandomGen.NextVector(minx, miny, maxx, maxy);
- apina.Image = kuvat[1];
- apina.Tag = tunniste;
- apina.IgnoresCollisionResponse = true;
- apina.CanRotate = false;
- peli.Add(apina);
- return apina;
- }
- /// <summary>
- /// Luodaan satunnainen pommi.
- /// </summary>
- /// <param name="peli">Mihin peliin pommi luodaan</param>
- /// <param name="minx">alaraja x</param>
- /// <param name="miny">alaraja y</param>
- /// <param name="maxx">yläraja x</param>
- /// <param name="maxy">yläraja y</param>
- /// <param name="vauhti">max alkunopeus skalaarina</param>
- /// <param name="tunniste">nimi jota vastaan törmäyksiä katsotaan</param>
- /// <returns>Pommin</returns>
- private PhysicsObject LuoSatunnainenPommi(PhysicsGame peli, double minx, double miny, double maxx, double maxy, double vauhti, string tunniste)
- {
- // Luodaan tekoäly
- satunnaisAivot = new RandomMoverBrain(50);
- //Ominaisuuksien muokkaaminen
- satunnaisAivot.ChangeMovementSeconds = RandomGen.NextDouble(1, 5);
- satunnaisAivot.WanderRadius = 300;
- satunnaisAivot.Active = true;
- PhysicsObject pommi = new PhysicsObject(KOKO, KOKO, Shape.Circle);
- pommi.Position = RandomGen.NextVector(minx, miny, maxx, maxy);
- pommi.Image = kuvat[2];
- pommi.Tag = tunniste;
- pommi.Brain = satunnaisAivot;
- peli.Add(pommi);
- return pommi;
- }
- /// <summary>
- /// Luodaan satunnainen banaani.
- /// </summary>
- /// <param name="peli">Mihin peliin pommi luodaan</param>
- /// <param name="minx">alaraja x</param>
- /// <param name="miny">alaraja y</param>
- /// <param name="maxx">yläraja x</param>
- /// <param name="maxy">yläraja y</param>
- /// <param name="vauhti">max alkunopeus skalaarina</param>
- /// <param name="tunniste">nimi jota vastaan törmäyksiä katsotaan</param>
- /// <returns>Banaanin</returns>
- private PhysicsObject LuoSatunnainenBanaani(PhysicsGame peli, double minx, double miny, double maxx, double maxy, double vauhti, string tunniste)
- {
- PhysicsObject banaani = new PhysicsObject(KOKO, KOKO / 2, Shape.Triangle);
- banaani.Position = RandomGen.NextVector(minx, miny, maxx, maxy);
- Vector suunta = Vector.FromLengthAndAngle(RandomGen.NextDouble(0, vauhti), RandomGen.NextAngle());
- banaani.Hit(suunta);
- banaani.Mass = 1;
- banaani.Image = kuvat[0];
- banaani.Tag = tunniste;
- peli.Add(banaani);
- return banaani;
- }
- /// <summary>
- /// Lisätään peliin pistelaskurit.
- /// </summary>
- private void LisaaLaskurit()
- {
- apinanPisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
- }
- /// <summary>
- /// Luodaan peliin pistelaskuri.
- /// </summary>
- /// <returns>Pistelaskuri</returns>
- /// <param name="x">Laskurin x-koordinaatti</param>
- /// <param name="y">Laskurin y-koordinaatti</param>
- private IntMeter LuoPisteLaskuri(double x, double y)
- {
- IntMeter laskuri = new IntMeter(0);
- Label naytto = new Label();
- naytto.BindTo(laskuri);
- naytto.X = x;
- naytto.Y = y;
- naytto.TextColor = Color.White;
- naytto.BorderColor = Color.White;
- naytto.Color = Color.Transparent;
- Add(naytto);
- return laskuri;
- }
- /// <summary>
- /// Luodaan pelikenttä.
- /// </summary>
- private void LuoKentta()
- {
- Level.Background.Image = kuvat[3];
- Level.Background.FitToLevel();
- Level.CreateBorders();
- for (int i = 0; i < POMMIEN_MAARA; i++)
- LuoSatunnainenPommi(this, Level.Left, Level.Bottom, Level.Right, 0, ALKUVAUHTI, "pommi");
- for (int i = 0; i < BANAANIEN_MAARA; i++)
- LuoSatunnainenBanaani(this, Level.Left, Level.Bottom, Level.Right, Level.Top - 100, ALKUVAUHTI, "banaani");
- apina = LuoApina(this, Level.Left, Level.Top - 100, Level.Right, Level.Top, ALKUVAUHTI, "apina");
- }
- /// <summary>
- /// Asetetaan pelille näppäimistön komennot.
- /// </summary>
- private void AsetaOhjaimet()
- {
- Keyboard.Listen(Key.Up, ButtonState.Pressed, LyoApinaa, "Apina ylös", apina, new Vector(0, APINAN_NOPEUS));
- Keyboard.Listen(Key.Up, ButtonState.Released, LyoApinaa, null, apina, Vector.Zero);
- Keyboard.Listen(Key.Down, ButtonState.Pressed, LyoApinaa, "Apina alas", apina, new Vector(0, -APINAN_NOPEUS));
- Keyboard.Listen(Key.Down, ButtonState.Released, LyoApinaa, null, apina, Vector.Zero);
- Keyboard.Listen(Key.Left, ButtonState.Pressed, LyoApinaa, "Apina vasemmalle", apina, new Vector(-APINAN_NOPEUS, 0));
- Keyboard.Listen(Key.Left, ButtonState.Released, LyoApinaa, null, apina, Vector.Zero);
- Keyboard.Listen(Key.Right, ButtonState.Pressed, LyoApinaa, "Apina oikealle", apina, new Vector(APINAN_NOPEUS, 0));
- Keyboard.Listen(Key.Right, ButtonState.Released, LyoApinaa, null, apina, Vector.Zero);
- Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä avustus");
- // Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
- Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement