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

Revision 5640, 17.2 KB checked in by toolala, 9 years ago (diff)

Kaikkee jännää ja ylimääräistä ulinaa

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