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

Revision 9448, 10.6 KB checked in by npo17_79, 2 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class DiamondDiver : PhysicsGame
10{
11    //Pelaajan nopeus
12    Vector nopeusYlös = new Vector(0.0, 500.0);
13    Vector nopeusAlas = new Vector(0.0, -500.0);
14
15    //vihollisen ja roiston nopeus
16    double vihollisenNopeus = 50;
17    double roistonNopeus = 100;
18
19    //Taustan elementtien koko
20    const int RUUDUN_KOKO = 50;
21
22    PhysicsObject pelaaja1;
23    IntMeter pisteLaskuri;
24    EasyHighScore topLista = new EasyHighScore();
25
26    Image taustaKuva = LoadImage("merenpohja");
27    Image sukeltajaoikea = LoadImage("sukeltaja1");
28    Image tahtiKuva = LoadImage("timantti");
29    Image vihollinenKuva = LoadImage("tähtäin");
30    Image tasonkuva = LoadImage("kivet2");
31    Image sukeltajavasen = LoadImage("sukeltajavasen");
32    Image vihollistahti = LoadImage("vihollistahti");
33    Image alkuKuva = LoadImage("alkumeri");
34    SoundEffect timanttiaani = LoadSoundEffect("timanttiaani");
35   
36    public override void Begin()
37    {
38        Level.Width = Window.Width;
39        Level.Height = Window.Height;
40        AlkuValikko();
41        // Gravity = new Vector(0, -1000);
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;
51
52        alkuValikko.AddItemHandler(0, AloitaPeli);
53        alkuValikko.AddItemHandler(1, ParhaatPisteet);
54        alkuValikko.AddItemHandler(2, Tekijätiedot);
55        alkuValikko.AddItemHandler(3, Exit);
56
57        alkuValikko.DefaultCancel = 3;
58        alkuValikko.Color = Color.Purple;
59        alkuValikko.SetButtonColor(Color.Blue);
60        //alkuValikko.Image=alkuKuva;
61
62        Add(alkuValikko);
63    }
64    void AloitaPeli()
65
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    }
78    void LuoKentta()
79    {
80        TileMap kentta = TileMap.FromLevelAsset("kentta1");
81        kentta.SetTileMethod('#', LisaaTaso);
82        kentta.SetTileMethod('*', LisaaAarre);
83        kentta.SetTileMethod('N', LisaaPelaaja);
84        kentta.SetTileMethod('V', LisaaVihollinen);
85        kentta.SetTileMethod('R', LisaaRoisto);
86        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
87        Level.CreateBorders();
88        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
89       Level.Background.Image = alkuKuva;
90        Level.Background.FitToLevel();
91       
92        //Timantit esiintyvät randomisti
93        for (int i = 0; i < 50; i++)
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        }
100    }
101
102    void LisaaTaso(Vector paikka, double leveys, double korkeus)
103    {
104        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
105        taso.Position = paikka;
106        //taso.Color = Color.Black;
107        taso.Restitution = 0.4;
108        taso.Image = tasonkuva;
109        Add(taso);
110    }
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    //}
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    }
130   
131        void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
132    {
133            PhysicsObject vihollinen = new PhysicsObject(40.0, 20.0);
134            vihollinen.Position = paikka;
135            vihollinen.Image = vihollinenKuva;
136            Add(vihollinen);
137
138        //vihollinen ja roisto seuraavat pelaajaa
139        vihollinen.Tag = "vihollinen";
140        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
141        seuraajanAivot.Speed = vihollisenNopeus;                 // Millä nopeudella kohdetta seurataan
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
146
147        vihollinen.Brain = seuraajanAivot;
148    }
149    void LisaaRoisto(Vector paikka, double leveys, double korkeus)
150    {
151        PhysicsObject roisto = new PhysicsObject(40.0, 10.0);
152        roisto.Position = paikka;
153
154        // roisto.Tag = "pahis";
155       roisto.Image = vihollistahti;
156        Add(roisto);
157
158
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
171    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
172    {
173        pelaaja1 = new PhysicsObject(leveys * 2, korkeus * 0.75);
174        pelaaja1.Position = paikka;
175        pelaaja1.Tag = "pelaaja";
176        // pelaaja1.Mass = 4.0;
177        pelaaja1.Image = sukeltajaoikea;
178        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
179        AddCollisionHandler(pelaaja1, "vihollinen", PelaajaKuoli);
180        Add(pelaaja1);
181        pelaaja1.CanRotate = false;
182 
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
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));
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);
194
195        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
196
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);
200
201        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
202    }
203
204    void Liikuta(PhysicsObject hahmo, Vector nopeus)
205    {
206        hahmo.Push(nopeus);
207        //if (pelaaja1.Velocity.X < 0) pelaaja1.Image = sukeltajavasen;
208        //else pelaaja1.Image = sukeltajaoikea;
209       
210    }
211
212
213
214    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
215    {
216        timanttiaani.Play();
217        //MessageDisplay.Add("Keräsit timantin!");
218        tahti.Destroy();
219        pisteLaskuri.Value += 1;
220
221    }
222
223   
224
225       
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    {
246        alaspainLaskuri = new DoubleMeter(60);
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
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
284            // täydennä mitä tapahtuu, kun aika loppuu
285        }
286    }
287   
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
308    void PelaajaKuoli(PhysicsObject tormaaja = null, PhysicsObject kohde = null)
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.