source: 2015/30/EliasHy/SpaceAdventure/SpaceAdventure/SpaceAdventure/SpaceAdventure.cs @ 7007

Revision 7007, 13.0 KB checked in by elhytone, 5 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/// @authors Aapo Halme ja Elias Hytönen
9/// @version 2nd edition ver 2.31
10/// SpaceAdventure
11///
12/// </summary>
13
14public class SpaceAdventure : PhysicsGame
15{   
16    PhysicsObject pelaaja;
17    AssaultRifle ase;
18    Image CoolAlusKuva = LoadImage("cool alus");
19    Image CoolHyvisalus = LoadImage("coolhyvisalus");
20    Image CoolAsteroidi = LoadImage("cool asteroid bu");
21    Image taustaKuva = LoadImage("cool space");
22    Image Cloud = LoadImage("Stuff");
23    Image Laser = LoadImage("laser");
24    Image Boss = LoadImage("Boss Ship_zpspn6osve5");
25    Image Vihollinenalus = LoadImage("enemy ship 2");
26    Image Voittokuva = LoadImage("voitto");
27
28
29    IntMeter pistelaskuri;
30    IntMeter voittoLaskuri = new IntMeter(0, 0, 0);
31    DoubleMeter elamaLaskuri;
32
33    double eteenpain = 500;
34    double kaantyminen = 900;
35
36    public override void Begin()
37
38    {
39        Valikko();               
40    }
41
42    void Valikko()
43    {           
44       
45        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
46        "Aloita peli", "Lopeta");
47        Add(alkuValikko);
48        alkuValikko.AddItemHandler(0, AloitaPeli);
49        //alkuValikko.AddItemHandler(1, ParhaatPisteet);
50        alkuValikko.AddItemHandler(1, Exit);
51        Level.Background.CreateStars();
52    }
53
54    void AloitaPeli()
55
56    {
57        ClearAll();
58        IsPaused = false;
59        voittoLaskuri = new IntMeter (0, 0, 0);
60        LuoKentta();
61 
62        Camera.Zoom(2.5);
63        Camera.FollowedObject = pelaaja;
64        Level.Background.CreateStars();
65        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, eteenpain, 1);
66        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, kaantyminen, 2);
67        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, kaantyminen, 3);
68
69        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
70        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja);
71        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
72        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, "Aloita peli alusta");
73        LuoPistelaskuri();
74
75        LuoVoittoLaskuri();
76       
77
78    }
79    void LuoVoittoLaskuri()
80    {
81
82        Label voittonautto = new Label();
83        voittonautto.X = Screen.Right - 130;
84        voittonautto.Y = Screen.Top - 100;
85        voittonautto.TextColor = Color.Black;
86        voittonautto.Color = Color.White; 
87        voittonautto.Title = "Tapot";
88        voittonautto.BindTo(voittoLaskuri);
89        voittonautto.IntFormatString = "{0}/" + voittoLaskuri.MaxValue;
90        Add(voittonautto);
91
92        voittoLaskuri.UpperLimit += Voitto;
93
94   
95    }
96
97    void Voitto()
98    {
99        IsPaused = true;
100       
101
102        //MessageDisplay.Add("Voitit Pelin!");
103        //TODO:
104        //Timer.SingleShot(1, Valikko);
105        Timer valikkoAjastin = new Timer();
106        valikkoAjastin.IgnorePause = true;
107        valikkoAjastin.Interval = 1;
108        valikkoAjastin.Timeout += delegate
109        {
110            Valikko();
111            GameObject voittoruutu = new GameObject(150, 50);
112            voittoruutu.Image = Voittokuva;
113            voittoruutu.Position = pelaaja.Position + new Vector(0,100);
114            Add(voittoruutu, 2);
115            valikkoAjastin.Stop();
116        };
117        valikkoAjastin.Start();
118       
119    }
120
121
122    void LiikutaPelaajaa(double voima, int miten)
123    {
124        switch (miten)
125        {
126            case 1:
127                pelaaja.Push(Vector.FromLengthAndAngle(voima, pelaaja.Angle));
128                break;
129            case 2:
130                pelaaja.ApplyTorque(voima);
131                break;
132            case 3:
133                pelaaja.ApplyTorque(-voima);
134                break;
135            case 4:
136                break;
137            default:
138                break;
139        }
140
141    }
142
143    void LuoKentta()
144    {
145        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
146        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("cool tausta new");
147
148        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
149        ruudut.SetTileMethod(Color.FromHexCode("00FFFF"), LuoPelaaja);
150        ruudut.SetTileMethod(Color.Black, LuoVihollinen);
151        ruudut.SetTileMethod(Color.Gold, LuoAsteroidi);
152        ruudut.SetTileMethod(Color.FromHexCode("FF0000"), LuoVihollinen2);
153        ruudut.SetTileMethod(Color.FromHexCode("B200FF"), LuoReuna);
154        ruudut.SetTileMethod(Color.FromHexCode("1CFF32"), LuoBossi);
155
156        //Level.CreateBorders();
157
158        //3. Execute luo kentän
159        //   Parametreina leveys ja korkeus
160        ruudut.Execute(20, 20);
161    }
162
163    void LuoReuna(Vector paikka, double leveys, double korkeus)
164    {
165        //PhysicsObject Asteroidi = new PhysicsObject(10, 10);
166        PhysicsObject Reuna = PhysicsObject.CreateStaticObject(Cloud);
167        Reuna.Position = paikka;
168        Reuna.Tag = "reuna";
169        Add(Reuna);
170
171    }
172
173    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
174    {
175
176        //pelaaja = new PhysicsObject(10, 10);
177        pelaaja = new PhysicsObject(CoolHyvisalus);
178        pelaaja.Restitution = 1.0;
179        pelaaja.Color = Color.Blue;
180        pelaaja.Position = paikka;
181        pelaaja.AngularDamping = 0.9;
182        pelaaja.Tag = "pelaaja";
183        AddCollisionHandler(pelaaja, "Asteroidi",delegate(PhysicsObject A, PhysicsObject B) 
184        {
185            PelaajaVahingoittuu(A, B, 3);
186        } );
187
188        AddCollisionHandler(pelaaja, "pahis", delegate(PhysicsObject A, PhysicsObject B)
189        {
190            PelaajaVahingoittuu(A, B, 1);
191        });
192
193        AddCollisionHandler(pelaaja, "pahis2", delegate(PhysicsObject A, PhysicsObject B)
194        {
195            PelaajaVahingoittuu(A, B, 3);
196        });
197
198        AddCollisionHandler(pelaaja, "bossi", delegate(PhysicsObject A, PhysicsObject B)
199        {
200            PelaajaVahingoittuu(A, B, 2);
201        });
202       
203        AddCollisionHandler(pelaaja, "vihuammus", delegate(PhysicsObject A, PhysicsObject B)
204        {
205            PelaajaVahingoittuu(A, B, 3);
206        });
207
208        AddCollisionHandler(pelaaja, "bossinammus", delegate(PhysicsObject A, PhysicsObject B)
209        {
210            PelaajaVahingoittuu(A, B, 3);
211        });
212
213        elamaLaskuri = new DoubleMeter(25);
214        elamaLaskuri.MaxValue = 25;
215        elamaLaskuri.LowerLimit += ElamaLoppui;
216
217        ProgressBar elamaPalkki = new ProgressBar(150, 20);
218        elamaPalkki.X = Screen.Left + 150;
219        elamaPalkki.Y = Screen.Top - 20;
220        elamaPalkki.BindTo(elamaLaskuri);
221        Add(elamaPalkki);
222
223        ase = new AssaultRifle(1, 1);
224
225
226        Add(pelaaja);
227        pelaaja.Add(ase);
228    }
229    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
230    {
231        PhysicsObject Vihollinen = new PhysicsObject(CoolAlusKuva);
232        Vihollinen.Position = paikka;
233        Add(Vihollinen);
234        Vihollinen.Tag = "pahis";
235        Vihollinen.AngularDamping = 0.2;
236
237        //AddCollisionHandler(Laser, CollisionHandler.ExplodeTarget(150, false));
238        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
239        seuraajanAivot.Speed = 70;
240        Vihollinen.Brain = seuraajanAivot;
241
242
243        voittoLaskuri.MaxValue++;
244        Vihollinen.Removed += delegate
245        {
246            voittoLaskuri.Value++;
247           
248        };
249
250
251    }
252
253    void LuoBossi(Vector paikka, double leveys, double korkeus)
254    {
255        //PhysicsObject Vihollinen2 = new PhysicsObject(10, 10);
256        PhysicsObject Bossi = new PhysicsObject(Boss);
257        Bossi.Size = new Vector(100, 100);
258        Add(Bossi);
259
260        Bossi.Tag = "bossi";
261        Bossi.Mass = 200;
262
263        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
264        seuraajanAivot.Speed = 50;
265        Bossi.Brain = seuraajanAivot;
266
267        Timer Ampuminen = new Timer();
268        Ampuminen.Interval = 1.0;   //Kuinka usein bossi ampuu
269        Ampuminen.Timeout += delegate
270        {
271            if (pelaaja != null)
272            {
273                Vector suunta = pelaaja.Position - Bossi.Position;
274
275                if (suunta.Magnitude < 500)
276                {
277                    suunta = suunta.Normalize();
278                    PhysicsObject vihunAmmus = new PhysicsObject(Laser);
279                    vihunAmmus.Position = Bossi.Position + suunta * 30;
280                    vihunAmmus.IgnoresCollisionResponse = true;
281                    vihunAmmus.Size *= 0.1;
282                    vihunAmmus.Angle = suunta.Angle;
283                    Add(vihunAmmus);
284                    vihunAmmus.Hit(suunta * 2000);
285                    vihunAmmus.Tag = "bossinammus";
286                }
287            }
288        };
289        Ampuminen.Start();
290        Bossi.Removed += delegate
291        {
292            voittoLaskuri.Value++;
293            Ampuminen.Stop();
294        };
295
296       
297        voittoLaskuri.MaxValue++;
298    }
299
300
301
302    void LuoAsteroidi(Vector paikka, double leveys, double korkeus)
303    {
304        //PhysicsObject Asteroidi = new PhysicsObject(10, 10);
305        PhysicsObject Asteroidi = new PhysicsObject(CoolAsteroidi);
306        Asteroidi.Color = Color.Red;
307        Asteroidi.Position = paikka;
308        Add(Asteroidi);
309        Asteroidi.Mass = 70;
310
311        Asteroidi.Mass = 100;
312        Asteroidi.Tag = "Asteroidi";
313
314
315
316    }
317    void LuoVihollinen2(Vector paikka, double leveys, double korkeus)
318    {
319        //PhysicsObject Vihollinen2 = new PhysicsObject(10, 10);
320        PhysicsObject Vihollinen2 = new PhysicsObject(Vihollinenalus);
321        Vihollinen2.Color = Color.Gold;
322        Vihollinen2.Size = new Vector(50, 50);
323        Vihollinen2.Position = paikka;
324        Add(Vihollinen2);
325        Vihollinen2.Tag = "pahis2";
326        Vihollinen2.Mass = 70;
327        Vihollinen2.AngularDamping = 0.2;
328
329        //Tehdään uudet satunnaisaivot, jotka liikkuvat nopeudella 200
330        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(150);
331
332        //Ominaisuuksien muokkaaminen
333        satunnaisAivot.ChangeMovementSeconds = 3;
334        Vihollinen2.Brain = satunnaisAivot;
335
336        Timer Ampuminen = new Timer();
337        Ampuminen.Interval = 3.5;
338        Ampuminen.Timeout += delegate 
339        {
340            if (pelaaja != null)
341            {
342                Vector suunta = pelaaja.Position - Vihollinen2.Position;
343
344                if (suunta.Magnitude < 500)
345                {
346                    suunta = suunta.Normalize();
347                    PhysicsObject vihunAmmus = new PhysicsObject(Laser);
348                    vihunAmmus.Position = Vihollinen2.Position + suunta * 30;
349                    vihunAmmus.IgnoresCollisionResponse = true;
350                    vihunAmmus.Size *= 0.1;
351                    vihunAmmus.Angle = suunta.Angle;
352                    Add(vihunAmmus);
353                    vihunAmmus.Hit(suunta * 2000);
354                    vihunAmmus.Tag = "vihuammus";
355                }
356            }
357        };
358        Ampuminen.Start();
359        Vihollinen2.Removed += delegate 
360        { 
361            Ampuminen.Stop();
362            voittoLaskuri.Value++;
363        };
364
365        voittoLaskuri.MaxValue++;
366    }
367
368    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
369    {
370        if (kohde.Tag.ToString() != "reuna")
371        {
372            kohde.Destroy();
373            pistelaskuri.Value += 100;
374            Explosion rajahdys = new Explosion(27);
375            rajahdys.Position = kohde.Position;
376            Add(rajahdys);
377
378            pelaaja.IgnoresExplosions = true;
379
380            String tag = kohde.Tag.ToString();
381           
382        }
383        ammus.Destroy();
384
385    }
386
387    void LuoPistelaskuri()
388    {
389
390
391        pistelaskuri = new IntMeter(0);
392
393        Label pisteNaytto = new Label();
394        pisteNaytto.X = Screen.Left + 100;
395        pisteNaytto.Y = Screen.Top - 100;
396        pisteNaytto.TextColor = Color.Black;
397        pisteNaytto.Color = Color.White;
398        pisteNaytto.Title = "Pisteet";
399        pisteNaytto.BindTo(pistelaskuri);
400        Add(pisteNaytto);
401    }
402
403    void AmmuAseella(PhysicsObject pelaaja)
404    {
405        PhysicsObject ammus = ase.Shoot();
406
407        if (ammus != null)
408        {
409            ammus.Tag = "ammus";
410            ammus.Size *= 0.5;
411            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
412
413            ammus.Image = Laser;
414            ase.FireRate = 5.0;
415            //ase.FireRate = 100;
416            AddCollisionHandler(ammus, AmmusOsui);
417        }
418    }
419    void ElamaLoppui()
420    {
421        MessageDisplay.Add("Pelaaja tuhoutui");
422        pelaaja.Destroy();
423        Timer.SingleShot(1, Valikko);
424       
425
426
427    }
428    void PelaajaVahingoittuu(PhysicsObject Pelaaja,PhysicsObject Pahis, int Vahinko)
429    {
430        elamaLaskuri.Value -= Vahinko;
431
432    }
433
434}
Note: See TracBrowser for help on using the repository browser.