source: 2017/31/MirkaH/TimantitOvatIkuisia/TimantitOvatIkuisia/TimantitOvatIkuisia/TimantitOvatIkuisia.cs @ 9448

Revision 9448, 10.6 KB checked in by npo17_79, 2 years ago (diff)
RevLine 
[9320]1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
[9448]9public class DiamondDiver : PhysicsGame
[9320]10{
[9448]11    //Pelaajan nopeus
12    Vector nopeusYlös = new Vector(0.0, 500.0);
13    Vector nopeusAlas = new Vector(0.0, -500.0);
[9320]14
[9448]15    //vihollisen ja roiston nopeus
16    double vihollisenNopeus = 50;
17    double roistonNopeus = 100;
[9387]18
[9448]19    //Taustan elementtien koko
[9341]20    const int RUUDUN_KOKO = 50;
[9320]21
[9366]22    PhysicsObject pelaaja1;
23    IntMeter pisteLaskuri;
[9448]24    EasyHighScore topLista = new EasyHighScore();
[9341]25
[9448]26    Image taustaKuva = LoadImage("merenpohja");
[9395]27    Image sukeltajaoikea = LoadImage("sukeltaja1");
[9341]28    Image tahtiKuva = LoadImage("timantti");
[9448]29    Image vihollinenKuva = LoadImage("tähtäin");
[9387]30    Image tasonkuva = LoadImage("kivet2");
[9395]31    Image sukeltajavasen = LoadImage("sukeltajavasen");
[9448]32    Image vihollistahti = LoadImage("vihollistahti");
33    Image alkuKuva = LoadImage("alkumeri");
34    SoundEffect timanttiaani = LoadSoundEffect("timanttiaani");
35   
[9320]36    public override void Begin()
37    {
[9448]38        Level.Width = Window.Width;
39        Level.Height = Window.Height;
40        AlkuValikko();
[9341]41        // Gravity = new Vector(0, -1000);
[9448]42        // Mouse.IsCursorVisible = true;
43        MediaPlayer.Play("taustaaani");
44        Level.Background.Image = alkuKuva;
45        Level.Background.FitToLevel();
46    }
47    void AlkuValikko()
48    {
49        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Parhaat pisteet", "Tekijätiedot", "Lopeta");
50        Level.Background.Color = Color.Blue;
[9320]51
[9448]52        alkuValikko.AddItemHandler(0, AloitaPeli);
53        alkuValikko.AddItemHandler(1, ParhaatPisteet);
54        alkuValikko.AddItemHandler(2, Tekijätiedot);
55        alkuValikko.AddItemHandler(3, Exit);
[9320]56
[9448]57        alkuValikko.DefaultCancel = 3;
58        alkuValikko.Color = Color.Purple;
59        alkuValikko.SetButtonColor(Color.Blue);
60        //alkuValikko.Image=alkuKuva;
[9387]61
[9448]62        Add(alkuValikko);
[9320]63    }
[9448]64    void AloitaPeli()
[9320]65
[9448]66    {
67        LuoKentta();
68        LisaaNappaimet();
69        LuoAikaLaskuri();
70        LuoPistelaskuri();
71
72
73        Camera.Follow(pelaaja1);
74        Camera.ZoomFactor = 1.2;
75        Camera.StayInLevel = true;
76        // Camera.ZoomToLevel();
77    }
[9320]78    void LuoKentta()
79    {
80        TileMap kentta = TileMap.FromLevelAsset("kentta1");
81        kentta.SetTileMethod('#', LisaaTaso);
[9341]82        kentta.SetTileMethod('*', LisaaAarre);
[9320]83        kentta.SetTileMethod('N', LisaaPelaaja);
[9366]84        kentta.SetTileMethod('V', LisaaVihollinen);
[9448]85        kentta.SetTileMethod('R', LisaaRoisto);
[9320]86        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
87        Level.CreateBorders();
[9448]88        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
89       Level.Background.Image = alkuKuva;
90        Level.Background.FitToLevel();
[9395]91       
[9448]92        //Timantit esiintyvät randomisti
[9387]93        for (int i = 0; i < 50; i++)
[9366]94        {
95            double xpaikka = RandomGen.NextDouble(Level.Left, Level.Right);
96            double ypaikka = RandomGen.NextDouble(Level.Top, Level.Bottom);
97            Vector paikka = new Vector(xpaikka, ypaikka);
98            LisaaAarre(paikka, RUUDUN_KOKO, RUUDUN_KOKO);
99        }
[9320]100    }
101
102    void LisaaTaso(Vector paikka, double leveys, double korkeus)
103    {
104        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
105        taso.Position = paikka;
[9448]106        //taso.Color = Color.Black;
[9341]107        taso.Restitution = 0.4;
[9387]108        taso.Image = tasonkuva;
[9320]109        Add(taso);
110    }
[9366]111    //void LisaaAarre(double leveys, double korkeus,double x, double y )
112    //{
113    //    PhysicsObject aarre = PhysicsObject.CreateStaticObject(leveys, korkeus);
114    //    aarre.IgnoresCollisionResponse = true;
115    //    aarre.X = x;
116    //    aarre.Y = y;
117    //    aarre.Image = tahtiKuva;
118    //    aarre.Tag = "tahti";
119    //    Add(aarre);
120    //}
[9341]121    void LisaaAarre(Vector paikka, double leveys, double korkeus)
122    {
123        PhysicsObject aarre = PhysicsObject.CreateStaticObject(leveys, korkeus);
124        aarre.IgnoresCollisionResponse = true;
125        aarre.Position = paikka;
126        aarre.Image = tahtiKuva;
127        aarre.Tag = "tahti";
128        Add(aarre);
129    }
[9387]130   
[9395]131        void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
[9366]132    {
[9395]133            PhysicsObject vihollinen = new PhysicsObject(40.0, 20.0);
[9448]134            vihollinen.Position = paikka;
[9387]135            vihollinen.Image = vihollinenKuva;
136            Add(vihollinen);
137
[9448]138        //vihollinen ja roisto seuraavat pelaajaa
[9395]139        vihollinen.Tag = "vihollinen";
140        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
[9448]141        seuraajanAivot.Speed = vihollisenNopeus;                 // Millä nopeudella kohdetta seurataan
[9395]142        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
143        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
144        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
145                                                     //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
[9387]146
[9395]147        vihollinen.Brain = seuraajanAivot;
[9366]148    }
[9448]149    void LisaaRoisto(Vector paikka, double leveys, double korkeus)
150    {
151        PhysicsObject roisto = new PhysicsObject(40.0, 10.0);
152        roisto.Position = paikka;
[9320]153
[9448]154        // roisto.Tag = "pahis";
155       roisto.Image = vihollistahti;
156        Add(roisto);
[9395]157
158
[9448]159        roisto.Tag = "vihollinen";
160        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
161        seuraajanAivot.Speed = roistonNopeus;                 // Millä nopeudella kohdetta seurataan
162        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
163        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
164        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
165                                                     //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
166
167        roisto.Brain = seuraajanAivot;
168    }
169
170
[9320]171    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
172    {
[9448]173        pelaaja1 = new PhysicsObject(leveys * 2, korkeus * 0.75);
[9320]174        pelaaja1.Position = paikka;
[9395]175        pelaaja1.Tag = "pelaaja";
[9366]176        // pelaaja1.Mass = 4.0;
[9395]177        pelaaja1.Image = sukeltajaoikea;
[9320]178        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
[9395]179        AddCollisionHandler(pelaaja1, "vihollinen", PelaajaKuoli);
[9320]180        Add(pelaaja1);
[9341]181        pelaaja1.CanRotate = false;
[9395]182 
[9320]183    }
184
185    void LisaaNappaimet()
186    {
187        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
188        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
189
[9366]190        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-200, 0));
191        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(200, 0));
[9341]192        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja ylös", pelaaja1, nopeusYlös);
193        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Pelaaja alas", pelaaja1, nopeusAlas);
[9320]194
195        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
196
[9341]197        ///ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
198        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
199        //ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
[9320]200
201        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
202    }
203
[9341]204    void Liikuta(PhysicsObject hahmo, Vector nopeus)
[9320]205    {
[9341]206        hahmo.Push(nopeus);
[9448]207        //if (pelaaja1.Velocity.X < 0) pelaaja1.Image = sukeltajavasen;
208        //else pelaaja1.Image = sukeltajaoikea;
[9395]209       
[9320]210    }
211
212
[9366]213
[9320]214    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
215    {
[9448]216        timanttiaani.Play();
217        //MessageDisplay.Add("Keräsit timantin!");
[9320]218        tahti.Destroy();
[9366]219        pisteLaskuri.Value += 1;
220
[9320]221    }
[9366]222
[9448]223   
[9366]224
[9387]225       
[9366]226    void LuoPistelaskuri()
227    {
228        pisteLaskuri = new IntMeter(0);
229
230        Label pisteNaytto = new Label();
231        pisteNaytto.X = Screen.Left + 100;
232        pisteNaytto.Y = Screen.Top - 100;
233        pisteNaytto.TextColor = Color.Black;
234        pisteNaytto.Color = Color.White;
235
236        pisteNaytto.BindTo(pisteLaskuri);
237        Add(pisteNaytto);
238    }
239    DoubleMeter alaspainLaskuri;
240
241       
242    Timer aikaLaskuri;
243
244    void LuoAikaLaskuri()
245    {
[9395]246        alaspainLaskuri = new DoubleMeter(60);
[9366]247
248        aikaLaskuri = new Timer();
249        aikaLaskuri.Interval = 0.1;
250        aikaLaskuri.Timeout += LaskeAlaspain;
251        aikaLaskuri.Start();
252
253        Label aikaNaytto = new Label();
254        aikaNaytto.TextColor = Color.White;
255        aikaNaytto.DecimalPlaces = 1;
256        aikaNaytto.BindTo(alaspainLaskuri);
257        aikaNaytto.X = Screen.Right - 300.0;
258        aikaNaytto.Y = Screen.Bottom + 100.0;
259        Add(aikaNaytto);
260
261    }
262
263    void LaskeAlaspain()
264    {
265        alaspainLaskuri.Value -= 0.1;
266
267        if (alaspainLaskuri.Value <= 0)
268        {
269            MessageDisplay.Add("Aika loppui...");
270            aikaLaskuri.Stop();
271
[9387]272            PelaajaKuoli();
273
274            //pelaaja1.Destroy();
275            //ClearAll();
276
277            //Label pisteNaytto = new Label();
278            //pisteNaytto.TextColor = Color.White;
279
280            //pisteNaytto.Text = "Sait pisteitä " + pisteLaskuri.Value;
281       
282            //Add(pisteNaytto);
283
[9366]284            // täydennä mitä tapahtuu, kun aika loppuu
285        }
286    }
[9448]287   
[9387]288    void ParhaatPisteet()
289    {
290        topLista.Show();
291        topLista.HighScoreWindow.Closed += AloitaPeli;
292
293    }
294   
295
296        void Tekijätiedot()
297    {
298        MessageWindow ikkuna = new MessageWindow("Mirka Havinga");
299        Add(ikkuna);
300        ikkuna.Closed += delegate 
301        {
302            AlkuValikko();
303        };
304
305
306    }
307
[9395]308    void PelaajaKuoli(PhysicsObject tormaaja = null, PhysicsObject kohde = null)
[9387]309    {
310        pelaaja1.Destroy();
311        topLista.EnterAndShow(pisteLaskuri.Value);
312
313        topLista.HighScoreWindow.Closed += AloitaPeli;
314    }
315
316
317
318    void AloitaPeli(Window sender)
319    {
320        ClearAll();
321        AlkuValikko();
322       // topLista.Show();
323    }
324
325}
Note: See TracBrowser for help on using the repository browser.