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

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