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

Revision 8024, 17.8 KB checked in by oslahtin, 3 years ago (diff)

valmis peli. TODO: uploadaa Githubiin

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