source: 2017/31/HenriJ/qq/qq/qq/qq.cs @ 9515

Revision 9515, 12.4 KB checked in by rikavila, 4 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 qq : PhysicsGame
10{
11    const double nopeus = 500;
12    const double hyppyNopeus = 1020;
13    const int RUUDUN_KOKO = 40;
14    bool kutistettu = false;
15   
16    Image seina = LoadImage("puuseina");
17    Image loota = LoadImage("Loota");
18    Image laatikko = LoadImage("Laatikko");
19    Image posahdus = LoadImage("bom");
20
21    PlatformCharacter pelaaja1;
22
23    Image pelaajanKuva = LoadImage("sankari");
24    Image tahtiKuva = LoadImage("tahti");
25
26    PhysicsObject taso2;
27    PhysicsObject taso3;
28    PhysicsObject taso;
29
30    int Kenttanro = 2
31        ;
32
33    public override void Begin()
34    {
35        aloitapeli();
36    }
37    void aloitapeli()
38    {
39        ClearAll();
40
41       
42        if (Kenttanro == 1) LuoKentta("kentta1");
43        else if (Kenttanro == 2) LuoKentta("kentta2");
44        else if (Kenttanro == 3) LuoKentta("kentta3");
45
46        Mouse.IsCursorVisible = true;
47
48        Gravity = new Vector(0, -1000);
49        kutistettu = false;
50
51        //LuoKentta("kentta1");
52        LisaaNappaimet();
53
54        Camera.Follow(pelaaja1);
55        Camera.ZoomFactor = -1;
56        Camera.StayInLevel = true;
57    }
58
59    void LuoKentta(string kentannimi)
60    {
61        TileMap kentta = TileMap.FromLevelAsset(kentannimi);
62        kentta.SetTileMethod('h', LisaaTaso2);
63        kentta.SetTileMethod('#', LisaaTaso5);
64        kentta.SetTileMethod('1', LisaaTykki, new Vector(0, 200), 1);
65        kentta.SetTileMethod('2', LisaaTykki, new Vector(0, -200), 2);
66        kentta.SetTileMethod('3', LisaaTykki, new Vector(-200, 0), 3);
67        kentta.SetTileMethod('4', LisaaTykki, new Vector(200, 0), 4);
68        kentta.SetTileMethod('y', LisaaTaso3);
69        kentta.SetTileMethod('9', LisaaTaso6);
70        kentta.SetTileMethod('t', LisaaLoota);
71        kentta.SetTileMethod('l', LisaaLoota2);
72        kentta.SetTileMethod('*', LisaaTahti);
73        kentta.SetTileMethod('N', LisaaPelaaja);
74        kentta.SetTileMethod('o', LisaaKone);
75        kentta.SetTileMethod('k', LisaaKone2);
76        kentta.SetTileMethod('p', LisaaTaso4);
77        kentta.SetTileMethod('a', Lisaapallo);
78        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
79        Level.CreateBorders();
80        Level.Background.CreateGradient(Color.Green, Color.Gold);
81    }
82   
83
84    void LisaaTaso4(Vector paikka, double leveys, double korkeus)
85    {
86        PhysicsObject taso = new PhysicsObject(leveys * 4, korkeus * 0.99);
87        taso.IgnoresGravity = true;
88        taso.Mass = 10000000.0;
89        taso.CanRotate = false;
90        taso.Position = paikka;
91        taso.Tag = "liikkuva";
92        taso.Color = Color.DarkBlue;
93        AddCollisionHandler( taso, "block", Tuhooliikkuva);
94        Add(taso);
95    }
96
97    void LisaaAmmus(Vector paikka, Vector ampumasuunta, int ryhma)
98    {
99        PhysicsObject ammus = new PhysicsObject(20, 20);
100        ammus.Position = paikka;
101        ammus.Shape = Shape.Circle;
102        ammus.Color = Color.Red;
103        ammus.Tag = "ammus";
104        ammus.IgnoresGravity = true;
105        ammus.CollisionIgnoreGroup = ryhma;
106        AddCollisionHandler(ammus, Osuu);
107        Vector amnopeus = ampumasuunta;
108        Add(ammus);
109        ammus.Velocity = amnopeus;
110    }
111
112    void Osuu(PhysicsObject ammus, PhysicsObject kohde)
113    {
114        if (kohde.Tag.Equals("ammus") || kohde.Tag.Equals("tnt"))
115        {
116            ammus.Destroy();
117            kohde.Destroy();
118            return;
119        }
120        if (kohde.Tag.Equals("trap") || kohde.Tag.Equals("block")) ammus.Destroy();
121    }
122
123
124    void LisaaTykki(Vector paikka, double leveys, double korkeus, Vector ammusSuunta, int ryhma)
125    {
126        PhysicsObject tykki = PhysicsObject.CreateStaticObject(leveys, korkeus);
127        tykki.Position = paikka;
128        tykki.CollisionIgnoreGroup = ryhma;
129        tykki.Color = Color.Gray;
130        tykki.Tag = "block";
131        Timer ajastin = new Timer();
132        ajastin.Interval = 2;
133        ajastin.Timeout += delegate { LisaaAmmus(paikka, ammusSuunta, ryhma); };
134        ajastin.Start();
135        Add(tykki);
136    }
137    void Lisaapallo(Vector paikka, double leveys, double korkeus)
138    {
139        PhysicsObject pallo = new PhysicsObject(40, 40);
140        Add(pallo);
141        Timer ajastin1 = new Timer();
142        ajastin1.Interval = 10.1;
143        ajastin1.Timeout += pallo.Destroy;
144        ajastin1.Start();
145    }
146
147
148
149
150void LisaaTaso2(Vector paikka, double leveys, double korkeus)
151    {
152        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
153        taso.Position = paikka;
154        taso.Tag = "block";
155        taso.Image = seina;
156        Add(taso);
157    }
158
159
160    void LisaaTaso3(Vector paikka, double leveys, double korkeus)
161    {
162        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
163        taso.Position = paikka;
164        taso.Image = seina;
165        taso.Tag = "trap";
166        Add(taso);
167    }
168    void LisaaLoota(Vector paikka, double leveys, double korkeus)
169    {
170        PhysicsObject taso = new PhysicsObject(leveys, korkeus);
171        taso.Position = paikka;
172        taso.Y += 10;
173        taso.Image = loota;
174        taso.Tag = "tnt";
175        taso.CanRotate = false;
176        taso.LinearDamping = 0.96;
177        Add(taso);
178    }
179    void LisaaLoota2(Vector paikka, double leveys, double korkeus)
180    {
181        PhysicsObject taso = new PhysicsObject(leveys, korkeus);
182        taso.Position = paikka;
183        taso.Image = laatikko;
184        taso.Tag = "block";
185        taso.CanRotate = false;
186        AddCollisionHandler(taso, "trap", Ansal);
187        taso.LinearDamping = 0.96;
188        taso.Mass = 20;
189        Add(taso);
190    } 
191    void LisaaTahti(Vector paikka, double leveys, double korkeus)
192    {
193        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
194        tahti.IgnoresCollisionResponse = true;
195        tahti.Position = paikka;
196        tahti.Image = tahtiKuva;
197        tahti.Tag = "tahti";
198        Add(tahti);
199    }
200
201    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
202    {
203        pelaaja1 = new PlatformCharacter(leveys, korkeus + 20.0);
204        pelaaja1.Position = paikka;
205        pelaaja1.Mass = 4.0;
206        pelaaja1.Image = pelaajanKuva;
207        pelaaja1.CanRotate = false;
208        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
209        AddCollisionHandler(pelaaja1, "tnt", Blowup);
210        AddCollisionHandler(pelaaja1, "ammus", Blowup);
211        AddCollisionHandler(pelaaja1, "trap", Ansal);
212        AddCollisionHandler(pelaaja1, "liikkuva", Blockliikkuu);
213        Add(pelaaja1);
214    }
215
216
217    void LisaaKone(Vector paikka, double leveys, double korkeus)
218    {
219        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
220        taso.Position = paikka;
221        taso.Tag = "block";
222        taso.Color = Color.DarkGray;
223        Timer ajastin2 = new Timer();
224        ajastin2.Interval = 5;
225        ajastin2.Timeout += delegate { LisaaLoota2(paikka, 40, 40); };
226        ajastin2.Start(5);
227        Add(taso);
228    }
229
230    void LisaaKone2(Vector paikka, double leveys, double korkeus)
231    {
232        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
233        taso.Position = paikka;
234        taso.Tag = "block";
235        taso.Color = Color.Black;
236        Timer ajastin2 = new Timer();
237        ajastin2.Interval = 5;
238        ajastin2.Timeout += delegate { LisaaLoota(paikka, 40, 40); };
239        ajastin2.Start(5);
240        Add(taso);
241    }
242
243   
244    void Ansal(PhysicsObject pelaaja1, PhysicsObject trap)
245    {
246        Timer ajastin = new Timer();
247        ajastin.Interval = 0.25;
248        ajastin.Timeout += delegate { nytsekatoo(trap); };
249        ajastin.Start();
250       
251    }
252
253
254    void Blockliikkuu(PhysicsObject pelaaja1, PhysicsObject liikkuva)
255    {
256        liikkuva.Velocity = new Vector(150, 0);
257    }
258    void nytsekatoo(PhysicsObject trap)
259    {
260        trap.Destroy();
261    }
262
263    void Tuhooliikkuva(PhysicsObject liikkuva, PhysicsObject kohde)
264    {
265        liikkuva.Destroy();
266    }
267
268    void Blowup(PhysicsObject pelaaja1, PhysicsObject tnt)
269    {
270       
271        int pMaxMaara = 300;
272        ExplosionSystem rajahdys = new ExplosionSystem(posahdus, pMaxMaara);
273        Add(rajahdys);
274        double x = tnt.X;
275        double y = tnt.Y;
276        int pMaara = 30;
277        rajahdys.AddEffect(x, y, pMaara);
278        pelaaja1.Destroy();
279        tnt.Destroy();
280        Timer ajastin = new Timer();
281        ajastin.Interval = 1.5;
282        ajastin.Timeout += aloitapeli;
283        ajastin.Start();
284    }
285
286    void LisaaNappaimet()
287    {
288        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
289        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
290        //Keyboard.Listen(Key.P, ButtonState.Pressed, KutistaPelaaja, "pienentää pelaajan lyhyeksi ajaksi");
291        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
292        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
293        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
294        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
295        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
296        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
297        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
298
299        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
300    }
301
302    void Liikuta(PlatformCharacter hahmo, double nopeus)
303    {
304        hahmo.Walk(nopeus);
305    }
306
307    void Hyppaa(PlatformCharacter hahmo, double nopeus)
308    {
309        hahmo.Jump(nopeus);
310    }
311
312    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
313    {
314        tahti.Destroy();
315        Kenttanro += 1;
316        ClearAll();
317        aloitapeli();
318    }
319    //void KutistaPelaaja()
320    //{
321    //if (kutistettu) return;
322    //kutistettu = true;
323    //Vector koko = pelaaja1.Size;
324    //pelaaja1.Size = new Vector(koko.X / 1.5, koko.Y / 1.5);
325    //Timer.SingleShot(10, delegate { pelaaja1.Size = koko; kutistettu = false; });
326    //}
327
328    void LisaaTaso5(Vector paikka, double leveys, double korkeus)
329    {
330        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
331        taso.Position = paikka;
332        taso.Tag = "block";
333        taso.Color = Color.Gold;
334        Add(taso);
335        taso2 = new PhysicsObject(leveys * 3, korkeus);
336        taso2.Position = paikka;
337
338        double sade = 200;
339
340        taso2.X = taso.X + sade;
341
342        List<Vector> pisteet = new List<Vector>();
343
344        for (int i = 0; i < 360; i++)
345        {
346            pisteet.Add(new Vector( (sade*Math.Cos(i*Math.PI / 180.0) + taso.X) , (sade * Math.Sin(i * Math.PI / 180.0) + taso.Y)));
347        }
348
349        PathFollowerBrain br = new PathFollowerBrain(300, pisteet);
350        br.Loop = true;
351
352        taso2.Brain = br;
353
354        taso2.CanRotate = false;
355       
356        Add(taso2, 1);
357    }
358
359    void LisaaTaso6(Vector paikka, double leveys, double korkeus)
360    {
361        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
362        taso.Position = paikka;
363        taso.Tag = "block";
364        taso.Color = Color.Aqua;
365        Add(taso);
366        taso2 = new PhysicsObject(leveys, korkeus);
367        taso2.Position = paikka;
368        taso2.Shape = Shape.Circle;
369        taso2.Y = taso.Y + 200;
370        taso3 = new PhysicsObject(leveys, korkeus);
371        taso3.Position = paikka;
372        taso3.Shape = Shape.Circle;
373        taso3.Y = taso.Y + 100;
374        AxleJoint liitos = new AxleJoint(taso2, taso.Position);
375        taso2.CanRotate = false;
376        taso2.AngularVelocity = 1.0;
377        taso2.Tag = "tnt";
378        AxleJoint liitos2 = new AxleJoint(taso3, taso.Position);
379        taso3.CanRotate = false;
380        taso3.AngularVelocity = 1.0;
381        taso3.Tag = "tnt";
382        Add(taso2, 1);
383        Add(taso3, 1);
384        Add(liitos);
385        Add(liitos2);
386    }
387
388    protected override void Update(Time time)
389    {
390        //taso2.Angle = Angle.FromDegrees(0);
391
392        base.Update(time);
393    }
394}
Note: See TracBrowser for help on using the repository browser.