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

Revision 6980, 12.1 KB checked in by aahalme, 4 years ago (diff)

uusin versio

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, 3);
183        });
184
185        elamaLaskuri = new DoubleMeter(25);
186        elamaLaskuri.MaxValue = 25;
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        Vihollinen.AngularDamping = 0.2;
208
209        //AddCollisionHandler(Laser, CollisionHandler.ExplodeTarget(150, false));
210        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
211        seuraajanAivot.Speed = 70;
212        Vihollinen.Brain = seuraajanAivot;
213
214
215        voittoLaskuri.MaxValue++;
216
217
218    }
219
220    void LuoBossi(Vector paikka, double leveys, double korkeus)
221    {
222        //PhysicsObject Vihollinen2 = new PhysicsObject(10, 10);
223        PhysicsObject Bossi = new PhysicsObject(Boss);
224        Bossi.Size = new Vector(100, 100);
225        Add(Bossi);
226
227        Bossi.Tag = "bossi";
228        Bossi.Mass = 200;
229
230        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
231        seuraajanAivot.Speed = 50;
232        Bossi.Brain = seuraajanAivot;
233
234        Timer Ampuminen = new Timer();
235        Ampuminen.Interval = 1.0;   //Kuinka usein bossi ampuu
236        Ampuminen.Timeout += delegate
237        {
238            if (pelaaja != null)
239            {
240                Vector suunta = pelaaja.Position - Bossi.Position;
241
242                if (suunta.Magnitude < 500)
243                {
244                    suunta = suunta.Normalize();
245                    PhysicsObject vihunAmmus = new PhysicsObject(Laser);
246                    vihunAmmus.Position = Bossi.Position + suunta * 30;
247                    vihunAmmus.IgnoresCollisionResponse = true;
248                    vihunAmmus.Size *= 0.1;
249                    vihunAmmus.Angle = suunta.Angle;
250                    Add(vihunAmmus);
251                    vihunAmmus.Hit(suunta * 2000);
252                    vihunAmmus.Tag = "bossinammus";
253                }
254            }
255        };
256        Ampuminen.Start();
257        Bossi.Removed += delegate { Ampuminen.Stop(); };
258       
259        voittoLaskuri.MaxValue++;
260    }
261
262
263
264    void LuoAsteroidi(Vector paikka, double leveys, double korkeus)
265    {
266        //PhysicsObject Asteroidi = new PhysicsObject(10, 10);
267        PhysicsObject Asteroidi = new PhysicsObject(CoolAsteroidi);
268        Asteroidi.Color = Color.Red;
269        Asteroidi.Position = paikka;
270        Add(Asteroidi);
271        Asteroidi.Mass = 70;
272
273        Asteroidi.Mass = 100;
274        Asteroidi.Tag = "Asteroidi";
275
276
277
278    }
279    void LuoVihollinen2(Vector paikka, double leveys, double korkeus)
280    {
281        //PhysicsObject Vihollinen2 = new PhysicsObject(10, 10);
282        PhysicsObject Vihollinen2 = new PhysicsObject(Vihollinenalus);
283        Vihollinen2.Color = Color.Gold;
284        Vihollinen2.Size = new Vector(50, 50);
285        Vihollinen2.Position = paikka;
286        Add(Vihollinen2);
287        Vihollinen2.Tag = "pahis2";
288        Vihollinen2.Mass = 70;
289        Vihollinen2.AngularDamping = 0.2;
290
291        //Tehdään uudet satunnaisaivot, jotka liikkuvat nopeudella 200
292        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(150);
293
294        //Ominaisuuksien muokkaaminen
295        satunnaisAivot.ChangeMovementSeconds = 3;
296        Vihollinen2.Brain = satunnaisAivot;
297
298        Timer Ampuminen = new Timer();
299        Ampuminen.Interval = 3.5;
300        Ampuminen.Timeout += delegate 
301        {
302            if (pelaaja != null)
303            {
304                Vector suunta = pelaaja.Position - Vihollinen2.Position;
305
306                if (suunta.Magnitude < 500)
307                {
308                    suunta = suunta.Normalize();
309                    PhysicsObject vihunAmmus = new PhysicsObject(Laser);
310                    vihunAmmus.Position = Vihollinen2.Position + suunta * 30;
311                    vihunAmmus.IgnoresCollisionResponse = true;
312                    vihunAmmus.Size *= 0.1;
313                    vihunAmmus.Angle = suunta.Angle;
314                    Add(vihunAmmus);
315                    vihunAmmus.Hit(suunta * 2000);
316                    vihunAmmus.Tag = "vihuammus";
317                }
318            }
319        };
320        Ampuminen.Start();
321        Vihollinen2.Removed += delegate { Ampuminen.Stop(); };
322
323        voittoLaskuri.MaxValue++;
324    }
325
326    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
327    {
328        if (kohde.Tag.ToString() != "reuna")
329        {
330            kohde.Destroy();
331            pistelaskuri.Value += 100;
332            Explosion rajahdys = new Explosion(27);
333            rajahdys.Position = kohde.Position;
334            Add(rajahdys);
335            //rajahdys.Image = rajahdysKuva;
336            //rajahdys.Sound = rajahdysAani;
337            pelaaja.IgnoresExplosions = true;
338
339            String tag = kohde.Tag.ToString();
340            if (tag == "pahis" || tag == "pahis2" || tag == "bossi")
341            {
342                voittoLaskuri.Value++;
343            }
344        }
345        ammus.Destroy();
346
347    }
348
349    void LuoPistelaskuri()
350    {
351
352
353        pistelaskuri = new IntMeter(0);
354
355        Label pisteNaytto = new Label();
356        pisteNaytto.X = Screen.Left + 100;
357        pisteNaytto.Y = Screen.Top - 100;
358        pisteNaytto.TextColor = Color.Black;
359        pisteNaytto.Color = Color.White;
360        pisteNaytto.Title = "Pisteet";
361        pisteNaytto.BindTo(pistelaskuri);
362        Add(pisteNaytto);
363    }
364
365    void AmmuAseella(PhysicsObject pelaaja)
366    {
367        PhysicsObject ammus = ase.Shoot();
368
369        if (ammus != null)
370        {
371            ammus.Tag = "ammus";
372            ammus.Size *= 0.5;
373            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
374
375            ammus.Image = Laser;
376            ase.FireRate = 5.0;
377
378            AddCollisionHandler(ammus, AmmusOsui);
379        }
380    }
381    void ElamaLoppui()
382    {
383        MessageDisplay.Add("Pelaaja tuhoutui");
384        pelaaja.Destroy();
385        Timer.SingleShot(1, Valikko);
386       
387
388
389    }
390    void PelaajaVahingoittuu(PhysicsObject Pelaaja,PhysicsObject Pahis, int Vahinko)
391    {
392        elamaLaskuri.Value -= Vahinko;
393
394    }
395
396}
Note: See TracBrowser for help on using the repository browser.