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

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