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

Revision 8366, 8.3 KB checked in by koannak, 3 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 = 1;
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
41
42        Gravity = new Vector(0, -1000);
43
44        //LuoKentta("kentta1");
45        LisaaNappaimet();
46
47        Camera.Follow(pelaaja1);
48        Camera.ZoomFactor = -1;
49        Camera.StayInLevel = true;
50    }
51
52    void LuoKentta(string kentannimi)
53    {
54        TileMap kentta = TileMap.FromLevelAsset(kentannimi);
55        kentta.SetTileMethod('h', LisaaTaso2);
56        kentta.SetTileMethod('#', LisaaTaso);
57        kentta.SetTileMethod('1', LisaaTykki, new Vector(0, 200), 1);
58        kentta.SetTileMethod('2', LisaaTykki, new Vector(0, -200), 2);
59        kentta.SetTileMethod('3', LisaaTykki, new Vector(-200, 0), 3);
60        kentta.SetTileMethod('4', LisaaTykki, new Vector(200, 0), 4);
61        kentta.SetTileMethod('y', LisaaTaso3);
62        kentta.SetTileMethod('t', LisaaLoota);
63        kentta.SetTileMethod('l', LisaaLoota2);
64        kentta.SetTileMethod('*', LisaaTahti);
65        kentta.SetTileMethod('N', LisaaPelaaja);
66        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
67        Level.CreateBorders();
68        Level.Background.CreateGradient(Color.LightGreen, Color.Green);
69    }
70
71    void LisaaTaso(Vector paikka, double leveys, double korkeus)
72    {
73        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
74        taso.Position = paikka;
75        taso.Tag = "block";
76        taso.Color = Color.Green;
77        Add(taso);
78    }
79
80    void LisaaAmmus(Vector paikka, Vector ampumasuunta, int ryhma)
81    {
82        PhysicsObject ammus = new PhysicsObject(20, 20);
83        ammus.Position = paikka;
84        ammus.Shape = Shape.Circle;
85        ammus.Color = Color.Red;
86        ammus.Tag = "ammus";
87        ammus.IgnoresGravity = true;
88        ammus.CollisionIgnoreGroup = ryhma;
89        AddCollisionHandler(ammus, Osuu);
90        Vector amnopeus = ampumasuunta;
91        Add(ammus);
92        ammus.Velocity = amnopeus;
93        //if (ammus.Position == )
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(100);
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.Image = loota;
145        taso.Tag = "tnt";
146        Add(taso);
147    }
148    void LisaaLoota2(Vector paikka, double leveys, double korkeus)
149    {
150        PhysicsObject taso = new PhysicsObject(leveys, korkeus);
151        taso.Position = paikka;
152        taso.Image = laatikko;
153        taso.Tag = "block";
154        taso.CanRotate = false;
155        AddCollisionHandler(taso, "trap", Ansal);
156        Add(taso);
157    } 
158    void LisaaTahti(Vector paikka, double leveys, double korkeus)
159    {
160        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
161        tahti.IgnoresCollisionResponse = true;
162        tahti.Position = paikka;
163        tahti.Image = tahtiKuva;
164        tahti.Tag = "tahti";
165        Add(tahti);
166    }
167
168    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
169    {
170        pelaaja1 = new PlatformCharacter(leveys, korkeus + 20.0);
171        pelaaja1.Position = paikka;
172        pelaaja1.Mass = 4.0;
173        pelaaja1.Image = pelaajanKuva;
174        pelaaja1.CanRotate = false;
175        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
176        AddCollisionHandler(pelaaja1, "tnt", Blowup);
177        AddCollisionHandler(pelaaja1, "ammus", Blowup);
178        AddCollisionHandler(pelaaja1, "trap", Ansal);
179        Add(pelaaja1);
180    }
181    void Ansal(PhysicsObject pelaaja1, PhysicsObject trap)
182    {
183        Timer ajastin = new Timer();
184        ajastin.Interval = 0.25;
185        ajastin.Timeout += delegate { nytsekatoo(trap); };
186        ajastin.Start();
187       
188    }
189    void nytsekatoo(PhysicsObject trap)
190    {
191        trap.Destroy();
192    }
193
194    void Blowup(PhysicsObject pelaaja1, PhysicsObject tnt)
195    {
196       
197        int pMaxMaara = 300;
198        ExplosionSystem rajahdys = new ExplosionSystem(posahdus, pMaxMaara);
199        Add(rajahdys);
200        double x = tnt.X;
201        double y = tnt.Y;
202        int pMaara = 30;
203        rajahdys.AddEffect(x, y, pMaara);
204        pelaaja1.Destroy();
205        tnt.Destroy();
206        Timer ajastin = new Timer();
207        ajastin.Interval = 1.5;
208        ajastin.Timeout += aloitapeli;
209        ajastin.Start();
210    }
211
212    void LisaaNappaimet()
213    {
214        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
215        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
216        Keyboard.Listen(Key.P, ButtonState.Pressed, KutistaPelaaja, "pienentää pelaajan lyhyeksi ajaksi");
217        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
218        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
219        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
220        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
221        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
222        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
223        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
224
225        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
226    }
227
228    void Liikuta(PlatformCharacter hahmo, double nopeus)
229    {
230        hahmo.Walk(nopeus);
231    }
232
233    void Hyppaa(PlatformCharacter hahmo, double nopeus)
234    {
235        hahmo.Jump(nopeus);
236    }
237
238    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
239    {
240        maaliAani.Play();
241        MessageDisplay.Add("Keräsit tähden!");
242        tahti.Destroy();
243    }
244    void KutistaPelaaja()
245    {
246        if (kutistettu) return;
247        kutistettu = true;
248        Vector koko = pelaaja1.Size;
249        pelaaja1.Size = new Vector(koko.X / 1.5, koko.Y / 1.5);
250        Timer.SingleShot(10, delegate { pelaaja1.Size = koko; kutistettu = false; });
251    }
252}
Note: See TracBrowser for help on using the repository browser.