source: 2012/30/JesseN/Oma peli/OmaPeli/OmaPeli/OmaPeli/OmaPeli.cs @ 3769

Revision 3769, 15.3 KB checked in by anlakane, 9 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class OmaPeli : PhysicsGame
10{
11    PlatformCharacter hahmo;
12    Image hahmostand = LoadImage("CharStand32");
13    Image[] hahmojuoksu = LoadImages("CharRun1", "CharRun2", "CharRun3");
14    Image hahmojump = LoadImage("CharJump");
15    Image hahmofall = LoadImage("CharJump");
16    Image panos = LoadImage("Bullet");
17    Image tahtaa = LoadImage("CharShoot32bit");
18    Image[] flyer = LoadImages("EnemyFlying1", "EnemyFlying2", "EnemyFlying3", "EnemyFlying4");
19
20    Image vesiblock = LoadImage("Water");
21    Image puublock = LoadImage("Wood");
22    Image ruohoblock = LoadImage("Grass");
23    Image multablock = LoadImage("Dirt");
24    Image lehdetblock = LoadImage("Leaves");
25    Image panos2 = LoadImage("Bullet2");
26    Image kiviblock = LoadImage("Stone");
27    Image kattokivi1block = LoadImage("StoneCeiling");
28    Image kattokivi2block = LoadImage("StoneCeiling2");
29    Image kattokivi3block = LoadImage("StoneCeiling3");
30    Image takakiviblock = LoadImage("StoneBackground");
31    Image luolakiviblock1 = LoadImage("StoneCeilingBack1");
32    Image luolakiviblock2 = LoadImage("StoneCeilingBack2");
33    Image luolakiviblock3 = LoadImage("StoneCeilingBack3");
34    Image borderblock = LoadImage("BorderWall");
35    Image ammolaatikko = LoadImage("AmmoBox");
36    Image taustakuva = LoadImage("CloudBackground");
37    Image hpsalkku = LoadImage("Briefcase");
38    Animation hahmoosuma;
39    ExplosionSystem rajahdys;
40
41    DoubleMeter elamaLaskuri;
42    IntMeter ammuslaskuri;
43
44    public override void Begin()
45    {
46        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
47"Aloita peli", "Parhaat pisteet", "Lopeta");
48        Add(alkuValikko);
49
50        alkuValikko.ItemSelected += PainettiinValikonNappia;
51
52
53
54
55
56
57
58
59
60
61
62
63        PhoneBackButton.Listen(ConfirmExit, "Lopeta Peli");
64        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
65    }
66
67    void PainettiinValikonNappia(int valinta)
68    {
69        switch (valinta)
70        {
71            case 0:
72                Luokentta();
73                break;
74            case 1:
75                Exit();
76                break;
77
78
79        }
80    }
81
82    void LuoTausta()
83    {
84        GameObject tausta = new GameObject(Level.Width, Level.Height);
85        tausta.Image = taustakuva;
86        Add(tausta, -3);
87        Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
88    }
89
90    void Luokentta()
91    {
92
93        ammuslaskuri = new IntMeter(30);
94
95
96        LuoElamaLaskuri();
97        Luoammustenmaara();
98
99        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Level1");
100
101        ruudut.SetTileMethod(Color.BrightGreen, LuoRuoho);
102        ruudut.SetTileMethod(Color.Cyan, LuoVesi);
103        ruudut.SetTileMethod(Color.Red, LuoVihollinen);
104        ruudut.SetTileMethod(Color.DarkBlue, LuoLehdet);
105        ruudut.SetTileMethod(Color.HanPurple, LuoPuu);
106        ruudut.SetTileMethod(Color.Black, LuoMulta);
107        ruudut.SetTileMethod(Color.Orange, LuoPelaaja);
108        ruudut.SetTileMethod(Color.Rose, LuoKivi);
109
110        ruudut.SetTileMethod(Color.Gray, LuoKattoKivi1);
111        ruudut.SetTileMethod(Color.BrownGreen, LuoKattoKivi2);
112        ruudut.SetTileMethod(Color.Olive, LuoKattoKivi3);
113        ruudut.SetTileMethod(Color.DarkRed, LuoTakakivi);
114        ruudut.SetTileMethod(Color.ForestGreen, Luoluolakivi1);
115        ruudut.SetTileMethod(Color.DarkGray, Luoluolakivi2);
116        ruudut.SetTileMethod(Color.DarkJungleGreen, Luoluolakivi3);
117        ruudut.SetTileMethod(Color.YellowGreen, LuoBorderwall);
118        ruudut.SetTileMethod(Color.SpringGreen, LuoAmmuslaatikko);
119        Camera.Zoom(1.2);
120
121        ruudut.Execute(45, 45);
122        int pMaxMaara = 200;
123        rajahdys = new ExplosionSystem(LoadImage("Explosion"), pMaxMaara);
124        rajahdys.MaxVelocity = 1;
125        Add(rajahdys);
126        LuoTausta();
127    }
128
129    void LuoAmmuslaatikko(Vector paikka, double leveys, double korkeus)
130    {
131        PhysicsObject ammobox = new PhysicsObject(32, 32);
132        ammobox.Position = paikka;
133        ammobox.Image = ammolaatikko;
134        ammobox.CollisionIgnoreGroup = 0;
135        ammobox.Tag = "Ammo";
136        Add(ammobox, -1);
137    }
138
139    void LuoHPsalkku(Vector paikka, double leveys, double korkeus)
140    {
141        PhysicsObject hpbox = new PhysicsObject(32, 32);
142        hpbox.Position = paikka;
143        hpbox.Image = hpsalkku;
144        hpbox.CollisionIgnoreGroup = 0;
145        hpbox.Tag = "HP";
146        Add(hpbox, -1);
147    }
148
149
150    void Luoluolakivi1(Vector paikka, double leveys, double korkeus)
151    {
152        PhysicsObject luolakivi1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
153        luolakivi1.Position = paikka;
154        luolakivi1.Image = luolakiviblock1;
155        luolakivi1.CollisionIgnoreGroup = 1;
156        luolakivi1.IgnoresCollisionResponse = true;
157        Add(luolakivi1, -1);
158    }
159
160    void LuoBorderwall(Vector paikka, double leveys, double korkeus)
161    {
162        PhysicsObject borderseina = PhysicsObject.CreateStaticObject(leveys, korkeus);
163        borderseina.Position = paikka;
164        borderseina.Image = borderblock;
165        borderseina.CollisionIgnoreGroup = 1;
166        Add(borderseina, -1);
167    }
168
169
170
171
172    void Luoluolakivi2(Vector paikka, double leveys, double korkeus)
173    {
174        PhysicsObject luolakivi2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
175        luolakivi2.Position = paikka;
176        luolakivi2.Image = luolakiviblock2;
177        luolakivi2.CollisionIgnoreGroup = 1;
178        luolakivi2.IgnoresCollisionResponse = true;
179        Add(luolakivi2, -1);
180    }
181
182    void Luoluolakivi3(Vector paikka, double leveys, double korkeus)
183    {
184        PhysicsObject luolakivi3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
185        luolakivi3.Position = paikka;
186        luolakivi3.Image = luolakiviblock3;
187        luolakivi3.CollisionIgnoreGroup = 1;
188        luolakivi3.IgnoresCollisionResponse = true;
189        Add(luolakivi3, -1);
190    }
191
192
193    void LuoKattoKivi1(Vector paikka, double leveys, double korkeus)
194    {
195        PhysicsObject kattokivi1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
196        kattokivi1.Position = paikka;
197        kattokivi1.Image = kattokivi1block;
198        kattokivi1.CollisionIgnoreGroup = 1;
199        kattokivi1.IgnoresCollisionResponse = true;
200        Add(kattokivi1, -1);
201    }
202
203    void LuoKattoKivi2(Vector paikka, double leveys, double korkeus)
204    {
205        PhysicsObject kattokivi2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
206        kattokivi2.Position = paikka;
207        kattokivi2.Image = kattokivi2block;
208        kattokivi2.CollisionIgnoreGroup = 1;
209        kattokivi2.IgnoresCollisionResponse = true;
210        Add(kattokivi2, -1);
211    }
212
213    void LuoKattoKivi3(Vector paikka, double leveys, double korkeus)
214    {
215        PhysicsObject kattokivi3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
216        kattokivi3.Position = paikka;
217        kattokivi3.Image = kattokivi3block;
218        kattokivi3.CollisionIgnoreGroup = 1;
219        kattokivi3.IgnoresCollisionResponse = true;
220        Add(kattokivi3, -1);
221    }
222
223
224
225    void LuoKivi(Vector paikka, double leveys, double korkeus)
226    {
227
228        PhysicsObject kivi = PhysicsObject.CreateStaticObject(leveys, korkeus);
229        kivi.Position = paikka;
230        kivi.Image = kiviblock;
231        kivi.CollisionIgnoreGroup = 1;
232        Add(kivi);
233
234    }
235
236    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
237    {
238        hahmo = new PlatformCharacter(48, 48);
239        hahmo.AnimWalk = new Animation(hahmojuoksu);
240        hahmo.AnimWalk.FPS = 10;
241        hahmo.AnimIdle = new Animation(hahmostand);
242        hahmo.AnimJump = new Animation(hahmojump);
243        hahmo.AnimFall = new Animation(hahmofall);
244        hahmo.Weapon = new LaserGun(30, 30);
245        hahmo.Weapon.Ammo.Value = 30;
246        hahmo.Weapon.Image = null;
247        hahmo.Weapon.Color = Color.Transparent;
248        hahmo.Weapon.Power.DefaultValue = 1000;
249        hahmo.Weapon.CanHitOwner = false;
250        AddCollisionHandler<PlatformCharacter, PhysicsObject>(hahmo, "Ammo", Ammuksia);
251        AddCollisionHandler<PlatformCharacter, PhysicsObject>(hahmo, "HP", Hpta);
252
253        Image[] hahmodmg = LoadImages("CharHit", "CharHit2", "CharHit3");
254        hahmoosuma = new Animation(hahmodmg);
255        Add(hahmo);
256        hahmo.Position = paikka;
257        Gravity = new Vector(0.0, -1000.0);
258        Ohjaus();
259        Camera.Follow(hahmo);
260    }
261
262    void Hpta(PlatformCharacter hahmo, PhysicsObject hpbox)
263    {
264        hpbox.Destroy();
265
266        elamaLaskuri.Value += 2;
267    }
268
269    void Ammuksia(PlatformCharacter hahmo, PhysicsObject ammobox)
270    {
271        ammobox.Destroy();
272        hahmo.Weapon.Ammo.Value += 20;
273        ammuslaskuri.Value += 20;
274    }
275
276    void LuoMulta(Vector paikka, double leveys, double korkeus)
277    {
278        PhysicsObject multa = PhysicsObject.CreateStaticObject(leveys, korkeus);
279        multa.Position = paikka;
280        multa.Image = multablock;
281        multa.CollisionIgnoreGroup = 1;
282        Add(multa);
283
284
285
286    }
287
288    void LuoRuoho(Vector paikka, double leveys, double korkeus)
289    {
290        PhysicsObject ruoho = PhysicsObject.CreateStaticObject(leveys, korkeus);
291        ruoho.Position = paikka;
292        ruoho.Image = ruohoblock;
293        ruoho.CollisionIgnoreGroup = 1;
294        Add(ruoho);
295    }
296
297    void LuoPuu(Vector paikka, double leveys, double korkeus)
298    {
299        GameObject puu = new GameObject(leveys, korkeus);
300        puu.Position = paikka;
301        puu.Image = puublock;
302        Add(puu, -1);
303    }
304
305    void LuoLehdet(Vector paikka, double leveys, double korkeus)
306    {
307        GameObject lehdet = new GameObject(leveys, korkeus);
308        lehdet.Position = paikka;
309        lehdet.Image = lehdetblock;
310        Add(lehdet, -1);
311    }
312
313    void LuoVesi(Vector paikka, double leveys, double korkeus)
314    {
315        GameObject vesi = new GameObject(leveys, korkeus);
316        vesi.Position = paikka;
317        vesi.Image = vesiblock;
318        Add(vesi, -1);
319    }
320
321    void LuoTakakivi(Vector paikka, double leveys, double korkeus)
322    {
323        GameObject takakivi = new GameObject(leveys, korkeus);
324        takakivi.Position = paikka;
325        takakivi.Image = takakiviblock;
326        Add(takakivi, -1);
327    }
328
329    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
330    {
331        Vihuclass lentava = new Vihuclass(50, 50);
332        lentava.Position = paikka;
333        lentava.Shape = Shape.Circle;
334        FollowerBrain seuraajanAivot1 = new FollowerBrain(hahmo);
335        seuraajanAivot1.Speed = 100;
336        lentava.IgnoresGravity = true;
337        seuraajanAivot1.DistanceFar = 500;
338        seuraajanAivot1.DistanceClose = 100;
339        seuraajanAivot1.StopWhenTargetClose = true;
340        //seuraajanAivot1.TargetClose += vihulahella;
341        lentava.Animation = new Animation(flyer);
342        lentava.Animation.Start();
343        lentava.Animation.FPS = 10;
344        lentava.CanRotate = false;
345        lentava.Brain = seuraajanAivot1;
346        LaserGun lentavagun = new LaserGun(10, 10);
347        lentavagun.Ammo.Value = 10000;
348        //lentavagun.ProjectileCollision = AmmusOsui;
349        lentavagun.Image = null;
350        lentavagun.Color = Color.Transparent;
351        lentava.Tag = "vihollinen";
352        lentava.Destroyed += delegate { vihollinen1tuhottu(lentava); };
353        lentava.Destroyed += delegate { if (RandomGen.NextBool()) LuoHPsalkku(lentava.Position, leveys, korkeus); };
354
355        lentava.Add(lentavagun);
356
357        Timer ajastin = new Timer();
358        ajastin.Interval = 2.0;
359        ajastin.Timeout += delegate { VihollinenAmpuu(lentava, lentavagun, ajastin); };
360        ajastin.Start();
361        Add(lentava);
362    }
363   
364    void vihollinen1tuhottu(Vihuclass paikka)
365    {
366        int pMaara = 50;
367        rajahdys.AddEffect(paikka.Position, pMaara);
368    }
369
370    void AmmusViholliseen(PhysicsObject ammus, Vihuclass lentava)
371    {
372        lentava.Hitpoints.Value -= 1;
373        //pisteet.value += 1;
374
375    }
376
377    void AmmusPelaajaan(PhysicsObject ammus2, PlatformCharacter hahmo)
378    {
379        elamaLaskuri.Value -= 1;
380        hahmo.PlayAnimation(hahmoosuma);
381        //hahmo.PlayAnimation(...);
382    }
383
384
385    void VihollinenAmpuu(PhysicsObject lentava, LaserGun lentavagun, Timer ajastin)
386    {
387        if (lentava.IsDestroyed == true)
388        {
389            ajastin.Stop();
390            return;
391        }
392
393        Vector suunta = (hahmo.Position - lentava.Position);
394        if (suunta.Magnitude < 600)
395        {
396            lentavagun.Angle = suunta.Angle;
397            PhysicsObject ammus2 = lentavagun.Shoot();
398
399            if (ammus2 != null)
400            {
401                ammus2.Shape = Shape.Circle;
402                ammus2.Size = new Vector(10, 10);
403                ammus2.Image = panos2;
404                AddCollisionHandler(ammus2, CollisionHandler.DestroyObject);
405                AddCollisionHandler(ammus2, hahmo, AmmusPelaajaan);
406
407
408
409            }
410        }
411    }
412
413
414
415
416
417
418    void Ohjaus()
419    {
420        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaHahmoa, "Pelaaja liiku vasemmalle", -400.0);
421        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaHahmoa, "Pelaaja liiku oikealle", 400.0);
422        Keyboard.Listen(Key.Space, ButtonState.Pressed, hyppy, "Pelaaja hyppää", 650.0);
423        Keyboard.Listen(Key.A, ButtonState.Pressed, AmmuAseella, "Ammu", hahmo);
424    }
425
426    void LiikutaHahmoa(double vektori)
427    {
428        hahmo.Walk(vektori);
429    }
430
431    void hyppy(double hyppyvoima)
432    {
433        hahmo.Jump(hyppyvoima);
434    }
435
436    void AmmuAseella(PlatformCharacter hahmo)
437    {
438        PhysicsObject ammus = hahmo.Weapon.Shoot();
439        hahmo.PlayAnimation(tahtaa);
440        //hahmo.Animation = new Animation(tahtaa);
441        //hahmo.Animation.Start(1);
442        ammuslaskuri.Value -= 1;
443
444        if (ammus != null)
445        {
446            ammus.Shape = Shape.Circle;
447            ammus.Size = new Vector(10, 10);
448            ammus.Image = panos;
449            AddCollisionHandler(ammus, CollisionHandler.DestroyObject);
450            AddCollisionHandler<PhysicsObject, Vihuclass>(ammus, "vihollinen", AmmusViholliseen);
451
452        }
453    }
454
455    void LuoElamaLaskuri()
456    {
457        elamaLaskuri = new DoubleMeter(6);
458        elamaLaskuri.MaxValue = 6;
459        elamaLaskuri.LowerLimit += ElamaLoppui;
460
461        ProgressBar elamaPalkki = new ProgressBar(140, 40);
462        elamaPalkki.X = Screen.Left + 88;
463        elamaPalkki.Y = Screen.Top - 100;
464        elamaPalkki.BindTo(elamaLaskuri);
465        elamaPalkki.Image = LoadImage("HPbarEmpty");
466        elamaPalkki.BarImage = LoadImage("HPbarFull");
467        Add(elamaPalkki);
468    }
469
470    void ElamaLoppui()
471    {
472        MessageDisplay.Add("You were destroyed. Game Over.");
473        int pMaara = 50;
474        rajahdys.AddEffect(hahmo.Position, pMaara);
475    }
476
477
478    void Luoammustenmaara()
479    {
480        Label ammustenmaara = new Label();
481        ammustenmaara.X = Screen.Left + 100;
482        ammustenmaara.Y = Screen.Top - 70;
483        ammustenmaara.TextColor = Color.White;
484        ammustenmaara.Color = Color.Black;
485        ammustenmaara.BindTo(ammuslaskuri);
486        ammustenmaara.Title = "Ammunition";
487        Add(ammustenmaara);
488    }
489}
Note: See TracBrowser for help on using the repository browser.