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

Revision 5667, 18.8 KB checked in by toolala, 6 years ago (diff)

Kaikkee kivaa, eikä mitään järkevää

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