source: 2016/30/HenriJ/qq/qq/qq/qq.cs @ 8407

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