source: 2012/23/SamuH/BOMBDUDE/BOMBDUDE/BOMBDUDE/BOMBDUDE.cs @ 2872

Revision 2872, 10.5 KB checked in by hesahaut, 8 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 BOMBDUDE : PhysicsGame
10{
11    const double RUUDUN_SIVUN_PITUUS = 100.0;
12    int ruutujaVaakaan;
13    int ruutujaPystyyn;
14
15    Image BombDudePic = LoadImage("BombDude");
16    Image KiviPic = LoadImage("Kivi");
17    Image LaudatPic = LoadImage("Laudat");
18    Image UloskayntiPic = LoadImage("Uloskäynti");
19    Image PommiPic = LoadImage("Pommi");
20    Image TimanttiPic = LoadImage("Timantti");
21    Image MaaliPic = LoadImage("Maali2");
22   
23    double liikkumisnopeus = 1800;
24
25    PhysicsObject BombDude;
26    IntMeter timanttiLaskuri;
27    IntMeter pommiLaskuri;
28    ExplosionSystem es;
29    DoubleMeter alaspainLaskuri;
30    Timer aikaLaskuri;
31   
32    public override void Begin()
33    {
34        MultiSelectWindow valikko = new MultiSelectWindow("BOMBDUDE(demo)", "Yksinpeli", "Parhaat pisteet", "Poistu");
35        valikko.ItemSelected += PainettiinValikonNappia;
36        valikko.Color = Color.Azure;
37d        Add(valikko);
38
39    }
40
41    void AloitaPeli()
42    {
43        timanttiLaskuri = LuoLaskuri(0, 0, 32);
44        pommiLaskuri = LuoLaskuri(3, 0, 3);
45        pommiLaskuri.LowerLimit += PommitLoppui;
46        LuoNaytot();
47        LuoEfektit();
48        LuoKentta("BOMBDUDE mappi1");
49        AsetaNappaimet();
50        LuoAikaLaskuri();
51    }
52
53
54    void PommitLoppui(int laskurinarvo)
55    {
56        MessageDisplay.Add("Pommit loppui");
57        Keyboard.Disable(Key.Space);
58        Timer.SingleShot(3.0, delegate
59        {
60            pommiLaskuri.Reset();
61            Keyboard.Enable(Key.Space);
62        });
63    }
64
65    void AsetaNappaimet()
66    {
67
68        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Liiku ylös.", BombDude, new Vector(0, 1));
69        Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, null, BombDude, Vector.Zero);
70        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Liiku alas.", BombDude, new Vector(0, -1));
71        Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, null, BombDude, Vector.Zero);
72        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liiku vasemmalle.", BombDude, new Vector(-1, 0));
73        Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, null, BombDude, Vector.Zero);
74        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liiku oikealle.", BombDude, new Vector(1, 0));
75        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, BombDude, Vector.Zero);
76        Keyboard.Listen(Key.Space, ButtonState.Pressed, TiputaPommi, "Tiputa pommi", BombDude);
77        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Poistu");
78    }
79
80    IntMeter LuoLaskuri(int def, int min, int max)
81    {
82        IntMeter laskuri = new IntMeter(def, min, max);
83        return laskuri;
84    }
85
86    Label LuoNaytto(double x, double y, IntMeter sidottavaMittari)
87    {
88        Label naytto = new Label();
89        naytto.BindTo(sidottavaMittari);
90        naytto.X = x;
91        naytto.Y = y;
92        naytto.TextColor = Color.Aqua;
93        naytto.BorderColor = Color.Gray;
94        naytto.Color = Color.Gray;
95        Add(naytto);
96        return naytto;
97    }
98
99    void LuoNaytot()
100    {
101        Label timanttiNaytto = LuoNaytto(-490, -340, timanttiLaskuri);
102        LuoSelitystekstiMittarinaytolle(timanttiNaytto, "Timantteja: ");
103        Label pommiNaytto = LuoNaytto(-490, -380, pommiLaskuri);
104        LuoSelitystekstiMittarinaytolle(pommiNaytto, "Pommeja: ");
105    }
106
107    void LuoEfektit()
108    {
109        es = new ExplosionSystem(LoadImage("Räjähdys"), 1000);
110        Add(es);
111    }
112
113    Label LuoSelitystekstiMittarinaytolle(Label mittarinaytto, String teksti)
114    {
115        Label selitys = new Label(teksti);
116        selitys.Right = mittarinaytto.Left - 10;
117        selitys.Y = mittarinaytto.Y;
118        selitys.TextColor = Color.Aqua;
119        selitys.BorderColor = Color.Gray;
120        selitys.Color = Color.Gray;
121        Add(selitys);
122        return selitys;
123    }
124
125    void LuoKentta(String kentta)
126    {
127        TileMap ruudut = TileMap.FromLevelAsset(kentta);
128        ruudut.SetTileMethod('k', LuoKivi);
129        ruudut.SetTileMethod('l', LuoLaudat);
130        ruudut.SetTileMethod('p', LuoPelaaja);
131        ruudut.SetTileMethod('t', LuoTimantti);
132        ruudut.SetTileMethod('u', LuoUloskaynti);
133        ruudut.SetTileMethod('m', LuoMaali);
134        ruudut.Execute(RUUDUN_SIVUN_PITUUS, RUUDUN_SIVUN_PITUUS);
135        Level.CreateBorders();
136        ruutujaVaakaan = ruudut.GetLength(1);
137        ruutujaPystyyn = ruudut.GetLength(0);
138
139        Level.BackgroundColor = Color.Gray;
140
141        Camera.ZoomToLevel();
142    }
143
144    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
145    {
146        BombDude = new PhysicsObject(70, 51);
147        AddCollisionHandler(BombDude, "Timantti", CollisionHandler.AddMeterValue(timanttiLaskuri, 1));
148        AddCollisionHandler(BombDude, "Uloskaynti", PelaajaUloskaynnissa);
149        AddCollisionHandler(BombDude, "Timantti", delegate(PhysicsObject p, PhysicsObject kohde) { MessageDisplay.Add("Sait timantin!"); });
150        AddCollisionHandler(BombDude, "Timantti", CollisionHandler.DestroyTarget);
151        AddCollisionHandler(BombDude, "Maali", CollisionHandler.DestroyObject);
152        Add(BombDude);
153        BombDude.CanRotate = false;
154        BombDude.Position = paikka;
155        BombDude.Image = BombDudePic;
156        BombDude.Tag = "BombDude";
157        BombDude.LinearDamping = 0.2;
158        BombDude.Mass = 1;
159    }
160
161    void PelaajaUloskaynnissa(PhysicsObject pelaaja, PhysicsObject uloskaynti)
162    {
163        SeuraavaKentta("BOMBDUDE mappi2");
164    }
165
166    void SeuraavaKentta(String kartta)
167    {
168        pommiLaskuri.Reset();
169        ClearGameObjects();
170        ClearControls();
171        LuoNaytot();
172        LuoEfektit();
173        LuoKentta(kartta);
174        AsetaNappaimet();
175        LuoAikaLaskuri();
176    }
177
178    void LuoKivi(Vector paikka, double leveys, double korkeus)
179    {
180        PhysicsObject Kivi = PhysicsObject.CreateStaticObject(leveys, korkeus);
181        Kivi.Position = paikka;
182        Kivi.Image = KiviPic;
183        Add(Kivi);
184    }
185
186    void LuoLaudat(Vector paikka, double leveys, double korkeus)
187    {
188        PhysicsObject laudat = PhysicsObject.CreateStaticObject(leveys, korkeus);
189        laudat.Position = paikka;
190        laudat.Tag = "laudat";
191        laudat.Image = LaudatPic;
192        Add(laudat);
193    }
194
195    void LuoMaali(Vector paikka, double leveys, double korkeus)
196    {
197    PhysicsObject Maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
198    Maali.Position = paikka;
199    Maali.Tag = "Maali";
200    Maali.Image = MaaliPic;
201        Add(Maali);
202    }
203
204    void LuoTimantti(Vector paikka, double leveys, double korkeus)
205    {
206        PhysicsObject Timantti = new PhysicsObject(leveys, korkeus);
207        Timantti.Position = paikka;
208        Timantti.Image = TimanttiPic;
209        Timantti.Tag = "Timantti";
210        Add(Timantti);
211    }
212
213    void LuoUloskaynti(Vector paikka, double leveys, double korkeus)
214    {
215        PhysicsObject Uloskaynti = PhysicsObject.CreateStaticObject(leveys, korkeus);
216        Uloskaynti.Position = paikka;
217        Uloskaynti.Image = UloskayntiPic;
218        Add(Uloskaynti);
219        Uloskaynti.Tag = "Uloskaynti";
220    }
221
222
223
224    void TiputaPommi(PhysicsObject BombDude)
225    {
226        GameObject pommi = new GameObject(RUUDUN_SIVUN_PITUUS, RUUDUN_SIVUN_PITUUS);
227        Vector paikka = RuudunKeskipiste(BombDude);
228        pommi.Position = paikka;
229        pommi.Image = PommiPic;
230        Add(pommi);
231        pommiLaskuri.Value--;
232
233        Timer.SingleShot(2.5, delegate
234        {
235            Explosion rajahdys = new Explosion(30);
236            rajahdys.IsVisible = false;
237            Add(rajahdys);
238            es.MinScale = 40;
239            es.MaxScale = 120;
240            es.MinVelocity = 50;
241            es.MaxVelocity = 80;
242            es.MinLifetime = 0.5;
243            es.MaxLifetime = 1.5;
244            es.AddEffect(paikka, 50);
245            rajahdys.Position = pommi.Position;
246            rajahdys.ShockwaveReachesObject += RajahdysOsui;
247            pommi.Destroy();
248        });
249    }
250
251    void RajahdysOsui(IPhysicsObject mihinOsui, Vector suunta)
252    {
253        if (mihinOsui.Tag.ToString() == "laudat")
254        {
255            mihinOsui.Destroy();
256        }
257    }
258
259
260    Vector RuudunKeskipiste(PhysicsObject olio)
261    {
262        double pelaajanEtaisyysVasemmastaReunasta = Math.Abs(olio.X - Level.Left);
263        int moneskoRuutuVasemmalta = (int)(pelaajanEtaisyysVasemmastaReunasta / RUUDUN_SIVUN_PITUUS);
264
265        double pelaajanEtaisyysYlaReunasta = Math.Abs(Level.Top - olio.Y);
266        int moneskoRuutuYlhaalta = (int)(pelaajanEtaisyysYlaReunasta / RUUDUN_SIVUN_PITUUS);
267
268        double x = Level.Left + moneskoRuutuVasemmalta * RUUDUN_SIVUN_PITUUS + RUUDUN_SIVUN_PITUUS / 2;
269        double y = Level.Top - (moneskoRuutuYlhaalta * RUUDUN_SIVUN_PITUUS + RUUDUN_SIVUN_PITUUS / 2);
270        return new Vector(x, y);
271    }
272
273    void Liikuta(PhysicsObject BombDude, Vector suunta)
274    {
275        BombDude.Velocity = suunta * liikkumisnopeus;
276    }
277
278    void LuoAikaLaskuri()
279    {
280        alaspainLaskuri = new DoubleMeter(148, 0, 148);
281        alaspainLaskuri.LowerLimit += delegate { aikaLaskuri.Stop(); };
282        alaspainLaskuri.LowerLimit += delegate { MessageDisplay.Add("Aika loppui..."); };
283        alaspainLaskuri.LowerLimit += delegate { BombDude.Destroy(); };
284
285        aikaLaskuri = new Timer();
286        aikaLaskuri.Interval = 0.1;
287        aikaLaskuri.Timeout += LaskeAlaspain;
288        aikaLaskuri.Start();
289
290        Label aikaNaytto = new Label();
291        aikaNaytto.TextColor = Color.White;
292        aikaNaytto.DecimalPlaces = 1;
293        aikaNaytto.BindTo(alaspainLaskuri);
294        aikaNaytto.X = -600;
295        aikaNaytto.Y = -420;
296        Add(aikaNaytto);
297    }
298
299    void LaskeAlaspain()
300    {
301        alaspainLaskuri.Value -= 0.1;
302
303        //if (alaspainLaskuri.Value <= 0)
304        //{
305        //    MessageDisplay.Add("Aika loppui...");
306        //    aikaLaskuri.Stop();
307           
308        //}
309    }
310
311    void PainettiinValikonNappia(int valinta)
312    {
313       
314        switch (valinta)
315        {
316            case 0:
317                // AloitaPeli();
318                break;
319            case 1:
320                // ParhaatPisteet();
321                break;
322            case 2:
323                Exit();
324                break;
325        }
326        AloitaPeli();
327   
328    }
329
330}
Note: See TracBrowser for help on using the repository browser.