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

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