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

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