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

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