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

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