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

Revision 8883, 11.6 KB checked in by npo17_37, 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    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    }
123    void osui(PhysicsObject pelaaja, PhysicsObject kohde)
124    {
125        hyppyja = 2;
126    }
127    void LisaaNappaimet()
128    {
129        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
130        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
131        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
132
133        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
134        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
135        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1);
136
137
138
139        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -1.0);
140        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, 1.0);
141        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1);
142        ControllerOne.Listen(Button.B, ButtonState.Pressed, AmmuAseella, "Pelaaja Ampuu,", pelaaja1);
143        Keyboard.Listen(Key.F5, ButtonState.Pressed, Konsoli, "");
144        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
145
146    }
147    void AmmuAseella(PlatformCharacter pelaaja)
148    {
149        if (pisteLaskuri.Value > 0)
150        {
151            PhysicsObject ammus = pelaaja.Weapon.Shoot();
152
153            if (ammus != null)
154            {
155                ammus.Size *= 2;
156                ammus.Image = shurikenkuva;
157                //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
158                //pisteLaskuri.Value--;
159            }
160        }
161    }
162    void Konsoli()
163    {
164        InputWindow kysymysIkkuna = new InputWindow("Konsoli");
165        kysymysIkkuna.TextEntered += ProcessInput;
166        Add(kysymysIkkuna);
167    }
168
169    void ProcessInput(InputWindow ikkuna)
170    {
171        string[] vastaus = ikkuna.InputBox.Text.Split(' ');
172
173        if (vastaus[0] == "speed")
174        {
175            nopeus = int.Parse(vastaus[1]);
176        }
177
178        if (vastaus[0] == "gravity")
179        {
180            Gravity = new Vector(0, int.Parse(vastaus[1]));
181        }
182        if (vastaus[0] == "BOING")
183        {
184            hyppyNopeus = int.Parse(vastaus[1]);
185        }
186        if (vastaus[0] == "sanic")
187        {
188            nopeus = 3500;
189        }
190        if (vastaus[0]== "mercy plz")
191        {
192           
193        }
194        if (vastaus[0] == "win")
195        {
196            throw new Exception("lol u nob");
197        }
198        if (vastaus[0] == "hux")
199        {
200            nopeus = 5000;
201            hyppyNopeus = 5000;
202        }
203        if (vastaus[0] == "YOLO")
204        {
205            nopeus = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999.0;
206        }
207        if (vastaus[0] == "spawn")
208        {
209            pelaaja1.Position = alkupaikka;
210        }
211        if (vastaus[0] == "hax")
212        {
213            nopeus = 100;
214            hyppyNopeus = 100;
215            MessageWindow viesti = new MessageWindow("NOPE");
216            Add(viesti);
217        }
218        if (vastaus[0] == "doggo")
219        {
220            int dogot = 1;
221            if (vastaus.Length > 1)
222            {
223                dogot = int.Parse(vastaus[1]);
224            }
225            DoggoLaskuri.Value += dogot;
226
227            for (int i = 0; i < dogot; i++)
228            {
229                PlatformCharacter pelaaja2 = LisaaPelaaja(pelaaja1.Position + new Vector(40, 5*i), 40, 40);
230                pelaaja2.Tag = "pelaaja2";
231                Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -1.0);
232                Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, 1.0);
233                Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2);
234
235                pelaaja2.Image = doggokuva;
236
237                ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja2, -1.0);
238                ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja2, 1.0);
239                ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2);
240            }
241
242        }
243        if (vastaus[0] == "destroy")
244        {
245
246            GetObjectsWithTag("pelaaja2").ForEach(pelaaja2 => pelaaja2.Destroy());
247            DoggoLaskuri.Value = 0;
248        }
249    }
250
251    void Liikuta(PlatformCharacter hahmo, double suunta)
252    {
253        hahmo.Walk(nopeus * suunta);
254    }
255
256    void Hyppaa(PlatformCharacter hahmo)
257    {
258        if (hyppyja>0)
259        {
260            hahmo.ForceJump(hyppyNopeus);
261            hyppyja--;
262        }
263       
264
265    }
266
267    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
268    {
269        maaliAani.Play();
270        MessageDisplay.Add("nom nom!");
271        tahti.Destroy();
272    }
273    void tormaapiikkiin(PhysicsObject hahmo, PhysicsObject piikki)
274    {
275        MessageDisplay.Add("sinä hävisit");
276        pelaaja1.Destroy();
277    }
278    IntMeter pisteLaskuri;
279
280    void LuoPistelaskuri()
281    {
282        pisteLaskuri = new IntMeter(5);
283        pisteLaskuri.LowerLimit += kuoli;
284
285        Label pisteNaytto = new Label();
286        pisteNaytto.X = Screen.Left + 100;
287        pisteNaytto.Y = Screen.Top - 100;
288        pisteNaytto.TextColor = Color.Black;
289        pisteNaytto.Color = Color.White;
290
291        pisteNaytto.BindTo(pisteLaskuri);
292        Add(pisteNaytto);
293
294    }
295    void voitapeli(PhysicsObject pelaaja, PhysicsObject kohde)
296    {
297        MessageWindow viesti = new MessageWindow("voittaaksesi paina f5 kirjoita konsoliin win");
298        Add(viesti);
299    }
300    IntMeter DoggoLaskuri;
301
302    void LuoDogggolaskuri()
303    {
304        DoggoLaskuri = new IntMeter(0);
305
306        Label pisteNaytto = new Label();
307        pisteNaytto.X = Screen.Right - 100;
308        pisteNaytto.Y = Screen.Top - 100;
309        pisteNaytto.TextColor = Color.Black;
310        pisteNaytto.Color = Color.White;
311        pisteNaytto.Title = "Doggies";
312        pisteNaytto.BindTo(DoggoLaskuri);
313        Add(pisteNaytto);
314
315    }
316    void lisaavihollinen(Vector paikka, double leveys, double korkeus)
317    {
318        PlatformCharacter vihu = new PlatformCharacter(leveys*1.5, korkeus*1.5);
319        vihu.Image = LoadImage("mynam jeff");
320        vihu.Position = paikka;
321        Add(vihu);
322        vihu.Tag = "jeff";
323
324        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
325
326        seuraajanAivot.Speed = 300;                 // Millä nopeudella kohdetta seurataan
327        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
328        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
329        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
330        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
331        vihu.Brain = seuraajanAivot;
332    }
333    void osuviholliseen(PhysicsObject pelaaja,PhysicsObject jeff)
334    {
335        pisteLaskuri.Value -= 1;
336    }
337    void kuoli()
338    {
339        Begin();
340    }
341    void ineedheals(Vector paikka, double korkeus, double leveys)
342    {
343        PhysicsObject heals = new PhysicsObject(leveys,  korkeus);
344        Add(heals);
345
346    }
347}
Note: See TracBrowser for help on using the repository browser.