source: 2014/30/ToukoA/AssassinsOfNight/AssassinsOfNight/AssassinsOfNight/AssassinsOfNight.cs @ 5666

Revision 5666, 19.3 KB checked in by toolala, 6 years ago (diff)

Refactoroitiin voittoTriggerit

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class AssassinsOfNight : PhysicsGame
10{
11
12    DoubleMeter elamaLaskuri;
13
14
15    const double nopeus = 200;
16    const double hyppyNopeus = 750;
17    const int RUUDUN_KOKO = 40;
18    PlatformCharacter pelaaja1;
19    PhysicsObject pahis;
20    Vihu poliisi;
21    PhysicsObject toinenFakeTaso;
22    bool kenttaLapi = false;
23    bool tapettuJo = false;
24    bool tapettuJo2 = false;
25    List<Label> valikonKohdat;
26    Image kohteenKuva = LoadImage("kohde");
27    Image pelaajanKuva = LoadImage("puukkomies");
28    Image tahtiKuva = LoadImage("tahti");
29    Image pelaajaPuukottaaKuva = LoadImage("puukkomiespuukottaa");
30    Image poliisinKuva = LoadImage("poliisi");
31    Image poliisiAmpuuKuva = LoadImage("poliisiampuu");
32    SoundEffect maaliAani = LoadSoundEffect("maali");
33
34    public override void Begin()
35    {
36        Valikko();
37    }
38    void luoRangaistusKentta()
39    {
40        ClearAll();
41        TileMap kentta = TileMap.FromLevelAsset("kenttarangaistus");
42        kentta.SetTileMethod('#', LisaaTaso);
43        kentta.SetTileMethod('*', LisaaTahti);
44        kentta.SetTileMethod('K', LisaaKohde);
45        //kentta.SetTileMethod('P', LisaaPoliisi);
46        kentta.SetTileMethod('N', LisaaPelaaja);
47        kentta.SetTileMethod('%', LisaaFakeTaso);
48        kentta.SetTileMethod('&', LisaaTappoTrigger);
49        kentta.SetTileMethod('/', LisaaToinenFakeTaso);
50        kentta.SetTileMethod('!', LisaaVoitto1);
51        kentta.SetTileMethod('Q', LisaaVoitto2);
52        kentta.SetTileMethod('A', LisaaVoitto3);
53        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
54        Level.CreateBorders();
55        Level.Background.CreateGradient(Color.White, Color.Blue);
56
57        luoElamaLaskuri();
58
59        Gravity = new Vector(0, -1000);
60        Camera.Follow(pelaaja1);
61        Camera.ZoomFactor = 1.0;
62        Camera.StayInLevel = true;
63        Mouse.IsCursorVisible = true;
64
65        Label tekstikentta3 = new Label("teksti");
66        tekstikentta3.Text = "AJGADGgsjgssdf";
67        Add(tekstikentta3);
68        Label tekstikentta4 = new Label("teksti");
69        tekstikentta4.Text = "fpasfaai0fsfsg";
70        Add(tekstikentta3);
71
72        Timer ajastin2 = new Timer();
73        ajastin2.Interval = 0.5;
74        ajastin2.Timeout += pelaajaMenettaa;
75        ajastin2.Start();
76    }
77    void pelaajaMenettaa()
78    {
79        elamaLaskuri.Value -= 19;   
80    }
81    void LuoKentta3()
82    {
83        ClearAll();
84        TileMap kentta = TileMap.FromLevelAsset("kentta3");
85        kentta.SetTileMethod('#', LisaaTaso);
86        kentta.SetTileMethod('G', LisaaTaso2);
87        kentta.SetTileMethod('H', LisaaTaso3);
88        kentta.SetTileMethod('*', LisaaTahti);
89        kentta.SetTileMethod('K', LisaaKohde);
90        kentta.SetTileMethod('P', LisaaPoliisi);
91        kentta.SetTileMethod('N', LisaaPelaaja);
92        kentta.SetTileMethod('%', LisaaFakeTaso);
93        kentta.SetTileMethod('&', LisaaTappoTrigger);
94        kentta.SetTileMethod('/', LisaaToinenFakeTaso);
95        kentta.SetTileMethod('!', LisaaVoitto1);
96        kentta.SetTileMethod('Q', LisaaVoitto2);
97        kentta.SetTileMethod('A', LisaaVoitto3);
98        kentta.SetTileMethod('C', LisaaVoitto4);
99        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
100        Level.CreateBorders();
101        Level.Background.CreateGradient(Color.White, Color.Blue);
102
103        luoElamaLaskuri();
104
105        tapettuJo = false;
106        tapettuJo2 = false;
107        kenttaLapi = false;
108
109        Gravity = new Vector(0, -1000);
110        Camera.Follow(pelaaja1);
111        Camera.ZoomFactor = 5.0;
112        Camera.StayInLevel = true;
113        Mouse.IsCursorVisible = false;
114        LisaaNappaimet();
115        MessageDisplay.Add("Juokse ja murhaa kohde nopeasti ennenkuin hän pakenee! Sinulla on 20 sekuntia aikaa äläkä välitä poliiseista");
116        Timer ajastinZ = new Timer();
117        ajastinZ.Interval = 20.0;
118        ajastinZ.Timeout += havisitPelin;
119        ajastinZ.Start();
120    }
121    void havisitPelin()
122    {
123        Gravity = new Vector(0, 0);
124        Label tekstikentta2 = new Label(500.0, 500.0, "teksti");
125        tekstikentta2.Text = "HÄVISIT PELIN! VIIMEINEN KOHDE PÄÄSI PAKOON!";
126        tekstikentta2.X = Screen.Left + 900;
127        tekstikentta2.Y = Screen.Top - 100;
128        Add(tekstikentta2);
129        Timer ajastinA = new Timer();
130        ajastinA.Interval = 5.0;
131        ajastinA.Timeout += Valikko;
132        ajastinA.Start();
133    }
134    void LuoKentta2()
135    {
136        ClearAll();
137        TileMap kentta = TileMap.FromLevelAsset("kentta2");
138        kentta.SetTileMethod('#', LisaaTaso);
139        kentta.SetTileMethod('*', LisaaTahti);
140        kentta.SetTileMethod('K', LisaaKohde);
141        kentta.SetTileMethod('P', LisaaPoliisi);
142        kentta.SetTileMethod('N', LisaaPelaaja);
143        kentta.SetTileMethod('%', LisaaFakeTaso);
144        kentta.SetTileMethod('&', LisaaTappoTrigger);
145        kentta.SetTileMethod('/', LisaaToinenFakeTaso);
146        kentta.SetTileMethod('!', LisaaVoitto1);
147        kentta.SetTileMethod('Q', LisaaVoitto2);
148        kentta.SetTileMethod('A', LisaaVoitto3);
149        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
150        Level.CreateBorders();
151        Level.Background.CreateGradient(Color.White, Color.Blue);
152
153        luoElamaLaskuri();
154
155        kenttaLapi = false;
156        tapettuJo = false;
157        tapettuJo2 = false;
158
159        Gravity = new Vector(0, -1000);
160        Camera.Follow(pelaaja1);
161        Camera.ZoomFactor = 1.2;
162        Camera.StayInLevel = true;
163        Mouse.IsCursorVisible = false;
164        LisaaNappaimet();
165    }
166    void LuoKentta()
167    {
168        ClearAll();
169        TileMap kentta = TileMap.FromLevelAsset("kentta1");
170        kentta.SetTileMethod('#', LisaaTaso);
171        kentta.SetTileMethod('*', LisaaTahti);
172        kentta.SetTileMethod('K', LisaaKohde);
173        kentta.SetTileMethod('P', LisaaPoliisi);
174        kentta.SetTileMethod('N', LisaaPelaaja);
175        kentta.SetTileMethod('%', LisaaFakeTaso);
176        kentta.SetTileMethod('&', LisaaTappoTrigger);
177        kentta.SetTileMethod('/', LisaaToinenFakeTaso);
178        kentta.SetTileMethod('!', LisaaVoitto1);
179        kentta.SetTileMethod('A', LisaaVoitto3);
180        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
181        Level.CreateBorders();
182        Level.Background.CreateGradient(Color.White, Color.Blue);
183
184        luoElamaLaskuri();
185
186        Gravity = new Vector(0, -1000);
187        Camera.Follow(pelaaja1);
188        Camera.ZoomFactor = 1.2;
189        Camera.StayInLevel = true;
190        Mouse.IsCursorVisible = false;
191    }
192    void LisaaVoitto1(Vector paikka, double leveys, double korkeus)
193    {
194        Lisaavoitto(paikka, leveys, korkeus, "voittoTrigger1");
195    }
196    void LisaaVoitto2(Vector paikka, double leveys, double korkeus)
197    {
198        Lisaavoitto(paikka, leveys, korkeus, "voittoTrigger2");
199    }
200    void LisaaVoitto3(Vector paikka, double leveys, double korkeus)
201    {
202        Lisaavoitto(paikka, leveys, korkeus, "voittoTrigger3");
203    }
204    void LisaaVoitto4(Vector paikka, double leveys, double korkeus)
205    {
206        Lisaavoitto(paikka, leveys, korkeus, "voittoTrigger4");
207    }
208    void Lisaavoitto(Vector paikka, double leveys, double korkeus, string tagiNimi)
209    {
210        PhysicsObject voittoTrigger = PhysicsObject.CreateStaticObject(leveys, korkeus);
211        voittoTrigger.IgnoresCollisionResponse = true;
212        voittoTrigger.Tag = tagiNimi;
213        voittoTrigger.Position = paikka;
214        voittoTrigger.Color = Color.Gold;
215        Add(voittoTrigger);
216    }
217    void LisaaTaso(Vector paikka, double leveys, double korkeus)
218    {
219        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
220        taso.Position = paikka;
221        taso.Color = Color.Green;
222        Add(taso);
223    }
224    void LisaaTaso2(Vector paikka, double leveys, double korkeus)
225    {
226        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
227        taso2.Position = paikka;
228        taso2.Color = Color.Red;
229        Add(taso2);
230    }
231    void LisaaTaso3(Vector paikka, double leveys, double korkeus)
232    {
233        PhysicsObject taso3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
234        taso3.Position = paikka;
235        taso3.Color = Color.Orange;
236        Add(taso3);
237    }
238    void LisaaTappoTrigger(Vector paikka, double leveys, double korkeus)
239    {
240        PhysicsObject tappoTrigger = PhysicsObject.CreateStaticObject(leveys, korkeus);
241        tappoTrigger.IgnoresCollisionResponse = true;
242        tappoTrigger.Tag = "tappoTrigger";
243        tappoTrigger.Position = paikka;
244        tappoTrigger.Color = Color.Green;
245        Add(tappoTrigger);
246    }
247    void LisaaFakeTaso(Vector paikka, double leveys, double korkeus)
248    {
249        PhysicsObject fakeTaso = PhysicsObject.CreateStaticObject(leveys, korkeus);
250        fakeTaso.IgnoresCollisionResponse = true;
251        fakeTaso.Position = paikka;
252        fakeTaso.Color = Color.Green;
253        Add(fakeTaso); ;
254    }
255    void LisaaToinenFakeTaso(Vector paikka, double leveys, double korkeus)
256    {
257        toinenFakeTaso = PhysicsObject.CreateStaticObject(leveys, korkeus);
258        toinenFakeTaso.IgnoresCollisionResponse = false;
259        toinenFakeTaso.Position = paikka;
260        toinenFakeTaso.Color = Color.Gray;
261        Add(toinenFakeTaso); ;
262    }
263    void LisaaTahti(Vector paikka, double leveys, double korkeus)
264    {
265        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
266        tahti.IgnoresCollisionResponse = true;
267        tahti.Position = paikka;
268        tahti.Image = tahtiKuva;
269        tahti.Tag = "tahti";
270        Add(tahti);
271    }
272    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
273    {
274        pelaaja1 = new PlatformCharacter(leveys, korkeus);
275        Keyboard.Listen(Key.Space, ButtonState.Pressed, Puukota, "Puukota", pelaaja1);
276        pelaaja1.Position = paikka;
277        pelaaja1.Mass = 4.0;
278        pelaaja1.Image = pelaajanKuva;
279        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
280        AddCollisionHandler(pelaaja1, "tappoTrigger", TappoTrigger);
281        AddCollisionHandler(pelaaja1, "voittoTrigger1", voittoTrigger1);
282        AddCollisionHandler(pelaaja1, "voittoTrigger2", voittoTrigger2);
283        AddCollisionHandler(pelaaja1, "voittoTrigger3", voittoTrigger3);
284        AddCollisionHandler(pelaaja1, "voittoTrigger4", voittoTrigger4);
285        Add(pelaaja1);
286    }
287    void voittoTrigger1(PhysicsObject pelaaja1, PhysicsObject voittoTrigger1)
288    {
289        if (kenttaLapi == true)
290        {
291            maaliAani.Play();
292            LuoKentta2();
293        }
294    }
295    void voittoTrigger2(PhysicsObject pelaaja1, PhysicsObject voittoTrigger2)
296    {
297        if (kenttaLapi == true)
298        {
299            maaliAani.Play();
300            LuoKentta3();
301        }
302    }
303    void voittoTrigger4(PhysicsObject pelaaja1, PhysicsObject voittoTrigger4)
304    {
305        if (kenttaLapi == true)
306        {
307            ClearAll();
308            maaliAani.Play();
309            Label tekstikentta = new Label(500.0, 500.0, "teksti");
310            tekstikentta.Text = "Läpäisit pelin! Hienoa!";
311            tekstikentta.X = Screen.Left + 900;
312            tekstikentta.Y = Screen.Top - 500;
313            Add(tekstikentta);
314            Timer ajastinC = new Timer();
315            ajastinC.Interval = 5.0;
316            ajastinC.Timeout += Valikko;
317            ajastinC.Start();
318        }
319    }
320    void voittoTrigger3(PhysicsObject pelaaja1, PhysicsObject voittoTrigger3)
321    {
322            maaliAani.Play();
323            LuoKentta3();
324        }
325    void Puukota(PlatformCharacter pelaaja1)
326    {
327        pelaaja1.Image = pelaajaPuukottaaKuva;
328        if (Vector.Distance(pelaaja1.Position, pahis.Position) < 50)
329        {
330            TappoPuukolla(pelaaja1, pahis);
331        }
332        if (poliisi != null)
333        {
334
335
336            if (Vector.Distance(pelaaja1.Position, poliisi.Position) < 50)
337            {
338                TappoPuukolla2(pelaaja1, poliisi);
339            }
340        }
341        Timer ajastin = new Timer();
342        ajastin.Interval = 1.0;
343        ajastin.Timeout += ressaaPelaaja;
344        ajastin.Start();
345    }
346    void ressaaPelaaja()
347    {
348        pelaaja1.Image = pelaajanKuva;
349    }
350    void TappoPuukolla(PhysicsObject pelaaja1, PhysicsObject pahis)
351    {
352        if (tapettuJo == true) return;
353        MessageDisplay.Add("Onnistuit murhaamaan kohteen!");
354        tapettuJo = true;
355        kenttaLapi = true;
356        pahis.Destroy();
357    }
358    void TappoPuukolla2(PhysicsObject pelaaja1, PhysicsObject poliisi)
359    {
360        (poliisi as Vihu).ElamaLaskuri.Value -= 30;
361    }
362    void LisaaKohde(Vector paikka, double leveys, double korkeus)
363    {
364        pahis = new PhysicsObject(leveys, korkeus);
365        pahis.Position = paikka;
366        pahis.Mass = 4.0;
367        pahis.Tag = "pahis";
368        pahis.Image = kohteenKuva;
369        Add(pahis);
370    }
371    void luoElamaLaskuri()
372    {
373        elamaLaskuri = new DoubleMeter(100);
374        elamaLaskuri.DefaultValue = 100;
375        elamaLaskuri.MaxValue = 100;
376        elamaLaskuri.LowerLimit += pelaajaKuolee;
377        ProgressBar elamaPalkki = new ProgressBar(300, 20);
378        elamaPalkki.X = Screen.Left + 950;
379        elamaPalkki.Y = Screen.Top - 40;
380        elamaPalkki.BindTo(elamaLaskuri);
381        elamaPalkki.BorderColor = Color.Black;
382        Add(elamaPalkki);
383    }
384    /*void luoPoliisiElamaLaskuri()
385    {
386        elamaLaskuri2 = new DoubleMeter(100);
387        elamaLaskuri2.DefaultValue = 100;
388        elamaLaskuri2.MaxValue = 100;
389        elamaLaskuri2.LowerLimit += poliisiKuolee;
390        Add(elamaLaskuri2);
391    }*/
392    void pelaajaKuolee()
393    {
394        MessageDisplay.Add("Kuolit");
395        pelaaja1.Destroy();
396        Valikko();
397    }
398    void poliisiKuolee()
399    {
400        poliisi.Destroy();
401    }
402    void LisaaPoliisi(Vector paikka, double leveys, double korkeus)
403    {
404        poliisi = new Vihu(leveys, korkeus);
405        poliisi.Position = paikka;
406        poliisi.Mass = 4.0;
407        poliisi.Tag = "poliisi";
408
409        FollowerBrain seuraajaAivot = new FollowerBrain(pelaaja1);
410
411        AssaultRifle poliisinAse;
412
413        poliisinAse = new AssaultRifle(30, 10);
414
415        poliisinAse.InfiniteAmmo = true;
416        poliisinAse.ProjectileCollision = AmmusOsui;
417
418        poliisi.Weapon = poliisinAse;
419
420        poliisinAse.IsVisible = false;
421
422        poliisi.Brain = seuraajaAivot;
423        seuraajaAivot.Active = true;
424        seuraajaAivot.Speed = 100;
425        seuraajaAivot.DistanceClose = 150;
426        seuraajaAivot.DistanceFar = 600;
427        seuraajaAivot.TargetClose += delegate { poliisiAmpuu(poliisinAse); };
428        seuraajaAivot.StopWhenTargetClose = true;
429        seuraajaAivot.Speed = 200;
430        poliisi.CanRotate = false;
431        poliisi.Image = poliisinKuva;
432        poliisi.Weapon.ProjectileCollision = AmmusOsui;
433        Add(poliisi);
434    }
435    void poliisiAmpuu(AssaultRifle ase)
436    {
437        PhysicsObject ammus = ase.Shoot();
438
439        if (ammus != null)
440        {
441            poliisi.Image = poliisiAmpuuKuva;
442            ase.Power.DefaultValue = 100;
443            ase.FireRate = 0.5;
444            ammus.Size *= 0.5;
445            //ammus.Image = ...
446            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.5);
447        }
448    }
449    void AmmusOsui(PhysicsObject ammus, PhysicsObject pelaaja1)
450    {
451        ammus.Destroy();
452        elamaLaskuri.Value -= 10;
453    }
454    void LisaaNappaimet()
455    {
456        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
457        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
458        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
459        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
460        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
461        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
462        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
463        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
464        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
465    }
466    void Liikuta(PlatformCharacter hahmo, double nopeus)
467    {
468        hahmo.Walk(nopeus);
469    }
470    void Hyppaa(PlatformCharacter hahmo, double nopeus)
471    {
472        hahmo.Jump(nopeus);
473    }
474    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
475    {
476        maaliAani.Play();
477        MessageDisplay.Add("Keräsit pisteen!");
478        tahti.Destroy();
479    }
480    void TappoTrigger(PhysicsObject pelaaja1, PhysicsObject tappoTrigger)
481    {
482        if (kenttaLapi == true) return;
483        maaliAani.Play();
484        MessageDisplay.Add("Tapoit hyvin salavihkaisesti kohteen!");
485        kenttaLapi = true;
486        pahis.Destroy();
487    }
488    void Valikko()
489    {
490        ClearAll(); // Tyhjennetään kenttä kaikista peliolioista
491
492        valikonKohdat = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
493
494        Label kohta1 = new Label("Aloita peli");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
495        kohta1.Position = new Vector(0, 40);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
496        valikonKohdat.Add(kohta1);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
497        Label kohta2 = new Label("Parhaat Pisteet");
498        kohta2.Position = new Vector(0, 0);
499        valikonKohdat.Add(kohta2);
500        Label kohta3 = new Label("Lopeta peli");
501        kohta3.Position = new Vector(0, -40);
502        valikonKohdat.Add(kohta3);
503        Label kohta4 = new Label("Paina tästä :3");
504        kohta4.Position = new Vector(0, -80);
505        valikonKohdat.Add(kohta4);
506
507        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
508        foreach (Label valikonKohta in valikonKohdat)
509        {
510            Mouse.IsCursorVisible = true;
511            Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
512            Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, ParhaatPisteet, null);
513            Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, LopetaPeli, null);
514            Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, AlaPainaTasta, null);
515            Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
516
517
518            Add(valikonKohta);
519        }
520    }
521    void ValikossaLiikkuminen(AnalogState hiirenTila)
522    {
523        foreach (Label kohta in valikonKohdat)
524        {
525            if (Mouse.IsCursorOn(kohta))
526            {
527                kohta.TextColor = Color.Red;
528            }
529            else
530            {
531                kohta.TextColor = Color.Black;
532            }
533
534        }
535    }
536    void AloitaPeli()
537    {
538        LuoKentta();
539        LisaaNappaimet();
540    }
541    void AlaPainaTasta()
542    {
543        luoRangaistusKentta();
544    }
545    void ParhaatPisteet()
546    {
547        //...
548    }
549    void LopetaPeli()
550    {
551        Exit();
552    }
553    public int i { get; set; }
554}
Note: See TracBrowser for help on using the repository browser.