source: 2011/23/vikeisal/SpyInTheBase/SpyInTheBase/SpyInTheBase/Peli.cs @ 1786

Revision 1786, 11.2 KB checked in by vikeisal, 9 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8using SpyInTheBase;
9
10public class Peli : PhysicsGame
11{
12    const double nopeus = 200;
13    const double hyppyNopeus = 425;
14    const int RUUDUN_KOKO = 40;
15    DoubleMeter AlaspainLaskuri;
16    PlatformCharacter pelaaja1;
17    Image pelaajanKuva = LoadImage("spy");
18    Image tahtiKuva = LoadImage("intelligents");
19    Image vihollisenKuva = LoadImage("enemy");
20    Image TasoKuva = LoadImage("maa");
21    Image TasoKuva2 = LoadImage("maa2");
22    Image KolikkoKuva = LoadImage("enemy");
23    Image metalli = LoadImage("metalli");
24    SoundEffect voittoAani = LoadSoundEffect("victory");
25    SoundEffect havioAani = LoadSoundEffect("lose");
26    SoundEffect enemydie = LoadSoundEffect("enemydie");
27    SoundEffect coinAani = LoadSoundEffect("coinaani");
28    SoundEffect spydie = LoadSoundEffect("spydie");
29    IntMeter pisteLaskuri;
30
31    List<Label> valikonKohdat;
32
33
34
35    public override void Begin()
36    {
37        Gravity = new Vector(0, -1250);
38       
39        luoKentta();
40        lisaaNappaimet();
41        LuoLaskuri();
42
43        Camera.Follow(pelaaja1);
44        Camera.ZoomFactor = 1.0;
45        Camera.StayInLevel = true;
46        Valikko();
47    }
48
49
50    void Valikko()
51    {
52        ClearAll();
53
54        valikonKohdat = new List<Label>();
55
56        Label kohta1 = new Label("Aloita uusi peli");
57        kohta1.Position = new Vector(0, 40);
58        valikonKohdat.Add(kohta1);
59
60        Label kohta2 = new Label("Lopeta");
61        kohta2.Position = new Vector(0, -40);
62        valikonKohdat.Add(kohta2);
63
64        foreach (Label valikonKohta in valikonKohdat)
65        {
66            Add(valikonKohta);
67        }
68
69        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
70        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
71
72        Mouse.IsCursorVisible = true;
73        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
74        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
75
76    }
77    void ValikossaLiikkuminen(AnalogState hiirenTila)
78    {
79        foreach (Label kohta in valikonKohdat)
80        {
81            if (Mouse.IsCursorOn(kohta))
82            {
83                kohta.TextColor = Color.Red;
84            }
85            else
86            {
87                kohta.TextColor = Color.White;
88            }
89
90        }
91    }
92    void AloitaPeli()
93    {
94        ClearAll();
95        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
96        Gravity = new Vector(0, -1250);
97        LuoAikaLaskuri();
98        luoKentta();
99        lisaaNappaimet();
100        LuoLaskuri();
101        Camera.Follow(pelaaja1);
102        Camera.ZoomFactor = 1.0;
103        Camera.StayInLevel = true;
104    }
105
106    void Lopeta()
107    {
108        Exit();
109    }
110
111
112
113
114
115    void luoKentta()
116    {
117        TileMap kentta = TileMap.FromFile("kentta1.txt");
118        kentta['#'] = lisaaTaso;
119        kentta['*'] = lisaaintelligents;
120        kentta['N'] = lisaaPelaaja;
121        kentta['M'] = lisaaVihollinen;
122        kentta['_'] = lisaaTappavaTaso;
123        kentta['-'] = lisaaTaso2;
124        kentta['.'] = lisaaKolikko;
125        kentta['"'] = lisaametalli;
126        kentta['&'] = lisaapuu;
127        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
128        Level.CreateBorders();
129        Level.BackgroundColor = Color.Black;
130        Level.Background.CreateStars();
131    }
132    PhysicsObject lisaaTaso2()
133    {
134        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
135        taso2.Image = TasoKuva2;
136        taso2.Tag = "maa2";
137        return taso2;
138    }
139    PhysicsObject lisaaTaso()
140    {
141        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
142        taso.Image = TasoKuva;
143        taso.Tag = "maa";
144        return taso;
145    }
146    PhysicsObject lisaaTappavaTaso()
147    {
148        PhysicsObject TappavaTaso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO, Shape.Triangle);
149        TappavaTaso.Color = Color.Red;
150        TappavaTaso.Tag = "TappavaTaso";
151        return TappavaTaso;
152    }
153
154    PhysicsObject lisaaintelligents()
155    {
156        PhysicsObject intelligents = PhysicsObject.CreateStaticObject(39.9, 30);
157        intelligents.Image = tahtiKuva;
158        intelligents.Tag = "intelligents";
159        return intelligents;
160    }
161
162    PhysicsObject lisaaKolikko()
163    {
164        PhysicsObject kolikko = PhysicsObject.CreateStaticObject(10, 10);
165        kolikko.Image = LoadImage("coin");
166        kolikko.Tag = "kolikko";
167        return kolikko;
168    }
169    PhysicsObject lisaametalli()
170    {
171        PhysicsObject metalli = PhysicsObject.CreateStaticObject(40, 40);
172        metalli.Image = LoadImage("metalli");
173        metalli.Tag = "metalli";
174        return metalli;
175    }
176    PhysicsObject lisaapuu()
177    {
178        PhysicsObject puu = PhysicsObject.CreateStaticObject(40, 40);
179        puu.Image = LoadImage("puu");
180        puu.Tag = "puu";
181        Add(puu, -1);
182        return puu;
183    }
184
185    PlatformCharacter lisaaPelaaja()
186    {
187        pelaaja1 = new PlatformCharacter(30, 50);
188        pelaaja1.Mass = 4.0;
189        pelaaja1.Image = pelaajanKuva;
190        pelaaja1.Weapon = new AssaultRifle(0, 5);
191        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
192
193
194        AddCollisionHandler(pelaaja1, osuTahteen);
195        return pelaaja1;
196    }
197
198    PhysicsObject lisaaVihollinen()
199    {
200        PhysicsObject vihollinen1 = new PhysicsObject(70, 60);
201
202        vihollinen1.Mass = 7.0;
203        AddCollisionHandler(vihollinen1, KasitteleVihollisenTormays);
204        vihollinen1.Tag = "vihollinen1";
205        AssaultRifle pyssy = new AssaultRifle(20, 1);
206        vihollinen1.Add(pyssy);
207        Timer ajastin = new Timer();
208        ajastin.Interval = 0.5;
209        //ajastin.Trigger += ;
210        ajastin.Start();
211
212        vihollinen1.Image = vihollisenKuva;
213        Add(vihollinen1);
214
215        return vihollinen1;
216    }
217
218    void lisaaNappaimet()
219    {
220        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
221
222
223        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
224        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
225        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
226        Keyboard.Listen(Key.Space, ButtonState.Pressed, AmmuAseella, "Ammu");
227       
228    }
229
230    void liikuta(PlatformCharacter hahmo, double nopeus)
231    {
232
233        if (nopeus < 0)
234        {
235            pelaaja1.Image = Image.Mirror(pelaajanKuva);
236        }
237        else
238        {
239            pelaaja1.Image = pelaajanKuva;
240        }
241        hahmo.Walk(nopeus);
242    }
243
244    void hyppaa(PlatformCharacter hahmo, double nopeus)
245    {
246        hahmo.Jump(nopeus);
247    }
248
249    void osuTahteen(PhysicsObject hahmo, PhysicsObject kohde)
250    {
251        if (kohde.Tag.ToString() == "intelligents")
252        {
253            kohde.Destroy();
254
255            Label naytto = new Label("Kaappasit vihollisen tiedot!");
256            naytto.Position = Vector.Zero;
257            naytto.TextColor = Color.Green;
258            Add(naytto);
259            voittoAani.Play();
260            Valikko();
261        }
262
263        if (kohde.Tag.ToString() == "TappavaTaso")
264        {
265
266            Label naytto = new Label("GAME OVER! KUOLIT! YOU FAILED!");
267            naytto.Position = Vector.Zero;
268            naytto.TextColor = Color.Red;
269            Add(naytto);
270            pelaaja1.Destroy();
271            spydie.Play();
272            havioAani.Play();
273            Valikko();
274           
275        }
276
277        if (kohde.Tag.ToString() == "kolikko")
278        {
279            pisteLaskuri.Value = pisteLaskuri.Value + 1;
280           
281            coinAani.Play();
282            kohde.Destroy();
283        }
284    }
285
286    void LuoAikaLaskuri()
287    {
288        AlaspainLaskuri = new DoubleMeter(60);
289
290        Timer aikalaskuri = new Timer();
291        aikalaskuri.Interval = 0.1;
292        aikalaskuri.Trigger += LaskeAlaspain;
293        aikalaskuri.Start();
294
295        Label aikaNaytto = new Label();
296        aikaNaytto.X = Screen.Right + -50;
297        aikaNaytto.Y = Screen.Top + -50;
298
299        aikaNaytto.TextColor = Color.White;
300        aikaNaytto.DecimalPlaces = 1;
301        aikaNaytto.BindTo(AlaspainLaskuri);
302        Add(aikaNaytto);
303    }
304    void LaskeAlaspain(Timer timer)
305    {
306        AlaspainLaskuri.Value -= 0.1;
307
308        if (AlaspainLaskuri.Value <= 0)
309        {
310            timer.Stop();
311            Label naytto = new Label("GAME OVER! AIKASI LOPPUI! YOU FAILED!");
312            naytto.Position = Vector.Zero;
313            naytto.TextColor = Color.Red;
314            Add(naytto);
315            pelaaja1.Destroy();
316            havioAani.Play();
317            Valikko();
318        }
319        if (pelaaja1.IsDestroyed)
320        {
321            timer.Stop();
322        }
323    }
324
325    void KasitteleVihollisenTormays(PhysicsObject vihollinen1, PhysicsObject kohde)
326    {
327        if (kohde.Tag.ToString() == "TappavaTaso")
328        {
329            vihollinen1.Destroy();
330            enemydie.Play();
331        }
332
333    }
334    void LuoLaskuri()
335    {
336        pisteLaskuri = new IntMeter(0);
337
338        Label pisteNaytto = new Label();
339        pisteNaytto.X = Screen.Left + 50;
340        pisteNaytto.Y = Screen.Top - 50;
341        pisteNaytto.TextColor = Color.Yellow;
342
343        pisteNaytto.BindTo(pisteLaskuri);
344        Add(pisteNaytto);
345    }
346    void AmmuAseella()
347    {
348        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
349       
350        if (ammus != null)
351        {
352            ammus.Size *= 1;
353            ammus.Color = Color.Yellow;
354
355        }
356
357
358    }
359    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
360    {
361        if (kohde.Tag.ToString() == "vihollinen1")
362        {
363            kohde.Destroy();
364            enemydie.Play();
365            ammus.Destroy();
366            pisteLaskuri.Value = pisteLaskuri.Value + 5;
367            Explosion rajahdys = new Explosion(5);
368            rajahdys.Position = ammus.Position;
369            Add(rajahdys);
370        }
371
372        if (kohde.Tag.ToString() == "maa")
373        {
374            ammus.Destroy();
375            Explosion rajahdys = new Explosion(5);
376            rajahdys.Position = ammus.Position;
377            Add(rajahdys);
378        }
379        if (kohde.Tag.ToString() == "maa2")
380        {
381            ammus.Destroy();
382            Explosion rajahdys = new Explosion(5);
383            rajahdys.Position = ammus.Position;
384            Add(rajahdys);
385        }
386        if (kohde.Tag.ToString() == "metalli")
387        {
388            ammus.Destroy();
389            Explosion rajahdys = new Explosion(5);
390            rajahdys.Position = ammus.Position;
391            Add(rajahdys);
392        }
393       
394    }
395    void AmmuAseella2(Timer Sender)
396    {
397        //PhysicsObject ammus = pyssy.Shoot();
398
399        //if (ammus != null)
400        {
401            //ammus.Size *= 1;
402        }
403
404    }
405
406
407
408
409
410
411    public PhysicsObject vihollinen1 { get; set; }
412
413    public Image kolikkoKuva { get; set; }
414
415
416}
Note: See TracBrowser for help on using the repository browser.