source: 2016/koodauskerho/VilleH/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli/ninjakissanhikileikit.cs @ 8944

Revision 8944, 13.0 KB checked in by npo17_37, 22 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Tasohyppelypeli1 : PhysicsGame
10{
11    Image taustakuva = LoadImage("kentta");
12    double nopeus = 650;
13    double hyppyNopeus = 500;
14    const int RUUDUN_KOKO = 40;
15    int hyppyja = 2;
16    PlatformCharacter pelaaja1;
17    Image pelaajanKuva = LoadImage("genzo");
18    SoundEffect Heals = LoadSoundEffect("i-need-healing_wrhVDnC");
19    SoundEffect cena = LoadSoundEffect("john-cena_1");
20
21    Image doritos = LoadImage("doritos-nacho-cheese");
22    Image piikkikuva = LoadImage("piikki");
23    SoundEffect maaliAani = LoadSoundEffect("maali");
24    Image shurikenkuva = LoadImage("shuriken.");
25    Vector alkupaikka;
26    Image doggokuva = LoadImage("doggo");
27    Image hela = LoadImage("heali");
28    public override void Begin()
29    {
30        ClearAll();
31        Gravity = new Vector(0, -1000);
32
33        LuoKentta();
34        LisaaNappaimet();
35        LuoPistelaskuri();
36        LuoDogggolaskuri();
37        Camera.Follow(pelaaja1);
38        Camera.ZoomFactor = 1.2;
39        Camera.StayInLevel = true;
40       
41         
42       
43    }
44
45    void LuoKentta()
46    {
47        TileMap kentta = TileMap.FromLevelAsset("kentta1");
48        kentta.SetTileMethod('#', LisaaTaso);
49        kentta.SetTileMethod('p', LisaaPiikki);
50        kentta.SetTileMethod('D', LisaaTahti);
51        kentta.SetTileMethod('N', delegate (Vector paikka, double leveys, double korkeus) { pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus); });
52        kentta.SetTileMethod('W', Lisaamaali);
53        kentta.SetTileMethod('V', lisaavihollinen);
54        kentta.SetTileMethod('H', ineedheals);
55        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
56        Level.CreateBorders();
57
58        Level.Background.Image = LoadImage("tausta");
59        Level.Background.FitToLevel();
60        Level.Background.TextureWrapSize = new Vector(3, 1);
61       
62    }
63
64    void LisaaTaso(Vector paikka, double leveys, double korkeus)
65    {
66        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
67        taso.Position = paikka;
68        taso.Color = Color.Green;
69        Add(taso);
70        taso.Tag = "taso";
71    }
72
73    void Lisaamaali(Vector paikka, double leveys, double korkeus)
74    {
75        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
76        taso.Position = paikka;
77        taso.Color = Color.Pink;
78        taso.Tag = "maali";
79        Add(taso);
80    }
81    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
82    {
83        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
84        piikki.Position = paikka;
85        piikki.Color = Color.Red;
86        piikki.Image = piikkikuva;
87        Add(piikki);
88        piikki.Tag = "piikki";
89    }
90
91    void LisaaTahti(Vector paikka, double leveys, double korkeus)
92    {
93        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
94        tahti.IgnoresCollisionResponse = true;
95        tahti.Position = paikka;
96        tahti.Image = doritos;
97        tahti.Tag = "tahti";
98        Add(tahti);
99    }
100
101    PlatformCharacter LisaaPelaaja(Vector paikka, double leveys, double korkeus)
102    {
103        PlatformCharacter pelaaja1 = new PlatformCharacter(leveys, korkeus);
104        pelaaja1.Position = paikka;
105        pelaaja1.Mass = 4.0;
106        pelaaja1.Tag = "pelaaja";
107        pelaaja1.Image = pelaajanKuva;
108        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
109        AddCollisionHandler(pelaaja1, "piikki", tormaapiikkiin);
110        AddCollisionHandler(pelaaja1, "maali", voitapeli);
111        AddCollisionHandler(pelaaja1, "jeff", osuviholliseen);
112        AddCollisionHandler(pelaaja1, "heal", törmäähealiin);
113        Add(pelaaja1);
114        //pelaaja1 on PlatformCharacter-tyyppinen
115        pelaaja1.Weapon = new AssaultRifle(30, 10);
116
117        AddCollisionHandler(pelaaja1,osui);
118        //Ammusten määrä aluksi:
119        pelaaja1.Weapon.Ammo.Value = 1000;
120
121        //Mitä tapahtuu kun ammus osuu johonkin?
122        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
123
124        pelaaja1.Weapon.IsVisible = false;
125        alkupaikka = pelaaja1.Position;
126        return pelaaja1;
127       
128    }
129    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
130    {
131        ammus.Destroy();
132        if (kohde.Tag.Equals("jeff"))
133        {
134            (kohde as Vihu).ElamaLaskuri.AddValue(-1);
135        }
136
137    }
138    void osui(PhysicsObject pelaaja, PhysicsObject kohde)
139    {
140        hyppyja = 2;
141    }
142    void LisaaNappaimet()
143    {
144        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
145        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
146        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
147
148        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
149        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
150        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1);
151
152
153
154        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -1.0);
155        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, 1.0);
156        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1);
157        ControllerOne.Listen(Button.B, ButtonState.Pressed, AmmuAseella, "Pelaaja Ampuu,", pelaaja1);
158        Keyboard.Listen(Key.F5, ButtonState.Pressed, Konsoli, "");
159        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
160
161    }
162    void AmmuAseella(PlatformCharacter pelaaja)
163    {
164        if (pisteLaskuri.Value > 0)
165        {
166            PhysicsObject ammus = pelaaja.Weapon.Shoot();
167
168            if (ammus != null)
169            {
170                ammus.Size *= 2;
171                ammus.Image = shurikenkuva;
172                //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
173                //pisteLaskuri.Value--;
174            }
175        }
176    }
177    void Konsoli()
178    {
179        InputWindow kysymysIkkuna = new InputWindow("Konsoli");
180        kysymysIkkuna.TextEntered += ProcessInput;
181        Add(kysymysIkkuna);
182    }
183
184    void ProcessInput(InputWindow ikkuna)
185    {
186        string[] vastaus = ikkuna.InputBox.Text.Split(' ');
187
188        if (vastaus[0] == "speed")
189        {
190            nopeus = int.Parse(vastaus[1]);
191        }
192
193        if (vastaus[0] == "gravity")
194        {
195            Gravity = new Vector(0, int.Parse(vastaus[1]));
196        }
197        if (vastaus[0] == "BOING")
198        {
199            hyppyNopeus = int.Parse(vastaus[1]);
200        }
201        if (vastaus[0] == "sanic")
202        {
203            nopeus = 3500;
204        }
205        if (vastaus[0]== "mercy plz")
206        {
207           
208        }
209        if (vastaus[0] == "win")
210        {
211            throw new Exception("lol u nob");
212        }
213        if (vastaus[0] == "hux")
214        {
215            nopeus = 5000;
216            hyppyNopeus = 5000;
217        }
218        if (vastaus[0] == "YOLO")
219        {
220            nopeus = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999.0;
221        }
222        if (vastaus[0] == "spawn")
223        {
224            pelaaja1.Position = alkupaikka;
225        }
226       
227            if (vastaus[0] == "hax")
228        {
229            nopeus = 100;
230            hyppyNopeus = 100;
231            MessageWindow viesti = new MessageWindow("NOPE");
232            Add(viesti);
233        }
234        if (vastaus[0] == "cena")
235        {
236            cena.Play();
237        }
238            if (vastaus[0] == "genji")
239        {
240            Heals.Play();
241        }
242            if (vastaus[0] == "doggo")
243        {
244            int dogot = 1;
245            if (vastaus.Length > 1)
246            {
247                dogot = int.Parse(vastaus[1]);
248            }
249            DoggoLaskuri.Value += dogot;
250
251            for (int i = 0; i < dogot; i++)
252            {
253                PlatformCharacter pelaaja2 = LisaaPelaaja(pelaaja1.Position + new Vector(40, 5*i), 40, 40);
254                pelaaja2.Tag = "pelaaja2";
255                Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -1.0);
256                Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, 1.0);
257                Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2);
258
259                pelaaja2.Image = doggokuva;
260
261                ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja2, -1.0);
262                ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja2, 1.0);
263                ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2);
264            }
265
266        }
267        if (vastaus[0] == "destroy")
268        {
269
270            GetObjectsWithTag("pelaaja2").ForEach(pelaaja2 => pelaaja2.Destroy());
271            DoggoLaskuri.Value = 0;
272        }
273    }
274
275    void Liikuta(PlatformCharacter hahmo, double suunta)
276    {
277        hahmo.Walk(nopeus * suunta);
278    }
279
280    void Hyppaa(PlatformCharacter hahmo)
281    {
282        if (hyppyja>0)
283        {
284            hahmo.ForceJump(hyppyNopeus);
285            hyppyja--;
286        }
287       
288
289    }
290
291    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
292    {
293        maaliAani.Play();
294        MessageDisplay.Add("nom nom!");
295        tahti.Destroy();
296    }
297    void tormaapiikkiin(PhysicsObject hahmo, PhysicsObject piikki)
298    {
299        MessageDisplay.Add("sinä hävisit");
300        pelaaja1.Destroy();
301    }
302    IntMeter pisteLaskuri;
303
304    void LuoPistelaskuri()
305    {
306        pisteLaskuri = new IntMeter(5);
307        pisteLaskuri.LowerLimit += kuoli;
308
309        Label pisteNaytto = new Label();
310        pisteNaytto.X = Screen.Left + 100;
311        pisteNaytto.Y = Screen.Top - 100;
312        pisteNaytto.TextColor = Color.Black;
313        pisteNaytto.Color = Color.White;
314
315        pisteNaytto.BindTo(pisteLaskuri);
316        Add(pisteNaytto);
317 
318       
319
320    }
321    void voitapeli(PhysicsObject pelaaja, PhysicsObject kohde)
322    {
323        MessageWindow viesti = new MessageWindow("voittaaksesi paina f5 kirjoita konsoliin win");
324        Add(viesti);
325    }
326    IntMeter DoggoLaskuri;
327
328    void LuoDogggolaskuri()
329    {
330        DoggoLaskuri = new IntMeter(0);
331
332        Label pisteNaytto = new Label();
333        pisteNaytto.X = Screen.Right - 100;
334        pisteNaytto.Y = Screen.Top - 100;
335        pisteNaytto.TextColor = Color.Black;
336        pisteNaytto.Color = Color.White;
337        pisteNaytto.Title = "Doggies";
338        pisteNaytto.BindTo(DoggoLaskuri);
339        Add(pisteNaytto);
340
341    }
342    void lisaavihollinen(Vector paikka, double leveys, double korkeus)
343    {
344       Vihu vihu = new Vihu(leveys*1.5, korkeus*1.5);
345        vihu.Image = LoadImage("mynam jeff");
346        vihu.Position = paikka;
347        Add(vihu);
348        vihu.Tag = "jeff";
349
350        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
351
352        seuraajanAivot.Speed = 300;                 // Millä nopeudella kohdetta seurataan
353        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
354        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
355        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
356        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
357        vihu.Brain = seuraajanAivot;
358    }
359    void osuviholliseen(PhysicsObject pelaaja,PhysicsObject jeff)
360    {
361        pisteLaskuri.Value -= 1;
362        Heals.Play();
363    }
364    void kuoli()
365    {
366       
367        Begin();
368    }
369    void ineedheals(Vector paikka, double korkeus, double leveys)
370    {
371        PhysicsObject heals = new PhysicsObject(leveys,  korkeus);
372        heals.Image = LoadImage ("heali") ;
373        heals.Position = paikka;
374        Add(heals);
375        heals.MakeStatic();
376        heals.IgnoresCollisionResponse = true;
377        heals.Tag = "heal";
378
379    }
380    void törmäähealiin (PhysicsObject pelaaja1, PhysicsObject heali)
381    {
382        heali.Destroy();
383        pisteLaskuri.Value = 5; 
384
385    }
386 
387
388}
389class Vihu: PlatformCharacter
390{
391    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
392    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
393
394    public Vihu(double leveys, double korkeus)
395        : base(leveys, korkeus)
396    {
397        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
398         
399       
400    }
401
402}
Note: See TracBrowser for help on using the repository browser.