source: 2016/30/SamuelL/jotain/jotain/jotain/jotain.cs @ 8120

Revision 8120, 14.8 KB checked in by salamber, 3 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Assets;
4using Jypeli.Controls;
5using Jypeli.Effects;
6using Jypeli.Widgets;
7
8public class jotain : PhysicsGame
9{
10    const double nopeus = 200;
11    const double hyppyNopeus = 750;
12    const int RUUDUN_KOKO = 40;
13
14    PlatformCharacter pelaaja1;
15    AssaultRifle ase1;
16    bool ase1Flipattu = false;
17    bool otettuOsumaa = false;
18    IntMeter helat;
19
20    Image idle = LoadImage("idle");
21    Animation hahmokävely;
22    Image pelaajaputoaa = LoadImage("fall");
23    Image tahtiKuva = LoadImage("tahti");
24    Image aavikkotausta2 = LoadImage("aavikkotausta2");
25    Image kasvi1 = LoadImage("tausta - kasvi 1");
26    Image kasvi2 = LoadImage("tausta - kasvit 2");
27    Image taustaruoho = LoadImage("tausta ruoho");
28    Image tuli = LoadImage("tulikuva");
29    Image Pimeyskuva = LoadImage("pimeys");
30    Image valokuva = LoadImage("valokuva");
31    Image luolapaikka = LoadImage("luolapaikka");
32    Image Isokivi = LoadImage("kivi2");
33    Image pienikivi = LoadImage("kivi");
34    Image puu = LoadImage("puuu");
35    Image Asekuva = LoadImage("kivääri");
36    Image Tähtäin = LoadImage("tähtäin");
37    Image[] Hirviökuvat = LoadImages("hirviö1", "hirviö2");
38    Image alienpesä = LoadImage("pesä");
39
40    int kenttänumero = 1;
41
42    Animation kävely;
43
44    SoundEffect maaliAani = LoadSoundEffect("maali");
45    SoundEffect TuliPalo = LoadSoundEffect("tuli");
46    SoundEffect pistolshot = LoadSoundEffect("PistolShot");
47    SoundEffect spooky = LoadSoundEffect("spooky");
48    SoundEffect alien = LoadSoundEffect("aline");
49    SoundEffect liekinheitin = LoadSoundEffect("liekinheitin");
50
51    public override void Begin()
52    {
53       
54        AloitaKentta();
55       
56       
57
58    }
59
60    void LuoKentta()
61    {
62        ase1Flipattu = false;
63        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttänumero);
64        kentta.SetTileMethod('#', LisaaTaso);
65        kentta.SetTileMethod('*', LisaaTahti);
66        kentta.SetTileMethod('N', LisaaPelaaja);
67        kentta.SetTileMethod('k', LisaaKasvi, kasvi1, 1);
68        kentta.SetTileMethod('K', LisaaKasvi, kasvi2, -1);
69        kentta.SetTileMethod('r', Lisaaruoho, taustaruoho, 1);
70        kentta.SetTileMethod('T', Lisaatuli);
71        kentta.SetTileMethod('V', LisaaVaihto);
72        kentta.SetTileMethod('O', Lisaakivi, Isokivi, 1);
73        kentta.SetTileMethod('o', Lisaakivi, pienikivi, -1);
74        kentta.SetTileMethod('p', Lisaapuu, puu, 1);
75        kentta.SetTileMethod('L', Lisaapesä);
76        //kentta.SetTileMethod('B', LisaaTausta);
77        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
78        kentta.Optimize('#');
79        if (kenttänumero == 1)
80        {
81            Level.Background.Image = aavikkotausta2;
82        }
83        else if (kenttänumero == 2)
84        {
85            Level.Background.Image = luolapaikka;
86        }
87        Level.Background.FitToLevel();
88
89
90    }
91
92    void LisaaTaso(Vector paikka, double leveys, double korkeus)
93    {
94        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
95        taso.Position = paikka;
96        taso.IsVisible = true;
97        taso.Tag = "taso";
98        Add(taso);
99        taso.Color = Color.DarkYellow;
100    }
101    void LisaaKasvi(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
102    {
103        GameObject kasvi = new GameObject(leveys * 1.5, korkeus * 3);
104        kasvi.Position = paikka + new Vector(0, 0);
105        Add(kasvi, taso);
106        kasvi.Image = kuva;
107
108        GameObject valo = new GameObject(100, 100);
109        valo.Image = valokuva;
110        valo.Position = paikka;
111        valo.Y += 50;
112        Add(valo, 3);
113    }
114
115    void Lisaaruoho(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
116    {
117        GameObject ruoho = new GameObject(leveys, korkeus);
118        ruoho.Position = paikka + new Vector();
119        Add(ruoho, taso);
120        ruoho.Image = kuva;
121
122    }
123
124    void LisaaTahti(Vector paikka, double leveys, double korkeus)
125    {
126        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
127        tahti.IgnoresCollisionResponse = true;
128        tahti.Position = paikka;
129        tahti.Image = tahtiKuva;
130        tahti.Tag = "tahti";
131        Add(tahti);
132    }
133    void OtaOsumaa(PhysicsObject a, PhysicsObject b)
134    {
135        if (!otettuOsumaa)
136        {
137            helat.Value--;
138            otettuOsumaa = true;
139        }
140        Timer.SingleShot(3, delegate { otettuOsumaa = false; });
141    }
142
143    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
144    {
145        pelaaja1 = new PlatformCharacter(leveys * 1.5, korkeus * 1.5);
146        pelaaja1.Position = paikka;
147        pelaaja1.Mass = 4.0;
148        pelaaja1.Image = idle;
149        pelaaja1.Tag = "pelaaja1";
150        pelaaja1.CollisionIgnoreGroup = 3;
151        pelaaja1.AnimWalk = hahmokävely;
152        pelaaja1.AnimIdle = new Animation(idle);
153        pelaaja1.AnimFall = new Animation(pelaajaputoaa);
154        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
155        Add(pelaaja1);
156        AddCollisionHandler(pelaaja1, "vaihto", tormaavaihtoon);
157        AddCollisionHandler(pelaaja1, "hirviö", OtaOsumaa);
158
159        helat = new IntMeter(5, 0, 5);
160        helat.LowerLimit += delegate 
161        {
162            kenttänumero = 1;
163            AloitaKentta(); 
164        };
165
166        ProgressBar elamaPalkki = new ProgressBar(50, 10);
167        elamaPalkki.Y = 50;
168        elamaPalkki.BindTo(helat);
169        pelaaja1.Add(elamaPalkki);
170
171
172       
173        Timer ajastin = new Timer();
174        ajastin.Interval = 0.05;
175        ajastin.Timeout += delegate
176        {
177           
178        };
179        ajastin.Start();
180
181        ase1 = new AssaultRifle(Asekuva.Width, Asekuva.Height);
182        ase1.Image = Asekuva;
183        ase1.Size *= 0.7;
184        ase1.FireRate = 10.5;
185        ase1.Tag = "ase";
186        ase1.AttackSound = pistolshot;
187
188        Add(ase1);
189    }
190
191    void LisaaNappaimet()
192    {
193        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
194        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
195
196        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
197        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
198        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
199        Mouse.Listen(MouseButton.Left, ButtonState.Down, ammuaseella, "Liikkuu vasemmalle");
200
201
202        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
203
204        ControllerOne.Listen(Button.A, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
205        ControllerOne.Listen(Button.B, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
206        ControllerOne.Listen(Button.BigButton, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
207        Mouse.IsCursorVisible = false;
208
209
210
211        GameObject hiiri = new GameObject(Tähtäin);
212        hiiri.Size *= 0.1;
213        Add(hiiri, 3);
214       
215        Timer hiiriAjastin = new Timer();
216        hiiriAjastin.Interval = 0.01;
217        hiiriAjastin.Timeout += delegate
218        {
219            hiiri.Position = Mouse.PositionOnWorld;
220        };
221        hiiriAjastin.Start();
222
223        Mouse.ListenMovement(0.0, KaannetaanAsetta, "");
224
225        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
226    }
227    void KaannetaanAsetta(AnalogState hiirenTila)
228    {
229        Vector suunta = Mouse.PositionOnWorld - pelaaja1.Position;
230        ase1.Position = pelaaja1.Position + suunta.Normalize() * 30;
231        ase1.Angle = suunta.Angle;
232
233        double kulma = suunta.Angle.Degrees;
234       
235        if (kulma < 90 && kulma > -90)
236        {
237            if (ase1Flipattu)
238            {
239                ase1.FlipImage();
240                ase1Flipattu = false;
241            }
242        }
243        else
244        {
245            if (!ase1Flipattu)
246            {
247                ase1.FlipImage();
248                ase1Flipattu = true;
249            }
250        }
251
252    }
253
254    void Liikuta(PlatformCharacter hahmo, double nopeus)
255    {
256        hahmo.Walk(nopeus);
257    }
258
259    void Hyppaa(PlatformCharacter hahmo, double nopeus)
260    {
261        hahmo.Jump(nopeus);
262    }
263
264    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
265    {
266        maaliAani.Play();
267        MessageDisplay.Add("Keräsit tähden!");
268        tahti.Destroy();
269    }
270
271    void Lisaatuli(Vector paikka, double leveys, double korkeus)
272    {
273
274        Flame liekki = new Flame(tuli);
275        liekki.MinLifetime = 0.1;
276        liekki.MaxLifetime = 0.5;
277        liekki.MinScale = 10;
278        liekki.MaxScale = 30;
279        liekki.Position = paikka;
280        Add(liekki);
281
282        Timer ajastin = new Timer();
283        ajastin.Interval = 0.05;
284        ajastin.Timeout += delegate
285        {
286            liekki.Position = paikka + RandomGen.NextVector(0, 30);
287        };
288        ajastin.Start();
289    }
290
291    void LisaaVaihto(Vector paikka, double leveys, double korkeus)
292    {
293        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
294        taso.Position = paikka;
295        taso.IsVisible = false;
296        Add(taso);
297        taso.Tag = "vaihto";
298    }
299    void VaihdaKenttaa()
300    {
301        kenttänumero++;
302        AloitaKentta();
303    }
304
305    void AloitaKentta()
306    {
307        ClearAll();       
308        kävely = LoadAnimation("pelaaja");
309        Gravity = new Vector(0, -1000);
310        hahmokävely = LoadAnimation("hahmoanimaatio");
311        SmoothTextures = false;
312
313        LuoKentta();
314        LisaaNappaimet();
315
316        Camera.Follow(pelaaja1);
317        Camera.ZoomFactor = 1.2;
318        Camera.StayInLevel = true;
319
320        if (kenttänumero == 1)
321        {
322            MediaPlayer.Play("tuli");
323            MediaPlayer.IsRepeating = true;
324        }
325        else if (kenttänumero == 2)
326        {
327            MediaPlayer.Stop();
328            MediaPlayer.Play("spooky");
329            MediaPlayer.IsRepeating = true;
330        }
331    }
332    void tormaavaihtoon(PhysicsObject pelaaja, PhysicsObject vaihto)
333    {
334        VaihdaKenttaa();
335
336
337
338    }
339    void Lisaakivi(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
340    {
341        GameObject Isokivi = new GameObject(leveys * 1, korkeus * 1);
342        Isokivi.Position = paikka + new Vector(0, 0);
343        Add(Isokivi, taso);
344        Isokivi.Image = kuva;
345
346    }
347    void Lisaapuu(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
348    {
349        GameObject puu = new GameObject(leveys * 3, korkeus * 3);
350        puu.Position = paikka + new Vector(0, 0);
351        Add(puu, taso);
352        puu.Image = kuva;
353
354
355
356    }
357    void ammuaseella()
358    {
359        PhysicsObject ammus = ase1.Shoot();
360        Vector ampumispaikka = ase1.AbsolutePosition;
361
362        if (ammus != null)
363        {
364            ammus.Size *= 1.0;
365            ammus.Image = null;
366            ammus.Color = Color.Black;
367            ammus.Shape = Shape.Rectangle;
368            ammus.Position += ase1.AbsoluteAngle.GetVector() * 20;
369            ammus.MaximumLifetime = TimeSpan.FromSeconds(5);
370            ammus.Tag = "ammus";
371           
372            Timer ajastin = new Timer();
373            ajastin.Interval = 0.01;
374            ajastin.Timeout += delegate
375            {
376                GameObject vana = new GameObject(ammus.Width * 1.7, ammus.Height * 0.4);
377                vana.Angle = (ammus.Position - ampumispaikka).Angle;
378                vana.Color = Color.Black; //new Color(0, 0, 0, 128);
379                vana.Position = ammus.Position;
380                vana.FadeColorTo(Color.Transparent, 0.5);
381                vana.LifetimeLeft = TimeSpan.FromSeconds(0.5);
382                Add(vana);
383            };
384            ajastin.Start();
385
386            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
387            {
388                ammus.Destroy();
389                ajastin.Stop();
390            });
391        }
392    }
393    void Lisaapesä(Vector paikka, double leveys, double korkeus)
394    {
395        PhysicsObject pesä = PhysicsObject.CreateStaticObject(leveys*2, korkeus*1.5);
396        pesä.Position = paikka;
397        pesä.IsVisible = true;
398        pesä.Y -= korkeus*0.2;
399        pesä.Tag = "pesä";
400        pesä.IgnoresCollisionResponse = true;
401        Add(pesä);
402        pesä.Color = Color.Emerald;
403        pesä.Image = alienpesä;
404
405        Timer ajastin = new Timer();
406        ajastin.Interval = 8;
407        ajastin.Timeout += delegate
408        {
409            Lisäähirviö(paikka,leveys,korkeus);
410        };
411        ajastin.Start();
412
413        IntMeter elämät = new IntMeter(12);
414        AddCollisionHandler(pesä, "ammus", delegate(PhysicsObject a, PhysicsObject b)
415        {
416            elämät.Value--;
417        });
418        elämät.LowerLimit += delegate
419        {
420            pesä.Destroy();
421            ajastin.Stop();
422            LisaaEfekti(pesä.Position);
423        };
424    }
425
426    void Lisäähirviö(Vector paikka, double leveys, double korkeus)
427    {
428        PhysicsObject hirviö = new PhysicsObject(leveys, korkeus);
429        hirviö.Animation = new Animation(Hirviökuvat);
430        hirviö.Animation.Start();
431        hirviö.Position = paikka;
432        hirviö.CanRotate = false;
433        hirviö.Tag = "hirviö";
434        Add(hirviö);
435
436        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(100);
437        satunnaisAivot.WanderRadius = 200;
438        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
439        seuraajanAivot.Speed = 80;                 // Millä nopeudella kohdetta seurataan
440        seuraajanAivot.DistanceFar = 270;           // Etäisyys jolla aletaan seurata kohdetta
441        seuraajanAivot.FarBrain = satunnaisAivot;
442        hirviö.Brain = seuraajanAivot;
443
444        IntMeter elämät = new IntMeter(3);
445        AddCollisionHandler(hirviö, "ammus", delegate(PhysicsObject a, PhysicsObject b)
446        {
447            elämät.Value--;
448        });
449        elämät.LowerLimit += delegate
450        {
451            hirviö.Destroy();
452            LisaaEfekti(hirviö.Position);
453            MediaPlayer.Play("alien");
454            MediaPlayer.IsRepeating = false;
455        };
456    }
457
458    void LisaaEfekti(Vector paikka)
459    {
460        for (int i = 0; i < 10; i++)
461        {
462            PhysicsObject pala = new PhysicsObject(10, 10);
463            //pala.Image = ...
464            pala.Color = Color.DarkGreen;
465            pala.FadeColorTo(Color.Transparent, 1.0);
466            pala.LifetimeLeft = TimeSpan.FromSeconds(1.0);
467            pala.CollisionIgnoreGroup = 3;
468            pala.Position = paikka;
469            pala.Hit(RandomGen.NextVector(50, 200));
470            Add(pala);
471        }
472    }
473
474}
Note: See TracBrowser for help on using the repository browser.