Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.59 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using Jypeli;
  3. using Jypeli.Assets;
  4. using Jypeli.Controls;
  5. using Jypeli.Effects;
  6. using Jypeli.Widgets;
  7.  
  8. /// @author Sanni Laine ja Milla Patrikainen
  9. /// @version 11.12.2017
  10.  
  11. /// <summary>
  12. /// Harkkatyö: Banaanijahti
  13. /// </summary>
  14. public class HARKKATYO : PhysicsGame
  15. {
  16.     private double APINAN_NOPEUS = 200;
  17.     private double POMMIEN_MAARA = 8;
  18.     private const double BANAANIEN_MAARA = 13;
  19.     private const double KOKO = 80;
  20.     private const double ALKUVAUHTI = 50;
  21.  
  22.     private IntMeter apinanPisteet;
  23.  
  24.     private PhysicsObject apina;
  25.  
  26.     private EasyHighScore topLista = new EasyHighScore();
  27.     private Timer ajastin;
  28.     private RandomMoverBrain satunnaisAivot;
  29.  
  30.     readonly Image banaaninKuva = LoadImage("banaanirajattu");
  31.     readonly Image apinanKuva = LoadImage("apina");
  32.     readonly Image pomminKuva = LoadImage("pommirajattu");
  33.     readonly Image viidakkoKuva = LoadImage("viidakkotausta");
  34.  
  35.     private List<Image> kuvat;
  36.  
  37.  
  38.     public override void Begin()
  39.     {
  40.         SetWindowSize(1000, 800);
  41.         Level.Size = new Vector(1000, 800);
  42.         kuvat = new List<Image>() { banaaninKuva, apinanKuva, pomminKuva, viidakkoKuva };
  43.         LuoKentta();
  44.         AlkuValikko();
  45.     }
  46.  
  47.  
  48.     /// <summary>
  49.     /// Luodaan peliin alkuvalikko.
  50.     /// </summary>
  51.     private void AlkuValikko()
  52.     {
  53.         MultiSelectWindow valikko = new MultiSelectWindow("Pelin alkuvalikko",
  54.         "Aloita peli", "Parhaat pisteet", "Lopeta");
  55.         valikko.Color = Color.GreenYellow;
  56.         valikko.ItemSelected += PainettiinValikonNappia;
  57.         Add(valikko);
  58.     }
  59.  
  60.  
  61.     /// <summary>
  62.     /// Alkuvalikon kutsuminen.
  63.     /// </summary>
  64.     /// <param name="sender">Sender.</param>
  65.     private void AlkuValikkoon(Window sender)
  66.     {
  67.         AlkuValikko();
  68.     }
  69.  
  70.  
  71.     /// <summary>
  72.     /// Aliohjelma määrää mitä tapahtuu, kun
  73.     /// painetaan valikon nappeja.
  74.     /// </summary>
  75.     /// <param name="valinta">Valittu vaihtoehto.</param>
  76.     private void PainettiinValikonNappia(int valinta)
  77.     {
  78.         switch (valinta)
  79.         {
  80.             case 0:
  81.                 AloitaPeli();
  82.                 break;
  83.             case 1:
  84.                 ParhaatPisteet();
  85.                 break;
  86.             case 2:
  87.                 Exit();
  88.                 break;
  89.         }
  90.     }
  91.  
  92.  
  93.     /// <summary>
  94.     /// Käsitellään mitä tapahtuu kun apina törmää pommiin
  95.     /// </summary>
  96.     /// <param name="apina">törmäävä apina</param>
  97.     /// <param name="pommi">pommi johon törmätään</param>
  98.     private void ApinaTormasiPommiin(PhysicsObject apina, PhysicsObject pommi)
  99.     {
  100.         Explosion rajahdys = new Explosion(apina.Width * 3);
  101.         rajahdys.Position = apina.Position;
  102.         rajahdys.UseShockWave = false;
  103.         this.Add(rajahdys);
  104.         apina.Destroy();
  105.         ajastin.Stop();
  106.         topLista.EnterAndShow(apinanPisteet.Value);
  107.         topLista.HighScoreWindow.Closed += AlkuValikkoon;
  108.     }
  109.  
  110.  
  111.     /// <summary>
  112.     /// Aloitetaan peli.
  113.     /// </summary>
  114.     private void AloitaPeli()
  115.     {
  116.         ClearAll();
  117.         LuoKentta();
  118.         LisaaLaskurit();
  119.         AsetaOhjaimet();
  120.  
  121.         ajastin = new Timer();
  122.         ajastin.Interval = 1.5;
  123.         ajastin.Timeout += delegate ()
  124.         {
  125.             LuoSatunnainenBanaani(this, Level.Left, Level.Bottom, Level.Right, 0, ALKUVAUHTI, "banaani");
  126.         };
  127.         ajastin.Start();
  128.  
  129.         AddCollisionHandler(apina, "pommi", ApinaTormasiPommiin);
  130.         AddCollisionHandler(apina, "banaani", ApinaTormasiBanaaniin);
  131.     }
  132.  
  133.  
  134.     /// <summary>
  135.     /// Näyttää pelaajan pisteet kun peli päättyy.
  136.     /// </summary>
  137.     void ParhaatPisteet()
  138.     {
  139.         topLista.Show();
  140.         topLista.HighScoreWindow.Closed += AlkuValikkoon;
  141.     }
  142.  
  143.  
  144.     /// <summary>
  145.     /// Aliohjelma lisää pelaajan pisteitä, kun apina törmää banaaniin.
  146.     /// </summary>
  147.     /// <param name="apina">apina</param>
  148.     /// <param name="banaani">banaani</param>
  149.     private void ApinaTormasiBanaaniin(PhysicsObject apina, PhysicsObject banaani)
  150.     {
  151.         Remove(banaani);
  152.         apinanPisteet.Value += 1;
  153.     }
  154.  
  155.  
  156.     /// <summary>
  157.     /// Lyödään apinaa voimavektorilla
  158.     /// </summary>
  159.     /// <param name="apina">mitä apinaa lyödään</param>
  160.     /// <param name="suunta">voimavektori</param>
  161.     private static void LyoApinaa(PhysicsObject apina, Vector suunta)
  162.     {
  163.         if (suunta == Vector.Zero)
  164.         {
  165.             apina.Velocity = suunta;
  166.         }
  167.         apina.Hit(suunta);
  168.     }
  169.  
  170.  
  171.     /// <summary>
  172.     /// Luodaan apina.
  173.     /// </summary>
  174.     /// <returns>Apina.</returns>
  175.     /// <param name="peli">Peli.</param>
  176.     /// <param name="minx">alaraja x</param>
  177.     /// <param name="miny">alaraja y</param>
  178.     /// <param name="maxx">ylaraja x</param>
  179.     /// <param name="maxy">ylaraja y</param>
  180.     /// <param name="vauhti">max alkunopeus skalaarina.</param>
  181.     /// <param name="tunniste">nimi jota vastaan törmäyksiä katsotaan.</param>
  182.     private PhysicsObject LuoApina(PhysicsGame peli, double minx, double miny, double maxx, double maxy, double vauhti, string tunniste)
  183.     {
  184.         apina = new PhysicsObject(KOKO, KOKO, Shape.Heart);
  185.         apina.Position = RandomGen.NextVector(minx, miny, maxx, maxy);
  186.         apina.Image = kuvat[1];
  187.         apina.Tag = tunniste;
  188.         apina.IgnoresCollisionResponse = true;
  189.         apina.CanRotate = false;
  190.         peli.Add(apina);
  191.         return apina;
  192.     }
  193.  
  194.  
  195.     /// <summary>
  196.     /// Luodaan satunnainen pommi.
  197.     /// </summary>
  198.     /// <param name="peli">Mihin peliin pommi luodaan</param>
  199.     /// <param name="minx">alaraja x</param>
  200.     /// <param name="miny">alaraja y</param>
  201.     /// <param name="maxx">yläraja x</param>
  202.     /// <param name="maxy">yläraja y</param>
  203.     /// <param name="vauhti">max alkunopeus skalaarina</param>
  204.     /// <param name="tunniste">nimi jota vastaan törmäyksiä katsotaan</param>
  205.     /// <returns>Pommin</returns>
  206.     private PhysicsObject LuoSatunnainenPommi(PhysicsGame peli, double minx, double miny, double maxx, double maxy, double vauhti, string tunniste)
  207.     {
  208.         // Luodaan tekoäly
  209.         satunnaisAivot = new RandomMoverBrain(50);
  210.  
  211.         //Ominaisuuksien muokkaaminen
  212.         satunnaisAivot.ChangeMovementSeconds = RandomGen.NextDouble(1, 5);
  213.         satunnaisAivot.WanderRadius = 300;
  214.         satunnaisAivot.Active = true;
  215.  
  216.         PhysicsObject pommi = new PhysicsObject(KOKO, KOKO, Shape.Circle);
  217.         pommi.Position = RandomGen.NextVector(minx, miny, maxx, maxy);
  218.         pommi.Image = kuvat[2];
  219.         pommi.Tag = tunniste;
  220.         pommi.Brain = satunnaisAivot;
  221.         peli.Add(pommi);
  222.         return pommi;
  223.     }
  224.  
  225.  
  226.     /// <summary>
  227.     /// Luodaan satunnainen banaani.
  228.     /// </summary>
  229.     /// <param name="peli">Mihin peliin pommi luodaan</param>
  230.     /// <param name="minx">alaraja x</param>
  231.     /// <param name="miny">alaraja y</param>
  232.     /// <param name="maxx">yläraja x</param>
  233.     /// <param name="maxy">yläraja y</param>
  234.     /// <param name="vauhti">max alkunopeus skalaarina</param>
  235.     /// <param name="tunniste">nimi jota vastaan törmäyksiä katsotaan</param>
  236.     /// <returns>Banaanin</returns>
  237.     private PhysicsObject LuoSatunnainenBanaani(PhysicsGame peli, double minx, double miny, double maxx, double maxy, double vauhti, string tunniste)
  238.     {
  239.         PhysicsObject banaani = new PhysicsObject(KOKO, KOKO / 2, Shape.Triangle);
  240.         banaani.Position = RandomGen.NextVector(minx, miny, maxx, maxy);
  241.         Vector suunta = Vector.FromLengthAndAngle(RandomGen.NextDouble(0, vauhti), RandomGen.NextAngle());
  242.         banaani.Hit(suunta);
  243.         banaani.Mass = 1;
  244.         banaani.Image = kuvat[0];
  245.         banaani.Tag = tunniste;
  246.         peli.Add(banaani);
  247.         return banaani;
  248.     }
  249.  
  250.  
  251.     /// <summary>
  252.     /// Lisätään peliin pistelaskurit.
  253.     /// </summary>
  254.     private void LisaaLaskurit()
  255.     {
  256.         apinanPisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
  257.     }
  258.  
  259.  
  260.     /// <summary>
  261.     /// Luodaan peliin pistelaskuri.
  262.     /// </summary>
  263.     /// <returns>Pistelaskuri</returns>
  264.     /// <param name="x">Laskurin x-koordinaatti</param>
  265.     /// <param name="y">Laskurin y-koordinaatti</param>
  266.     private IntMeter LuoPisteLaskuri(double x, double y)
  267.     {
  268.         IntMeter laskuri = new IntMeter(0);
  269.         Label naytto = new Label();
  270.         naytto.BindTo(laskuri);
  271.         naytto.X = x;
  272.         naytto.Y = y;
  273.         naytto.TextColor = Color.White;
  274.         naytto.BorderColor = Color.White;
  275.         naytto.Color = Color.Transparent;
  276.         Add(naytto);
  277.         return laskuri;
  278.     }
  279.  
  280.  
  281.     /// <summary>
  282.     /// Luodaan pelikenttä.
  283.     /// </summary>
  284.     private void LuoKentta()
  285.     {
  286.         Level.Background.Image = kuvat[3];
  287.         Level.Background.FitToLevel();
  288.         Level.CreateBorders();
  289.  
  290.  
  291.         for (int i = 0; i < POMMIEN_MAARA; i++)
  292.             LuoSatunnainenPommi(this, Level.Left, Level.Bottom, Level.Right, 0, ALKUVAUHTI, "pommi");
  293.  
  294.         for (int i = 0; i < BANAANIEN_MAARA; i++)
  295.             LuoSatunnainenBanaani(this, Level.Left, Level.Bottom, Level.Right, Level.Top - 100, ALKUVAUHTI, "banaani");
  296.  
  297.         apina = LuoApina(this, Level.Left, Level.Top - 100, Level.Right, Level.Top, ALKUVAUHTI, "apina");
  298.     }
  299.  
  300.  
  301.     /// <summary>
  302.     /// Asetetaan pelille näppäimistön komennot.
  303.     /// </summary>
  304.     private void AsetaOhjaimet()
  305.     {
  306.         Keyboard.Listen(Key.Up, ButtonState.Pressed, LyoApinaa, "Apina ylös", apina, new Vector(0, APINAN_NOPEUS));
  307.         Keyboard.Listen(Key.Up, ButtonState.Released, LyoApinaa, null, apina, Vector.Zero);
  308.  
  309.         Keyboard.Listen(Key.Down, ButtonState.Pressed, LyoApinaa, "Apina alas", apina, new Vector(0, -APINAN_NOPEUS));
  310.         Keyboard.Listen(Key.Down, ButtonState.Released, LyoApinaa, null, apina, Vector.Zero);
  311.  
  312.         Keyboard.Listen(Key.Left, ButtonState.Pressed, LyoApinaa, "Apina vasemmalle", apina, new Vector(-APINAN_NOPEUS, 0));
  313.         Keyboard.Listen(Key.Left, ButtonState.Released, LyoApinaa, null, apina, Vector.Zero);
  314.  
  315.         Keyboard.Listen(Key.Right, ButtonState.Pressed, LyoApinaa, "Apina oikealle", apina, new Vector(APINAN_NOPEUS, 0));
  316.         Keyboard.Listen(Key.Right, ButtonState.Released, LyoApinaa, null, apina, Vector.Zero);
  317.  
  318.         Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä avustus");
  319.         // Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
  320.         Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
  321.     }
  322. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement