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

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