source: 2016/27/OskariL/Ikaros Project 1/Ikaros Project 1/Ikaros_Project_1/Ikaros_Project_1.cs @ 7954

Revision 7954, 16.9 KB checked in by oslahtin, 3 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 Ikaros_Project_1 : PhysicsGame
10{
11    Boolean AlkuvalikkoKayty = false;
12    Boolean isTimerRunning = false;
13    Image ikaros = LoadImage("ikaros");
14    Image siipi = LoadImage("siipi");
15    Image vihu1 = LoadImage("vihu1");
16    Image pommi = LoadImage("pommi");
17    PhysicsObject pelaaja;
18    PhysicsObject ammus;
19    PhysicsObject pahis1;
20    PhysicsObject pahis2;
21    Label PahiksenElama;
22    Label pikkuPahiksenElama;
23    MessageWindow GameOver;
24    MessageWindow GameOver2;
25    //MessageWindow YouWon;
26
27    Color pahisVari;
28    Color pahisVari2;
29    Color pahisVari3;
30    Color pahisVari4;
31
32    Vector nopeusYlos = new Vector(0, 400);
33    Vector nopeusAlas = new Vector(0, -400);
34    Vector nopeusVasemmalle = new Vector(-400, 0);
35    Vector nopeusOikealle = new Vector(400, 0);
36    Vector impulssi = new Vector(RandomGen.SelectOne(0, 200, -200, 150, -150, 42), RandomGen.SelectOne(0, 600, -600, 200, -200, 1200, -1200));
37
38    ExplosionSystem rajahdys2 = new ExplosionSystem(LoadImage("rajahdys_kuva"), 200);
39    Explosion rajahdys;
40
41    DoubleMeter alaspainLaskuri;
42    Timer aikaLaskuri;
43
44    IntMeter PelaajanElamat;
45    IntMeter pikkuPahiksenElamat;
46    IntMeter PahiksenElamat;
47    int KenttaNro = 0;
48    int i = 0;
49    int ShieldTimes = 0;
50    IntMeter pommienMaara;
51    public override void Begin()
52    {
53       if (AlkuvalikkoKayty == false)
54       {
55           Alkuvalikko();
56       }
57       ClearAll();
58       isTimerRunning = false;
59       LuoAikaLaskuri();
60       LuoKentta();
61       LuoPommilaskuri();
62       AsetaNappaimet();
63    }
64    void Alkuvalikko()
65    {
66        MultiSelectWindow valikko = new MultiSelectWindow("Voitit pelin",
67"Uudestaan", "Poistu");
68        valikko.ItemSelected += PainettiinValikonNappia;
69        Add(valikko);
70    }
71    void PainettiinValikonNappia(int valinta)
72    {
73        switch (valinta)
74        {
75            case 0:
76                AlkuvalikkoKayty = true;
77                KenttaNro++;
78                Begin();
79                break;
80            case 1:
81                Exit();
82                break;
83        }
84    }
85    void LuoKentta()
86    {
87        LuoPystySeina(Level.Left - 150, 0.0);
88        LuoPystySeina(Level.Right - 450, 0.0);
89        LuoVaakaSeina(-300.0, Level.Bottom - 80);
90        LuoVaakaSeina(-300.0, Level.Top + 90);
91        Level.Background.CreateGradient(Color.DarkAzure, Color.Black);
92        Level.AmbientLight = 0.65;
93        Light valo = new Light();
94        valo.Intensity = 1.0;
95        valo.Distance = 150;
96        valo.X = -300.0;
97        valo.Y = Level.Top - 100;
98        Add(valo);
99        Camera.Zoom(1);
100        LuoPelaaja();
101        LuoPahis1();
102        LuoPahis2(Level.Right - 600.0, Level.Top - 250);
103    }
104    void LuoPelaaja()
105    {
106        pelaaja = new PhysicsObject(64.0, 64.0);
107        pelaaja.X = -300.0;
108        pelaaja.Y = Level.Bottom + 200.0;
109        pelaaja.Image = ikaros;
110        pelaaja.CanRotate = false;
111        pelaaja.Mass = 5.0;
112        pelaaja.CollisionIgnoreGroup = 3;
113        pelaaja.IgnoresExplosions = true;
114        Add(pelaaja);
115
116        PelaajanElamat = new IntMeter(15);
117
118        Label pelaajanElama = new Label();
119        pelaajanElama.Title = "Pelaajan elämät:";
120        pelaajanElama.X = pelaaja.X + 600;
121        pelaajanElama.Y = pelaaja.Y;
122        pelaajanElama.TextColor = Color.Black;
123        pelaajanElama.Color = Color.Transparent;
124        pelaajanElama.BindTo(PelaajanElamat);
125        Add(pelaajanElama);
126
127    }
128    void LuoPahis1()
129    {
130        pahis1 = new PhysicsObject(128.0, 128.0);
131        pahis1.X = -300.0;
132        pahis1.Y = Level.Top - 100.0;
133        pahis1.Shape = Shape.Circle;
134        pahis1.Image = vihu1;
135        pahis1.Mass = 4000.0;
136        pahis1.Tag = "pahis";
137        pahis1.CollisionIgnoreGroup = 2;
138        pahis1.IgnoresExplosions = true;
139        pahis1.IgnoresCollisionResponse = false;
140        Add(pahis1);
141
142        PahiksenElamat = new IntMeter(550);
143
144        PahiksenElama = new Label();
145        PahiksenElama.Title = "Pahiksen elämät:";
146        PahiksenElama.X = pelaaja.X + 600;
147        PahiksenElama.Y = pelaaja.Y + 30;
148        PahiksenElama.TextColor = Color.Black;
149        PahiksenElama.Color = Color.Transparent;
150        PahiksenElama.BindTo(PahiksenElamat);
151        Add(PahiksenElama);
152
153    }
154    void LuoPahis2(double x, double y)
155    {
156        pahis2 = new PhysicsObject(48.0, 48.0);
157        pahis2.X = x;
158        pahis2.Y = y;
159        pahis2.Shape = Shape.Rectangle;
160        pahis2.Color = Color.Azure;
161        pahis2.Mass = 400.0;
162        pahis2.Tag = "pahis";
163        pahis2.Image = pommi;
164        pahis2.CollisionIgnoreGroup = 2;
165        pahis2.IgnoresExplosions = true;
166        pahis2.IgnoresCollisionResponse = false;
167        Add(pahis2);
168
169        pikkuPahiksenElamat = new IntMeter(30);
170       
171        pikkuPahiksenElama = new Label();
172        pikkuPahiksenElama.Title = "Pienet pahikset:";
173        pikkuPahiksenElama.X = pelaaja.X + 600;
174        pikkuPahiksenElama.Y = pelaaja.Y + 90;
175        pikkuPahiksenElama.TextColor = Color.Black;
176        pikkuPahiksenElama.Color = Color.Transparent;
177        pikkuPahiksenElama.BindTo(pikkuPahiksenElamat);
178        Add(pikkuPahiksenElama);
179
180    }
181
182    PhysicsObject LuoPystySeina(double x, double y)
183    {
184        //luodaan seinät
185        PhysicsObject seina = PhysicsObject.CreateStaticObject(20.0, 1000.0);
186        seina.Shape = Shape.Rectangle;
187        seina.X = x;
188        seina.Y = y;
189        seina.Restitution = 0.0;
190        seina.Tag = "seina";
191        Add(seina);
192        return seina;
193    }
194    PhysicsObject LuoVaakaSeina(double x, double y)
195    {
196        PhysicsObject seina = PhysicsObject.CreateStaticObject(700.0, 20.0);
197        seina.Shape = Shape.Rectangle;
198        seina.X = x;
199        seina.Y = y;
200        seina.Restitution = 0.0;
201        seina.Tag = "seina";
202        Add(seina);
203        return seina;
204    }
205    void AsetaNopeus(PhysicsObject pelaaja, Vector nopeus)
206    {
207        pelaaja.Velocity = nopeus;
208    }
209    void AsetaNappaimet()
210    {
211        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Liiku ylös", pelaaja, nopeusYlos);
212        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
213        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Liiku alas", pelaaja, nopeusAlas);
214        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
215        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liiku vasemmalle", pelaaja, nopeusVasemmalle);
216        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
217        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liiku oikealle", pelaaja, nopeusOikealle);
218        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero);
219        Keyboard.Listen(Key.Z, ButtonState.Down, AmmuPalloa1, "Ammu");
220        Keyboard.Listen(Key.X, ButtonState.Pressed, Pommi, "Pommi");
221
222        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
223        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
224
225    }
226    void Pommi()
227    {
228        if (pommienMaara.Value == 0)
229        {
230            return;
231        }
232        else
233        {
234            rajahdys = new Explosion(500);
235            rajahdys.Position = pelaaja.Position;
236            Add(rajahdys);
237            pommienMaara.Value -= 1;
238        }
239    }
240    void LuoPommilaskuri()
241    {
242        pommienMaara = new IntMeter(3);
243
244        Label pisteNaytto = new Label();
245        pisteNaytto.Title = "Pommit:";
246        pisteNaytto.X = pelaaja.X + 600;
247        pisteNaytto.Y = pelaaja.Y + 120;
248        pisteNaytto.TextColor = Color.Black;
249
250        pisteNaytto.BindTo(pommienMaara);
251        Add(pisteNaytto);
252    }
253    void PahisAmpuu()
254    {
255        LuoAmmus(pahis1.X, pahis1.Y - 100, Shape.Triangle, pahisVari, 2, false);
256        ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
257    }
258    void AmmuPalloa1()
259    {
260        LuoAmmus(pelaaja.X, pelaaja.Y + 24, Shape.Circle, pahisVari, 3, false);
261        ammus.Hit(new Vector(RandomGen.SelectOne(0, 200, -200, 90, -150, 42), RandomGen.SelectOne(0, 800, -600, 200, -200, 120, -1200)));
262
263    }
264    void LuoAmmus(double x, double y, Shape shape, Color vari, int cig, bool ignores)
265    {
266        if (i < 10)
267        {
268            ammus = new PhysicsObject(32.0, 32.0);
269            ammus.X = x;
270            ammus.Y = y;
271            ammus.Shape = shape;
272            ammus.Color = vari;
273            ammus.CanRotate = true;
274            ammus.IgnoresCollisionResponse = false;
275            ammus.IgnoresExplosions = ignores;
276            ammus.CollisionIgnoreGroup = cig;
277            ammus.IgnoresCollisionWith(ammus);
278            ammus.Tag = "ammus";
279            Add(ammus);
280            AddCollisionHandler(ammus, "seina", CollisionHandler.DestroyObject);
281            //AddCollisionHandler(ammus, "ammus", CollisionHandler.ExplodeObject(1, true));
282            AddCollisionHandler(ammus, pahis1, PahistaAmmutaan);
283            AddCollisionHandler(ammus, pelaaja, PelaajaaAmmutaan);
284            AddCollisionHandler(ammus, pahis2, PikkuPahistaAmmutaan);
285        }
286        else if (i > 10)
287        {
288            LuoAikaLaskuri();
289        }
290    }
291    void PelaajaaAmmutaan(PhysicsObject ammus, PhysicsObject pelaaja)
292    {
293
294        if (PelaajanElamat > 0)
295        {
296            PelaajanElamat.Value -= 1;
297            if (PelaajanElamat == 0)
298            {
299                pelaaja.Destroy();
300                alaspainLaskuri.Stop();
301                GameOver2 = new MessageWindow("Hävisit pelin!");
302                Add(GameOver2);
303                Timer.SingleShot(5, Begin);
304            }
305
306        }
307    }
308    void PahistaAmmutaan(PhysicsObject ammus, PhysicsObject pahis)
309    {
310        if (PahiksenElamat > 0)
311        {
312            PahiksenElamat.Value -= 1;
313        }
314        if (PahiksenElamat == 0)
315        {
316            pahis.Destroy();
317            //YouWon = new MessageWindow("Voitit pelin");
318            //Add(YouWon);
319            Alkuvalikko();
320            ammus.Destroy();
321        }
322    }
323    void PikkuPahistaAmmutaan(PhysicsObject ammus, PhysicsObject pahis)
324    {
325        if (pikkuPahiksenElamat > 0)
326        {
327            pikkuPahiksenElamat.Value -= 1;
328            if (pikkuPahiksenElamat == 0)
329            {
330                rajahdys = new Explosion(320);
331                rajahdys.Position = pahis.Position;
332                Add(rajahdys);
333                rajahdys.AddShockwaveHandler(pahis1, PaineaaltoOsuu);
334                pahis.Destroy();
335            }
336        }
337    }
338    void PaineaaltoOsuu(IPhysicsObject pahis1, Vector shokki)
339    {
340        PahiksenElamat.Value -= 100;
341    }
342    void LuoAikaLaskuri()
343    {
344        if (isTimerRunning == true)
345        {
346            return;
347        }
348        alaspainLaskuri = new DoubleMeter(80);
349        Label aikaaJaljella = new Label();
350        aikaaJaljella.X = 300.0;
351        aikaaJaljella.Y = Level.Bottom + 260.0;
352        aikaaJaljella.Title = "Aikaa jäljellä:";
353        aikaaJaljella.BindTo(alaspainLaskuri);
354        Add(aikaaJaljella);
355
356        aikaLaskuri = new Timer();
357        aikaLaskuri.Interval = 0.2;
358        aikaLaskuri.Timeout += AikaLoppui;
359        aikaLaskuri.Start();
360        isTimerRunning = true;
361    }
362    void AikaLoppui()
363    {
364        pahisVari = RandomGen.NextColor();
365        pahisVari2 = RandomGen.NextColor();
366        pahisVari3 = RandomGen.NextColor();
367        pahisVari4 = RandomGen.NextColor();
368        alaspainLaskuri.Value -= 0.2;
369        if (alaspainLaskuri.Value >= 0)
370        {
371            LuoAmmus(RandomGen.NextDouble(Level.Right - 450, Level.Right + 450), Level.Bottom - 100, RandomGen.SelectOne(Shape.Diamond, Shape.Ellipse, Shape.Hexagon), Color.Cyan, 2, true);
372            ammus.Hit(new Vector(0.0, RandomGen.NextDouble(5.0, 50.0)));
373            LuoAmmus(RandomGen.NextDouble(Level.Right - 450, Level.Right + 450), Level.Bottom - 100, RandomGen.SelectOne(Shape.Diamond, Shape.Ellipse, Shape.Hexagon), Color.Cyan, 2, true);
374            ammus.Hit(new Vector(0.0, RandomGen.NextDouble(5.0, 50.0)));
375            LuoAmmus(RandomGen.NextDouble(Level.Left - 450, Level.Left - 150), Level.Bottom - 100, RandomGen.SelectOne(Shape.Diamond, Shape.Ellipse, Shape.Hexagon), Color.Cyan, 2, true);
376            ammus.Hit(new Vector(0.0, RandomGen.NextDouble(5.0, 50.0)));
377
378            LuoAmmus(pelaaja.X, pelaaja.Y + 150, Shape.Star, Color.Azure, 2, false);
379            ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
380            if (alaspainLaskuri.Value <= 60 && 3 <= ShieldTimes)
381            {
382                LuoAmmus(pahis1.X, pahis1.Y + 50.0, Shape.Circle, Color.Aquamarine, 2, false);
383                LuoAmmus(pahis1.X, pahis1.Y - 50.0, Shape.Circle, Color.Aquamarine, 2, false);
384                LuoAmmus(pahis1.X + 20.0, pahis1.Y - 40.0, Shape.Circle, Color.Aquamarine, 2, false);
385                LuoAmmus(pahis1.X - 20.0, pahis1.Y - 40.0, Shape.Circle, Color.Aquamarine, 2, false);
386                LuoAmmus(pahis1.X + 40.0, pahis1.Y - 20.0, Shape.Circle, Color.Aquamarine, 2, false);
387                LuoAmmus(pahis1.X - 40.0, pahis1.Y - 20.0, Shape.Circle, Color.Aquamarine, 2, false);
388                LuoAmmus(pahis1.X + 50.0, pahis1.Y, Shape.Circle, Color.Aquamarine, 2, false);
389                LuoAmmus(pahis1.X - 50.0, pahis1.Y, Shape.Circle, Color.Aquamarine, 2, false);
390                LuoAmmus(pahis1.X + 40.0, pahis1.Y + 20.0, Shape.Circle, Color.Aquamarine, 2, false);
391                LuoAmmus(pahis1.X - 40.0, pahis1.Y + 20.0, Shape.Circle, Color.Aquamarine, 2, false);
392                LuoAmmus(pahis1.X + 20.0, pahis1.Y + 40.0, Shape.Circle, Color.Aquamarine, 2, false);
393                LuoAmmus(pahis1.X - 20.0, pahis1.Y + 40.0, Shape.Circle, Color.Aquamarine, 2, false);
394                ammus.Hit(new Vector(0.0, 5.0));
395                ShieldTimes++;
396            }
397        }
398        if (40 >= alaspainLaskuri.Value)
399        {
400            LuoAmmus(pelaaja.X - 150, pelaaja.Y -150, Shape.Circle, Color.RosePink, 2, false);
401            ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
402            LuoAmmus(pelaaja.X - 150, pelaaja.Y + 150, Shape.Triangle, Color.OrangeRed, 2, false);
403            ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
404            LuoAmmus(pelaaja.X + 150, pelaaja.Y - 150, Shape.Hexagon, Color.Olive, 2, false);
405            ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
406            LuoAmmus(pelaaja.X + 150, pelaaja.Y + 150, Shape.Star, Color.Azure, 2, false);
407            ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
408
409
410            LuoAmmus(pahis1.X, pahis1.Y - 50, Shape.Circle, Color.BrightGreen, 2, false);
411            ammus.Hit(new Vector(0.0, -130.0));
412            LuoAmmus(pahis1.X, pahis1.Y - 50.0, Shape.Circle, Color.Aquamarine, 2, false);
413            ammus.Hit(new Vector(50.0, -130.0));
414            LuoAmmus(pahis1.X, pahis1.Y - 50.0, Shape.Circle, Color.Aquamarine, 2, false);
415            ammus.Hit(new Vector(-50.0, -130.0));
416            LuoAmmus(pahis1.X, pahis1.Y - 50.0, Shape.Circle, Color.BrightGreen, 2, false);
417            ammus.Hit(new Vector(100.0, -130.0));
418            LuoAmmus(pahis1.X, pahis1.Y - 50.0, Shape.Circle, Color.BrightGreen, 2, false);
419            ammus.Hit(new Vector(-100.0, -130.0));
420
421        }
422        if (alaspainLaskuri.Value >= 20)
423        {
424            LuoAmmus(pelaaja.X - 150, pelaaja.Y, Shape.Circle, Color.RosePink, 2, false);
425            ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
426            LuoAmmus(pelaaja.X + 150, pelaaja.Y, Shape.Triangle, Color.OrangeRed, 2, false);
427            ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
428            LuoAmmus(pelaaja.X, pelaaja.Y - 150, Shape.Hexagon, Color.Olive, 2, false);
429            ammus.Hit(RandomGen.NextVector(-100.0, 100.0));
430
431        }
432        if (alaspainLaskuri.Value <= 0)
433        {
434            alaspainLaskuri.Stop();
435            isTimerRunning = false;
436            GameOver = new MessageWindow("Hävisit pelin");
437            Add(GameOver);
438            Exit();
439            //while (i < 10)
440            //{
441            //    LuoAmmus(pahis1.X, pahis1.Y - 100, Shape.Circle, pahisVari, 2);
442            //    ammus.Hit(RandomGen.NextVector(-30.0, 10.0));
443            //    //LuoAmmus(pahis1.X, pahis1.Y + 100, Shape.Rectangle, pahisVari2, 2);
444            //    //ammus.Hit(RandomGen.NextVector(-300.0, 100.0));
445            //    //LuoAmmus(pahis1.X + 100, pahis1.Y, Shape.Triangle, pahisVari3, 2);
446            //    //ammus.Hit(RandomGen.NextVector(-300.0, 300.0));
447            //    //LuoAmmus(pahis1.X - 100, pahis1.Y, Shape.Star, pahisVari4, 2);
448            //    //ammus.Hit(RandomGen.NextVector(-300.0, 300.0));
449            //    i++;
450            //}
451        }
452    }
453
454}
Note: See TracBrowser for help on using the repository browser.