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

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