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

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