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

Revision 9314, 10.2 KB checked in by npo17_88, 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 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
27    int Kenttanro = 1;
28
29    public override void Begin()
30    {
31        aloitapeli();
32    }
33    void aloitapeli()
34    {
35        ClearAll();
36
37        if (Kenttanro == 1) LuoKentta("kentta1");
38        else if (Kenttanro == 2) LuoKentta("kentta2");
39        else if (Kenttanro == 3) LuoKentta("kentta3");
40
41        Mouse.IsCursorVisible = true;
42
43        Gravity = new Vector(0, -1000);
44        kutistettu = false;
45
46        //LuoKentta("kentta1");
47        LisaaNappaimet();
48
49        Camera.Follow(pelaaja1);
50        Camera.ZoomFactor = -1;
51        Camera.StayInLevel = true;
52    }
53
54    void LuoKentta(string kentannimi)
55    {
56        TileMap kentta = TileMap.FromLevelAsset(kentannimi);
57        kentta.SetTileMethod('h', LisaaTaso2);
58        kentta.SetTileMethod('#', LisaaTaso);
59        kentta.SetTileMethod('1', LisaaTykki, new Vector(0, 200), 1);
60        kentta.SetTileMethod('2', LisaaTykki, new Vector(0, -200), 2);
61        kentta.SetTileMethod('3', LisaaTykki, new Vector(-200, 0), 3);
62        kentta.SetTileMethod('4', LisaaTykki, new Vector(200, 0), 4);
63        kentta.SetTileMethod('y', LisaaTaso3);
64        kentta.SetTileMethod('t', LisaaLoota);
65        kentta.SetTileMethod('l', LisaaLoota2);
66        kentta.SetTileMethod('*', LisaaTahti);
67        kentta.SetTileMethod('N', LisaaPelaaja);
68        kentta.SetTileMethod('o', LisaaKone);
69        kentta.SetTileMethod('k', LisaaKone2);
70        kentta.SetTileMethod('p', LisaaTaso4);
71        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
72        Level.CreateBorders();
73        Level.Background.CreateGradient(Color.LightGreen, Color.Green);
74    }
75
76    void LisaaTaso(Vector paikka, double leveys, double korkeus)
77    {
78        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
79        taso.Position = paikka;
80        taso.Tag = "block";
81        taso.Color = Color.Green;
82        Add(taso);
83    }
84
85    void LisaaTaso4(Vector paikka, double leveys, double korkeus)
86    {
87        PhysicsObject taso = new PhysicsObject(leveys * 0.9, korkeus * 0.9);
88        taso.IgnoresGravity = true;
89        taso.Mass = 10000000.0;
90        taso.CanRotate = false;
91        taso.Position = paikka;
92        taso.Tag = "liikkuva";
93        taso.Color = Color.DarkBlue;
94        AddCollisionHandler( taso, "block", Tuhooliikkuva);
95        Add(taso);
96    }
97
98    void LisaaAmmus(Vector paikka, Vector ampumasuunta, int ryhma)
99    {
100        PhysicsObject ammus = new PhysicsObject(20, 20);
101        ammus.Position = paikka;
102        ammus.Shape = Shape.Circle;
103        ammus.Color = Color.Red;
104        ammus.Tag = "ammus";
105        ammus.IgnoresGravity = true;
106        ammus.CollisionIgnoreGroup = ryhma;
107        AddCollisionHandler(ammus, Osuu);
108        Vector amnopeus = ampumasuunta;
109        Add(ammus);
110        ammus.Velocity = amnopeus;
111    }
112
113    void Osuu(PhysicsObject ammus, PhysicsObject kohde)
114    {
115        if (kohde.Tag.Equals("ammus") || kohde.Tag.Equals("tnt"))
116        {
117            ammus.Destroy();
118            kohde.Destroy();
119            return;
120        }
121        if (kohde.Tag.Equals("trap") || kohde.Tag.Equals("block")) ammus.Destroy();
122    }
123
124
125    void LisaaTykki(Vector paikka, double leveys, double korkeus, Vector ammusSuunta, int ryhma)
126    {
127        PhysicsObject tykki = PhysicsObject.CreateStaticObject(leveys, korkeus);
128        tykki.Position = paikka;
129        tykki.CollisionIgnoreGroup = ryhma;
130        tykki.Color = Color.Gray;
131        tykki.Tag = "block";
132        Timer ajastin = new Timer();
133        ajastin.Interval = 2;
134        ajastin.Timeout += delegate { LisaaAmmus(paikka, ammusSuunta, ryhma); };
135        ajastin.Start();
136        Add(tykki);
137    }
138
139
140
141
142
143    void LisaaTaso2(Vector paikka, double leveys, double korkeus)
144    {
145        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
146        taso.Position = paikka;
147        taso.Tag = "block";
148        taso.Image = seina;
149        Add(taso);
150    }
151
152
153    void LisaaTaso3(Vector paikka, double leveys, double korkeus)
154    {
155        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
156        taso.Position = paikka;
157        taso.Image = seina;
158        taso.Tag = "trap";
159        Add(taso);
160    }
161    void LisaaLoota(Vector paikka, double leveys, double korkeus)
162    {
163        PhysicsObject taso = new PhysicsObject(leveys, korkeus);
164        taso.Position = paikka;
165        taso.Y += 10;
166        taso.Image = loota;
167        taso.Tag = "tnt";
168        taso.CanRotate = false;
169        taso.LinearDamping = 0.96;
170        Add(taso);
171    }
172    void LisaaLoota2(Vector paikka, double leveys, double korkeus)
173    {
174        PhysicsObject taso = new PhysicsObject(leveys, korkeus);
175        taso.Position = paikka;
176        taso.Image = laatikko;
177        taso.Tag = "block";
178        taso.CanRotate = false;
179        AddCollisionHandler(taso, "trap", Ansal);
180        taso.LinearDamping = 0.96;
181        taso.Mass = 20;
182        Add(taso);
183    } 
184    void LisaaTahti(Vector paikka, double leveys, double korkeus)
185    {
186        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
187        tahti.IgnoresCollisionResponse = true;
188        tahti.Position = paikka;
189        tahti.Image = tahtiKuva;
190        tahti.Tag = "tahti";
191        Add(tahti);
192    }
193
194    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
195    {
196        pelaaja1 = new PlatformCharacter(leveys, korkeus + 20.0);
197        pelaaja1.Position = paikka;
198        pelaaja1.Mass = 4.0;
199        pelaaja1.Image = pelaajanKuva;
200        pelaaja1.CanRotate = false;
201        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
202        AddCollisionHandler(pelaaja1, "tnt", Blowup);
203        AddCollisionHandler(pelaaja1, "ammus", Blowup);
204        AddCollisionHandler(pelaaja1, "trap", Ansal);
205        AddCollisionHandler(pelaaja1, "liikkuva", Blockliikkuu);
206        Add(pelaaja1);
207    }
208
209
210    void LisaaKone(Vector paikka, double leveys, double korkeus)
211    {
212        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
213        taso.Position = paikka;
214        taso.Tag = "block";
215        taso.Color = Color.DarkGray;
216        Timer ajastin2 = new Timer();
217        ajastin2.Interval = 5;
218        ajastin2.Timeout += delegate { LisaaLoota2(paikka, 40, 40); };
219        ajastin2.Start(5);
220        Add(taso);
221    }
222
223    void LisaaKone2(Vector paikka, double leveys, double korkeus)
224    {
225        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
226        taso.Position = paikka;
227        taso.Tag = "block";
228        taso.Color = Color.Black;
229        Timer ajastin2 = new Timer();
230        ajastin2.Interval = 5;
231        ajastin2.Timeout += delegate { LisaaLoota(paikka, 40, 40); };
232        ajastin2.Start(5);
233        Add(taso);
234    }
235
236   
237    void Ansal(PhysicsObject pelaaja1, PhysicsObject trap)
238    {
239        Timer ajastin = new Timer();
240        ajastin.Interval = 0.25;
241        ajastin.Timeout += delegate { nytsekatoo(trap); };
242        ajastin.Start();
243       
244    }
245
246
247    void Blockliikkuu(PhysicsObject pelaaja1, PhysicsObject liikkuva)
248    {
249        liikkuva.Velocity = new Vector(150, 0);
250    }
251    void nytsekatoo(PhysicsObject trap)
252    {
253        trap.Destroy();
254    }
255
256    void Tuhooliikkuva(PhysicsObject liikkuva, PhysicsObject kohde)
257    {
258        liikkuva.Destroy();
259    }
260
261    void Blowup(PhysicsObject pelaaja1, PhysicsObject tnt)
262    {
263       
264        int pMaxMaara = 300;
265        ExplosionSystem rajahdys = new ExplosionSystem(posahdus, pMaxMaara);
266        Add(rajahdys);
267        double x = tnt.X;
268        double y = tnt.Y;
269        int pMaara = 30;
270        rajahdys.AddEffect(x, y, pMaara);
271        pelaaja1.Destroy();
272        tnt.Destroy();
273        Timer ajastin = new Timer();
274        ajastin.Interval = 1.5;
275        ajastin.Timeout += aloitapeli;
276        ajastin.Start();
277    }
278
279    void LisaaNappaimet()
280    {
281        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
282        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
283        Keyboard.Listen(Key.P, ButtonState.Pressed, KutistaPelaaja, "pienentää pelaajan lyhyeksi ajaksi");
284        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
285        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
286        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
287        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
288        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
289        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
290        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
291
292        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
293    }
294
295    void Liikuta(PlatformCharacter hahmo, double nopeus)
296    {
297        hahmo.Walk(nopeus);
298    }
299
300    void Hyppaa(PlatformCharacter hahmo, double nopeus)
301    {
302        hahmo.Jump(nopeus);
303    }
304
305    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
306    {
307        tahti.Destroy();
308        Kenttanro += 1;
309        ClearAll();
310        aloitapeli();
311    }
312    void KutistaPelaaja()
313    {
314        if (kutistettu) return;
315        kutistettu = true;
316        Vector koko = pelaaja1.Size;
317        pelaaja1.Size = new Vector(koko.X / 1.5, koko.Y / 1.5);
318        Timer.SingleShot(10, delegate { pelaaja1.Size = koko; kutistettu = false; });
319    }
320
321
322
323
324
325
326}
Note: See TracBrowser for help on using the repository browser.