source: 2017/31/PatrikK/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli/keraa_tahtia_ikuisesti.cs @ 9264

Revision 9264, 9.3 KB checked in by npo17_73, 23 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 Tasohyppelypeli : PhysicsGame
10{
11    double nopeus = 700;
12    double hyppyNopeus = 900;
13    int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    Image pelaajanKuva = LoadImage("norsu");
18    Image tahtiKuva = LoadImage("tahti");
19
20    SoundEffect maaliAani = LoadSoundEffect("maali");
21
22    List<Timer> ajastinlista = new List<Timer>();
23
24
25    public override void Begin()
26    {
27        Gravity = new Vector(0, -1000);
28        IsMouseVisible = true;
29        LuoKentta();
30        LisaaNappaimet();
31
32        Camera.Follow(pelaaja1);
33        Camera.ZoomFactor = 2.0;
34        Camera.StayInLevel = true;
35    }
36
37    void LuoKentta()
38    {
39        TileMap kentta = TileMap.FromLevelAsset("kentta1");
40        kentta.SetTileMethod('#', LisaaTaso);
41        kentta.SetTileMethod('*', LisaaTahti);
42        kentta.SetTileMethod('N', LisaaPelaaja);
43        kentta.SetTileMethod('I', VihuSpawn);
44        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
45        Level.CreateBorders();
46        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
47    }
48
49    void LisaaTaso(Vector paikka, double leveys, double korkeus)
50    {
51        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
52        taso.Position = paikka;
53        taso.Image = LoadImage("ruoho");
54        Add(taso);
55        //taso.MakeOneWay();
56       
57    }
58
59    void LisaaTahti(Vector paikka, double leveys, double korkeus)
60    {
61        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
62        tahti.IgnoresCollisionResponse = true;
63        tahti.Position = paikka;
64        tahti.Image = tahtiKuva;
65        tahti.Tag = "tahti";
66        Add(tahti);
67    }
68
69    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
70    {
71        pelaaja1 = new PlatformCharacter(leveys, korkeus);
72        pelaaja1.Position = paikka;
73        pelaaja1.Mass = 4.0;
74        pelaaja1.Image = pelaajanKuva;
75        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
76        Add(pelaaja1);
77        //pelaaja1 on PlatformCharacter-tyyppinen
78        pelaaja1.Weapon = new PlasmaCannon(30, 10);
79        pelaaja1.Weapon.FireRate = 10;
80
81        //Ammusten määrä aluksi:
82        pelaaja1.Weapon.Ammo.Value = 99999999;
83
84        //Mitä tapahtuu kun ammus osuu johonkin?
85        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
86    }
87
88    void LisaaNappaimet()
89    {
90        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
91        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
92
93        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
94        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
95        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
96        Keyboard.Listen(Key.Space, ButtonState.Down, Lenna, "Lennä", pelaaja1, 7000.0);
97        Keyboard.Listen(Key.Space, ButtonState.Released, LentoLopuu, "Lennä", pelaaja1);
98        Keyboard.Listen(Key.F2, ButtonState.Down, NoClip, ("Mene blockien läpi"),pelaaja1);
99        Keyboard.Listen(Key.F3, ButtonState.Down, NoClipOff, ("Älä mene blockien läpi"), pelaaja1);
100        Keyboard.Listen(Key.G, ButtonState.Pressed, HeitaKranaatti, ("Heitä kranaatti"), pelaaja1);
101        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Konsoli, null);
102        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
103        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
104
105        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -1.0);
106        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, 1.0);
107        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
108
109        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
110    }
111
112    void Liikuta(PlatformCharacter hahmo, double suunta)
113    {
114        hahmo.Walk(nopeus * suunta);
115    }
116
117    void Hyppaa(PlatformCharacter hahmo, double nopeus)
118    {
119        hahmo.Jump(nopeus);
120    }
121   
122
123    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
124    {
125        maaliAani.Play();
126        MessageDisplay.Add("Keräsit tähden!");
127        tahti.Destroy();
128    }
129    void Lenna(PlatformCharacter hahmo, double nopeus)
130    {
131        hahmo.Push(new Vector(0, nopeus));
132        hahmo.IgnoresCollisionResponse = false;
133       
134    }
135    void LentoLopuu(PlatformCharacter hahmo)
136    {
137        hahmo.IgnoresCollisionResponse = false;
138    }
139    void NoClip(PlatformCharacter hahmo)
140    {
141        hahmo.IgnoresCollisionResponse = true;
142    }
143    void NoClipOff(PlatformCharacter hahmo)
144    {
145        hahmo.IgnoresCollisionResponse = false;
146    }
147    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
148    {
149       
150        if(kohde.Tag=="VIHOLLINEN")
151        {
152            kohde.Destroy();
153        }
154    }
155    void AmmuAseella(PlatformCharacter pelaaja)
156    {
157        PhysicsObject ammus = pelaaja.Weapon.Shoot();
158
159        if (ammus != null)
160        {
161            ammus.Size *= 3.5;
162            ammus.Image = LoadImage("ammus");
163            ammus.MaximumLifetime = TimeSpan.FromSeconds(999999999.9);
164        }
165    }
166    void LisaaVihu(Vector paikka, double leveys, double korkeus)
167    {
168        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
169        vihu.Position = paikka;
170        vihu.Mass = 4.0;
171        vihu.Image = LoadImage("zombi");
172        vihu.Tag = "VIHOLLINEN";
173        Add(vihu);
174        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
175        tasoAivot.Speed = 300;
176        tasoAivot.FallsOffPlatforms = true;
177        tasoAivot.JumpSpeed = 700;
178        tasoAivot.TriesToJump = true;
179        vihu.Brain = tasoAivot;
180        //pelaaja1 on PlatformCharacter-tyyppinen
181        vihu.Weapon = new PlasmaCannon(30, 10);
182        vihu.Weapon.FireRate = 2;
183
184        //Ammusten määrä aluksi:
185        vihu.Weapon.Ammo.Value = 99999999;
186
187        //Mitä tapahtuu kun ammus osuu johonkin?
188        vihu.Weapon.ProjectileCollision = AmmusOsui;
189    }
190    void VihuSpawn(Vector paikka, double leveys, double korkeus)
191    {
192        Timer spawntimer = new Timer();
193        spawntimer.Interval = 3.0;
194        spawntimer.Timeout += delegate { LisaaVihu(paikka, leveys, korkeus); };
195        spawntimer.Start();
196        ajastinlista.Add(spawntimer);
197    }
198    void HeitaKranaatti(PlatformCharacter pelaaja)
199    {
200       
201        Grenade kranu = new Grenade(4.0);
202        pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
203        kranu.Explosion.AddShockwaveHandler("VIHOLLINEN", KranaattiOsui);
204        kranu.Size *= 2.0;
205        kranu.Explosion.Speed = 350;
206        AddCollisionHandler<Grenade,PhysicsObject>(kranu, "VIHOLLINEN", GrenadeCollide);
207       
208
209    }
210    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
211    {
212        rajahdyksenKohde.Destroy();
213    }
214    void GrenadeCollide(Grenade kranu, PhysicsObject zombi)
215    {
216        kranu.Explode();
217    }
218    void Konsoli()
219    {
220        InputWindow kysymysIkkuna = new InputWindow("Huijauskoodi?");
221        kysymysIkkuna.TextEntered += ProcessInput;
222        Add(kysymysIkkuna);
223    }
224    void ProcessInput(InputWindow ikkuna)
225    {
226        string vastaus = ikkuna.InputBox.Text;
227        string[] palat = vastaus.Split(' ');
228
229        // 1 osaiset komennot
230        if (palat.Length == 1)
231        {
232            string komento = palat[0];
233
234            if (komento == "exit")
235            {
236                Exit();
237            }
238            if(komento=="pysäytäspawni")
239            {
240                foreach(Timer spawntimer in ajastinlista)
241                {
242                    spawntimer.Stop();
243                }
244               
245               
246            }
247            if (komento == "aloitaspawni")
248            {
249                foreach (Timer spawntimer in ajastinlista)
250                {
251                    spawntimer.Start();
252                }
253
254            }
255        }
256
257        // 2 osaiset komennot
258        if (palat.Length == 2)
259        {
260            string komento = palat[0];
261            double numero = double.Parse(palat[1]);
262
263            if (komento == "firerate")
264            {
265                pelaaja1.Weapon.FireRate = numero;
266            }
267
268            if (komento == "zombi")
269            {
270                for (int i = 0; i < numero; i++)
271                {
272                    LisaaVihu(pelaaja1.Position+RandomGen.NextVector(0,100),40,40);
273                }
274            }
275
276            if(komento=="gravity")
277            {
278                Gravity = new Vector(0,numero);
279            }
280            if (komento == "speed")
281            {
282                nopeus = numero;
283            }
284        }
285       
286       
287
288    }
289    void TaukoValikko()
290    {
291        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin taukovalikko",
292"Palaa peliin", "Parhaat pisteet", "Lopeta");
293        Add(alkuValikko);
294        alkuValikko.DefaultCancel = 3;
295        alkuValikko.Color = Color.Charcoal;
296
297    }
298
299
300
301}
Note: See TracBrowser for help on using the repository browser.