source: 2012/26/OssiV/Archers' revenge/Archers' revenge/Archers' revenge/Archers__revenge.cs @ 3414

Revision 3414, 26.0 KB checked in by sijoseha, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Archers__revenge : PhysicsGame
10{
11    double nopeus = 200;
12    const double hyppyNopeus = 1000;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    PlatformCharacter pelaaja2;
17    Morko morko;
18    Image pelaajanKuva = LoadImage("ninsa");
19    Image tahtiKuva = LoadImage("tahti");
20    Image jousenkuva = LoadImage("jousipyssy");
21    Image jousimiehenkuva = LoadImage("jousimies");
22    Image nuolenkuva = LoadImage("nuoli");
23    Image magenkuva = LoadImage("mage");
24    Image taikapallonkuva = LoadImage("pallo");
25    Image heittotahenkuva = LoadImage("JHEITTOTAHTI");
26    Image[] ninsananimaatio = LoadImages("ninsa animaatio 2", "ninsa animaatio 1");
27    Image orkinkuva = LoadImage("oRKKI");
28    Image splitterkuva = LoadImage("vihree mommo");
29    Image moronkuva = LoadImage("morko");
30    Image medipackin = LoadImage("medipack");
31    PhysicsObject seina;
32    IntMeter hpLaskuri2;
33    IntMeter hpLaskuri1;
34    Image nurmikuva = LoadImage("nurmikko");
35    GameObject jousipyssy1;
36    Boolean ninjalyo;
37    Boolean heittokaynnissa = false;
38    Boolean pelaaja1kuolinilmotus = false;
39    Boolean pelaaja2kuolinilmotus =  false;
40    Boolean morkoonpelissa = false;
41    SoundEffect maaliAani = LoadSoundEffect("maali");
42
43    public override void Begin()
44    {
45        //luoikkuna();
46        luoAlkuvalikko();
47    }
48    void luoAlkuvalikko()
49    {
50        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
51"Aloita peli", "Tekijät", "Lopeta");
52        alkuValikko.ItemSelected += PainettiinValikonNappia;
53
54        Add(alkuValikko);
55
56
57    }
58    void luoikkuna()
59    {
60        Window ikkuna = new Window();
61        VerticalLayout la = new VerticalLayout();
62        la.Spacing = 20;
63        ikkuna.Layout = la;
64        Label title = new Label("Tarina");
65        ikkuna.Add(title);
66        Label tarina = new Label("Eeppinen tarina siitä miten alienit ovat vallanneet maan ja pelaajan täytyy piestä ne...");
67        tarina.Width = 300;
68        tarina.SizeMode = TextSizeMode.Wrapped;
69        ikkuna.Add(tarina);
70        Add(ikkuna);
71
72   
73    }
74    void PainettiinValikonNappia(int valinta)
75    {
76        switch (valinta)
77        {
78            case 0:
79                // AloitaPeli();
80                AloitaPeli();
81                break;
82            case 1:
83                MessageDisplay.Add("Tämän pelin ovat tehneet Ossi Vanhala ja Aleksi Hiltunen");
84                luoAlkuvalikko();
85                break;
86            case 2:
87                Exit();
88                break;
89        }
90    }
91    void AloitaPeli()
92    {
93        Gravity = new Vector(0, -1000);
94
95        LuoKentta();
96        ninjalyo = false;
97        luojousipyssy1();
98        luoPelaajan2HPlaskuri();
99        luoPelaajan1HPlaskuri();
100        LisaaNappaimet();
101        Camera.Follow(pelaaja1);
102        Camera.ZoomFactor = 1.0;
103
104        Camera.StayInLevel = true;
105   
106    }
107    void LuoKentta()
108    {
109        TileMap kentta = TileMap.FromLevelAsset("kentta1");
110        kentta.SetTileMethod('#', LisaaTaso);
111        kentta.SetTileMethod('P', luoNakumatonSeina);
112        kentta.SetTileMethod('*', LisaaTahti);
113        kentta.SetTileMethod('E', LuoMediPack);
114        kentta.SetTileMethod('N', LisaaPelaaja);
115        kentta.SetTileMethod('2', LisaaPelaaja2);
116        kentta.SetTileMethod('M', LuoMagePahis);
117        kentta.SetTileMethod('O', luoPahis);
118
119        kentta.SetTileMethod('S', luoSplitter);
120        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
121        Level.CreateBorders();
122        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
123        MessageDisplay.Add("Jousimiehen kaveri on kaapattu ja sinun tehtvänä on pelastaa hänet ja tappaa Mörkö.");
124        MessageDisplay.BackgroundColor = Color.Transparent;
125    }
126    void luoPelaajan2HPlaskuri()
127    { 
128    hpLaskuri2 = new IntMeter(200);               
129     
130    Label pisteNaytto = new Label(); 
131    pisteNaytto.X = Screen.Left + 100;
132    pisteNaytto.Y = Screen.Top - 100;
133    pisteNaytto.TextColor = Color.Black;
134    pisteNaytto.Color = Color.Transparent;
135 
136    pisteNaytto.BindTo(hpLaskuri2);
137    Add(pisteNaytto);
138    }
139    void luoPelaajan1HPlaskuri()
140    {
141        hpLaskuri1 = new IntMeter(100);
142
143        Label pisteNaytto = new Label();
144        pisteNaytto.X = Screen.Right - 100;
145        pisteNaytto.Y = Screen.Top - 100;
146        pisteNaytto.TextColor = Color.Black;
147        pisteNaytto.Color = Color.Transparent;
148
149        pisteNaytto.BindTo(hpLaskuri1);
150        Add(pisteNaytto);
151    }
152
153    void LisaaTaso(Vector paikka, double leveys, double korkeus)
154    {
155        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
156        taso.Position = paikka;
157        taso.Color = Color.Green;
158        taso.Image = nurmikuva;
159        Add(taso);
160    }
161
162    void LisaaTahti(Vector paikka, double leveys, double korkeus)
163    {
164        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
165        tahti.IgnoresCollisionResponse = true;
166        tahti.Position = paikka;
167        tahti.Image = tahtiKuva;
168        tahti.Tag = "tahti";
169        Add(tahti);
170    }
171
172    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
173    {
174        pelaaja1 = new PlatformCharacter(leveys, korkeus);
175        pelaaja1.Position = paikka;
176        pelaaja1.Mass = 4.0;
177        pelaaja1.Shape = Shape.Circle;
178        pelaaja1.Image = jousimiehenkuva;
179        AddCollisionHandler(seina, pelaaja1, seinaanOsu);
180        AddCollisionHandler(pelaaja1, "medipack", osumediiin);
181        pelaaja1.Tag = "pelaaja";
182        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
183        AddCollisionHandler<PhysicsObject, Vihu>(pelaaja1, "orkki", orkkitormasi1);
184        Add(pelaaja1);
185    }
186    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
187    {
188        pelaaja2 = new PlatformCharacter(leveys, korkeus);
189        pelaaja2.Position = paikka;
190        pelaaja2.Mass = 4.0;
191        pelaaja2.Image = pelaajanKuva;
192        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
193        AddCollisionHandler(seina, pelaaja2, seinaanOsu);
194        AddCollisionHandler<PhysicsObject, Vihu>(pelaaja2, "orkki", orkkitormasi2);
195        AddCollisionHandler(pelaaja2, "medipack", osumediiin);
196        pelaaja2.Tag = "pelaaja";
197        Add(pelaaja2);
198    }
199    void osumediiin(PhysicsObject tormaaja, PhysicsObject kohde)
200    {
201        if (hpLaskuri1.Value < 1)
202        {
203            hpLaskuri1.Value = hpLaskuri1.Value + 50;
204        }
205        if (hpLaskuri2.Value < 1)
206        {
207            hpLaskuri2.Value = hpLaskuri2.Value + 50;
208        }
209        kohde.Destroy();
210    }
211    void luojousipyssy1()
212    {
213        jousipyssy1 = new GameObject(50, 50);
214        jousipyssy1.Position = pelaaja1.Position;
215        jousipyssy1.Image = jousenkuva;
216        Add(jousipyssy1);
217   
218    }
219
220    void LisaaNappaimet()
221    {
222        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
223        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
224        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
225        Keyboard.Listen(Key.Home, ButtonState.Up, paivitajutut, null);
226        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
227        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
228        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
229
230
231        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
232        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
233        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
234
235        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1,heitaheittotahti, null,0.3);
236
237
238        ControllerOne.Listen(Button.Back, ButtonState.Pressed, restart, "Poistu pelistä");
239
240        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
241        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
242        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
243        ControllerOne.Listen(Button.Start, ButtonState.Pressed, luoCheatIkkuna, null);
244
245
246
247        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, tahtaa, null,jousipyssy1);
248
249        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, ammujousipyssylla, null,jousipyssy1);
250
251
252
253        ControllerTwo.Listen(Button.RightShoulder, ButtonState.Down, lyomiekalla, null);
254       // ControllerTwo.Listen(Button.LeftShoulder, ButtonState.Pressed, heitaheittotahti, null);
255
256
257        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja2, -nopeus * 1.5);
258        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja2, nopeus * 1.5);
259        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus * 1.3       );
260     
261    }
262    void restart()
263    {
264        ClearAll();
265        luoAlkuvalikko();
266   
267    }
268    void luoCheatIkkuna()
269    {
270        InputWindow kysymysIkkuna = new InputWindow("Enter code");
271        kysymysIkkuna.TextEntered += ProcessInput;
272        Add(kysymysIkkuna);
273
274    }
275    void ProcessInput(InputWindow ikkuna)
276    {
277        string vastaus = ikkuna.InputBox.Text;
278        // tehdään jotain vastauksella
279        if (vastaus == "superspeed")
280        {
281            ClearControls();
282            nopeus = nopeus * 2;
283            LisaaNappaimet();   
284        }
285        if (vastaus == "fastshot1")
286        {
287            ControllerOne.Listen(Button.LeftShoulder, ButtonState.Down, ammujousipyssylla, null, jousipyssy1);
288        }
289        if (vastaus == "fastshot2")
290        {
291
292            ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.01, heitaheittotahti, null,0.1);
293        }
294        if (vastaus == "fastshotall")
295        {
296            ControllerOne.Listen(Button.LeftShoulder, ButtonState.Down, ammujousipyssylla, null, jousipyssy1);
297            ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.01, heitaheittotahti, null, 0.1);
298        }
299        if (vastaus == "heal")
300        {
301            hpLaskuri1.Value = hpLaskuri1.Value * 10;
302
303            hpLaskuri2.Value = hpLaskuri2.Value * 10;
304        }
305       
306    }
307
308    void heitaheittotahti(AnalogState tatinTila, double viive)
309    {
310
311        if (heittokaynnissa == false)
312        {
313            heittokaynnissa = true;
314            Timer.SingleShot(viive, delegate
315            {
316                heittokaynnissa = false;
317
318            });
319            PhysicsObject heittotahti = new PhysicsObject(10, 10);
320            heittotahti.Shape = Shape.Circle;
321            heittotahti.Image = heittotahenkuva;
322            heittotahti.X = pelaaja2.Position.X;
323            heittotahti.Y = pelaaja2.Position.Y;
324            AddCollisionHandler<PhysicsObject, Vihu>(heittotahti, "pahis", pahikseenOsuHeittotahti);
325            AddCollisionHandler<PhysicsObject, Vihu>(heittotahti, "orkki", heittotahtiOsuPahikseen2);
326            AddCollisionHandler<PhysicsObject, Mommo>(heittotahti, "mommo", MommoonOsuHeittotahti);
327            AddCollisionHandler<PhysicsObject, Morko>(heittotahti, "morko", MorkoonOsuHeittotahti);
328            AddCollisionHandler(heittotahti, "mini", tuhoaMini);
329            heittotahti.LifetimeLeft = TimeSpan.FromSeconds(3.0);
330            Add(heittotahti);
331            Vector tatinAsento = tatinTila.StateVector;
332            heittotahti.Hit(tatinAsento * 1000);
333        }
334    }
335
336    void MorkoonOsuHeittotahti(PhysicsObject tahti, Morko kohde)
337    {
338        kohde.elamaLaskuri.Value = kohde.elamaLaskuri.Value - 10;
339        tahti.Destroy();
340   
341    }
342    void pahikseenOsuHeittotahti(PhysicsObject tahti, Vihu kohde)
343    {
344        kohde.elamaLaskuri.Value = kohde.elamaLaskuri - 10;
345    }
346    void MommoonOsuHeittotahti(PhysicsObject tahti, Mommo kohde)
347    {
348        kohde.elamaLaskuri.Value = kohde.elamaLaskuri - 10;
349        tahti.Destroy();
350    }
351
352    void tahtaa(AnalogState tatinTila,GameObject jousipyssy)
353    {
354        Vector tatinAsento = tatinTila.StateVector;
355        jousipyssy.Angle = tatinAsento.Angle;
356   
357    }
358
359
360    void ammujousipyssylla(GameObject jousipyssy)
361    {
362        PhysicsObject nuoli = new PhysicsObject(25, 5);
363        nuoli.Position = jousipyssy.Position;
364        nuoli.Angle = jousipyssy.Angle;
365        nuoli.Image = nuolenkuva;
366        nuoli.LifetimeLeft = TimeSpan.FromSeconds(2.5);
367        AddCollisionHandler<PhysicsObject, Vihu>(nuoli, "pahis", nuoliOsuPahikseen);
368        AddCollisionHandler<PhysicsObject, Mommo>(nuoli, "mommo", nuoliOsuMommoon);
369        AddCollisionHandler<PhysicsObject, Vihu>(nuoli, "orkki", nuoliOsuPahikseen);
370        AddCollisionHandler<PhysicsObject, Morko>(nuoli, "morko", vahingoitaMorkoaNuolella);
371        AddCollisionHandler(nuoli, "mini", tuhoaMini);
372        Add(nuoli);
373
374        Vector impulssi = Vector.FromLengthAndAngle(1000, jousipyssy.Angle);
375       
376        nuoli.Hit(impulssi);
377    }
378    void nuoliOsuPahikseen(PhysicsObject nuoli, Vihu kohde)
379    {
380        kohde.elamaLaskuri.Value = kohde.elamaLaskuri.Value - 20;
381    }
382    void mommoonOsuMiekka(PhysicsObject nuoli, Mommo kohde)
383    {
384        kohde.elamaLaskuri.Value = kohde.elamaLaskuri.Value - 40;
385    }
386    void nuoliOsuMommoon(PhysicsObject nuoli, Mommo kohde)
387    {
388        kohde.elamaLaskuri.Value = kohde.elamaLaskuri.Value - 20;
389        nuoli.Destroy();
390    }
391    void heittotahtiOsuPahikseen2(PhysicsObject tahti, Vihu kohde)
392    {
393        kohde.elamaLaskuri.Value = kohde.elamaLaskuri.Value - 10;
394    }
395    void orkkitormasi1(PhysicsObject tormaaja, Vihu kohde)
396    {
397        hpLaskuri1.Value = hpLaskuri1 - 50;
398        Explosion rajahdys = new Explosion(RUUDUN_KOKO);
399        rajahdys.Position = kohde.Position;
400        Add(rajahdys);
401        kohde.Destroy();
402        if (hpLaskuri1 < 1)
403        {
404            pelaaja1.Destroy();
405            MessageDisplay.Add("Pelaaja 1 kuoli");
406            jousipyssy1.Destroy();
407        }
408    }
409    void orkkitormasi2(PhysicsObject tormaaja, Vihu kohde)
410    {
411        hpLaskuri2.Value = hpLaskuri2 - 50;
412        kohde.Destroy();
413        Explosion rajahdys = new Explosion(RUUDUN_KOKO);
414        rajahdys.Position = kohde.Position;
415        Add(rajahdys);
416
417    }
418
419    void lyomiekalla()
420    {
421        if (ninjalyo == false)
422        {
423            pelaaja2.Animation = new Animation(ninsananimaatio);
424            pelaaja2.Animation.FPS = 3;
425            PhysicsObject hitpalikka = new PhysicsObject(1, 10);
426            hitpalikka.Color = Color.Transparent;
427            hitpalikka.X = pelaaja2.Position.X + 30;
428            hitpalikka.Y = pelaaja2.Position.Y ;
429            hitpalikka.LifetimeLeft = TimeSpan.FromSeconds(0.2);
430            AddCollisionHandler<PhysicsObject, Vihu>(hitpalikka, "pahis", pahikseenOsuMiekka);
431            AddCollisionHandler<PhysicsObject, Vihu>(hitpalikka, "orkki", orkiinOsuMiekka);
432            AddCollisionHandler<PhysicsObject, Mommo>(hitpalikka, "mommo", mommoonOsuMiekka);
433            AddCollisionHandler<PhysicsObject, Morko>(hitpalikka, "morko", morkoonOsuMiekka);
434            AddCollisionHandler(hitpalikka, "mini", tuhoaMini);
435            Add(hitpalikka);
436            hitpalikka.Push(new Vector(30,0));
437
438            pelaaja2.Animation.Start(1);
439 
440
441            ninjalyo = true;
442            Timer.SingleShot(0.5, lyontiloppuu);
443        }
444
445       
446    }
447    void morkoonOsuMiekka(PhysicsObject lyoja, Morko kohde)
448    {
449        kohde.elamaLaskuri.Value = kohde.elamaLaskuri.Value - 50;
450    }
451    void orkiinOsuMiekka(PhysicsObject hitpalikka, Vihu orkki)
452    {
453        orkki.elamaLaskuri.Value = orkki.elamaLaskuri.Value - 110;
454   
455    }
456    void tuhoaMini(PhysicsObject hitpalikka, PhysicsObject kohde)
457    {
458        kohde.Destroy();
459   
460    }
461    void pahikseenOsuMiekka(PhysicsObject hitpalikka, Vihu kohde)
462    {
463        kohde.elamaLaskuri.Value = kohde.elamaLaskuri - 40;
464       
465    }
466
467    void lyontiloppuu()
468    {
469        ninjalyo = false;
470
471    }
472
473    void Liikuta(PlatformCharacter hahmo, double nopeus)
474    {
475        hahmo.Walk(nopeus);
476    }
477
478    void Hyppaa(PlatformCharacter hahmo, double nopeus)
479    {
480        hahmo.Jump(nopeus);
481    }
482
483    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
484    {
485        maaliAani.Play();
486       // MessageDisplay.Add("Keräsit tähden!");
487        tahti.Destroy();
488    }
489    void paivitajutut()
490    {
491        jousipyssy1.Position = pelaaja1.Position;
492        if (pelaaja1.IsDestroyed == true)
493        {
494            Camera.Follow(pelaaja2);
495       
496        }
497        if (morkoonpelissa == true)
498        {
499            if (morko.IsDestroyed)
500            {
501                MessageDisplay.Add("achievement get: Kill The Boss!");
502           
503            }
504        }
505        if (hpLaskuri1 < 1 & pelaaja1kuolinilmotus == false)
506        {
507            pelaaja1.Destroy();
508            MessageDisplay.Add("player1 died!! NOOB");
509            pelaaja1kuolinilmotus = true;
510        }
511        if (hpLaskuri2 < 1 & pelaaja2kuolinilmotus == false)
512        {
513            pelaaja2.Destroy();
514            MessageDisplay.Add("player2 died!! NOOB");
515            pelaaja2kuolinilmotus = true;
516        }
517        if (hpLaskuri1.Value < 1 & hpLaskuri2.Value < 1)
518        {
519            ClearAll();
520            MessageDisplay.Add("You lose!!!!!");
521            luoAlkuvalikko();
522       
523        }
524
525
526    }
527
528    void LuoMagePahis(Vector paikka, double leveys, double korkeus)
529    {
530        Vihu magePahis = new Vihu(leveys, korkeus);
531        magePahis.Position = paikka;
532        magePahis.Mass = 4.0;
533        magePahis.Tag = "pahis";
534        Cannon taikaAse = new Cannon(1,1);
535        taikaAse.Color = Color.Transparent;
536        magePahis.Add(taikaAse);
537        magePahis.CanRotate = false;
538        taikaAse.TimeBetweenUse = TimeSpan.FromSeconds(4.0);
539        taikaAse.ProjectileCollision = TaikaAseOsuu;
540        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
541        seuraajanAivot.Speed = 300;
542
543        seuraajanAivot.DistanceClose = 300;
544        seuraajanAivot.TargetClose += delegate {
545           
546            taikaAse.Angle = (seuraajanAivot.CurrentTarget.Position - magePahis.Position).Angle;
547            taikaAse.Power.Value = 10000000;
548 
549
550           PhysicsObject taikapallo =  taikaAse.Shoot();
551           if (taikapallo == null) return;           
552           taikapallo.Image = taikapallonkuva;
553        };
554        seuraajanAivot.StopWhenTargetClose = true;
555        magePahis.Brain = seuraajanAivot;
556        magePahis.Image = magenkuva;
557        Add(magePahis);
558    }
559    void vahingoitaMorkoaNuolella(PhysicsObject nuoli, Morko morko)
560    {
561        morko.elamaLaskuri.Value = morko.elamaLaskuri.Value - 20;
562        nuoli.Destroy();
563    }
564
565    void TaikaAseOsuu(PhysicsObject ammus, PhysicsObject hahmo)
566    {
567        ammus.Destroy();
568        if (hahmo == pelaaja1)
569        {
570            hpLaskuri1.Value = hpLaskuri1.Value - 30;
571        }
572        else if (hahmo == pelaaja2)
573        {
574            hpLaskuri2.Value = hpLaskuri2.Value - 30;
575        }
576    }
577    void ammuTaika()
578    {
579        PhysicsObject taikapallo = new PhysicsObject(10, 10);
580       //taikapallo.Mass = 1;
581        taikapallo.Image = taikapallonkuva;
582
583        Add(taikapallo);
584        //taikapallo.Position = magePahis.Position;
585
586    }
587
588    void luoPahis(Vector paikka, double leveys, double korkeus)
589    {
590        Vihu orkki = new Vihu(leveys / 1.2,korkeus / 1.2);
591        orkki.Mass = 50;
592        orkki.Tag = "orkki";
593        orkki.Position = paikka;
594        orkki.Image = orkinkuva;
595        orkki.CanRotate = false;
596       
597        Add(orkki);
598
599
600        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
601        seuraajanAivot.Speed = 300;
602        orkki.Brain = seuraajanAivot;   
603    }
604    void luoSplitter(Vector paikka,double leveys, double korkeus)
605    {
606
607        Boolean kellokaynnissa = false;
608        Mommo splitter = new Mommo (leveys * 1.5, korkeus * 1.5);
609        splitter.Tag = "mommo";
610        splitter.Position = paikka;
611        splitter.Mass = 10;
612        splitter.Image = splitterkuva;
613        splitter.CanRotate = false;
614        Add(splitter);
615
616        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
617        seuraajanAivot.Speed = 100;
618
619        seuraajanAivot.DistanceClose = 300;
620        seuraajanAivot.TargetClose += delegate
621        {
622            if (kellokaynnissa == false)
623            {
624                kellokaynnissa = true;
625                Timer.SingleShot(2.0, delegate {
626                    kellokaynnissa = false;
627               
628                });
629
630                PhysicsObject miniSplitter = new PhysicsObject(splitter.Width / 3, splitter.Height / 3);
631                miniSplitter.Tag = "mini";
632                miniSplitter.X = splitter.Position.X ;
633                miniSplitter.Y = splitter.Position.Y + 70;
634                miniSplitter.Image = splitterkuva;
635
636                AddCollisionHandler(miniSplitter, pelaaja1, MiniOsu1);
637                AddCollisionHandler(miniSplitter, pelaaja2, MiniOsu1);
638                FollowerBrain minialy = new FollowerBrain("pelaaja");
639                minialy.Speed = 100;
640                miniSplitter.Brain = minialy;
641                Add(miniSplitter);   
642 
643            }
644        };
645        seuraajanAivot.StopWhenTargetClose = true;
646        splitter.Brain = seuraajanAivot;
647
648    }
649    void MiniOsu1(PhysicsObject mini, PlatformCharacter kohde )
650    {
651        if (kohde == pelaaja1) {
652            hpLaskuri1.Value = hpLaskuri1.Value - 20;
653            tarkistaHParvo1(kohde);
654        }
655        if (kohde == pelaaja2)
656        {
657            hpLaskuri2.Value = hpLaskuri2.Value - 20;
658            tarkistaHParvo1(kohde);
659        }
660    }
661    void tarkistaHParvo1(PlatformCharacter kohde)
662    {
663        if (kohde == pelaaja1)
664        {
665            if (hpLaskuri1.Value < 1)
666            {
667                pelaaja1.Destroy();
668                jousipyssy1.Destroy();
669            }
670             
671        }
672        if (kohde == pelaaja2)
673        {
674            if (hpLaskuri2.Value < 1)
675            {
676                pelaaja2.Destroy();
677            }
678
679        }
680   
681    }
682    void luoMorko(double x, double y)
683    {
684        morko = new Morko(100, 100);
685        morko.Mass = 100;
686        morko.X = x;
687        morko.Y = y;
688        morko.Image = moronkuva;
689        morko.CanRotate = false;
690        morko.Tag = "morko";
691        Add(morko);
692
693        LaserGun laserpyssy = new LaserGun(50, 50);
694        laserpyssy.InfiniteAmmo = true;
695        laserpyssy.TimeBetweenUse = TimeSpan.FromSeconds(0.3);
696        laserpyssy.ProjectileCollision = morkoOsuJohonkin;
697
698        morko.Add(laserpyssy);
699        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
700        seuraajanAivot.Speed = 100;
701        seuraajanAivot.DistanceClose = 400;       
702        seuraajanAivot.StopWhenTargetClose = true;
703        seuraajanAivot.TargetClose += delegate
704
705        {
706           
707        };
708
709
710
711        Timer ampumisAjastin = new Timer();
712        ampumisAjastin.Interval = 0.1;
713        ampumisAjastin.Timeout += delegate
714        {
715            Vector lahemmanSijainti = palautaLahempi(morko.Position, pelaaja1.Position, pelaaja2.Position);
716            laserpyssy.Angle = (lahemmanSijainti - morko.Position).Angle;
717            laserpyssy.Shoot();
718        };
719        ampumisAjastin.Start();
720
721        seuraajanAivot.Active = true;
722    }
723
724    Vector palautaLahempi(Vector kohde, Vector p1, Vector p2)
725    {
726        if (Vector.Distance(kohde, p1) <= Vector.Distance(kohde, p2))
727            return p1;
728        else
729            return p2;
730    }
731    void luoNakumatonSeina(Vector paikka, double leveys, double korkeus)
732    {
733        seina = new PhysicsObject(10, 1000);
734        seina.Mass = 10000;
735        seina.Color = Color.Transparent;
736        seina.Position = paikka;
737 
738        Add(seina);
739   
740    }
741
742    void seinaanOsu(PhysicsObject seina,PhysicsObject pelaaja)
743    {
744        Double moronXnaatti = seina.Position.X + 600;
745        double moronYnaatti = seina.Position.Y;
746        seina.Destroy();
747        luoMorko(moronXnaatti,moronYnaatti);
748        morkoonpelissa = true;
749
750
751    }
752    void morkoOsuJohonkin(PhysicsObject ammus, PhysicsObject kohde)
753    {
754        if (kohde == pelaaja1)
755        {
756            hpLaskuri1.Value--;
757            hpLaskuri1.Value--;
758        }
759        if (kohde == pelaaja2)
760        {
761            hpLaskuri2.Value--;
762            hpLaskuri2.Value--;
763        }
764    }
765    void LuoMediPack(Vector paikka, double leveys, double korkeus)
766    {
767        PhysicsObject medipack = new PhysicsObject(leveys, korkeus);
768        medipack.Position = paikka;
769        medipack.Tag = "medipack";
770        medipack.Image = medipackin;
771        Add(medipack);
772   
773    }
774}
775
776class Vihu : PhysicsObject
777{
778    public IntMeter elamaLaskuri = new IntMeter(100, 0, 100);
779
780    public Vihu(double leveys, double korkeus)
781        : base(leveys, korkeus)
782    {
783        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
784    }
785}
786class Mommo : PhysicsObject
787{
788    public IntMeter elamaLaskuri = new IntMeter(250, 0, 250);
789
790    public Mommo(double leveys, double korkeus)
791        : base(leveys, korkeus)
792    {
793        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
794    }
795}
796class Morko : PhysicsObject
797{
798    public IntMeter elamaLaskuri = new IntMeter(2000, 0, 2000);
799
800    public Morko(double leveys, double korkeus)
801        : base(leveys, korkeus)
802    {
803        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
804    }
805}
Note: See TracBrowser for help on using the repository browser.