source: 2010/30/aneesavi/Cyb0rg-City/Peli.cs @ 1419

Revision 1419, 6.4 KB checked in by aneesavi, 10 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Widgets;
5using Jypeli.Assets;
6using Jypeli.Effects;
7
8
9
10class Tasohyppely : PhysicsGame
11{
12    const double nopeus = 500;
13    const double hyppyVoima = 4000;
14    DoubleMeter energiaMittari;
15
16    PlatformCharacter pelaaja1;
17    Image seppo = LoadImage("Seppo");
18    PlatformCharacter vihollinen;
19    Image Evil = LoadImage("Evil");
20    Image Ase1 = LoadImage("Ase1");
21    const int ruudunLeveys = 50;
22    const int ruudunKorkeus = 50;
23
24    List<PlatformCharacter> viholliset;
25    ExplosionSystem rajahdys;
26
27    protected override void Begin()
28    {
29        viholliset = new List<PlatformCharacter>();
30        rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 200);
31        Add(rajahdys);
32
33        Gravity = new Vector(0, -1000);
34
35        luoKentta();
36        lisaaNappaimet();
37        LisaaVihollisenEnergiapalkki();
38
39        Camera.Follow(pelaaja1);
40        Camera.ZoomFactor = 1.0;
41        //Camera.StayInLevel = true;
42    }
43
44    void luoKentta()
45    {
46        TileMap ruudut = TileMap.FromFile("kentta.txt");
47        ruudut['='] = LuoPalikka;
48        ruudut['1'] = LuoPelaaja;
49        ruudut['x'] = LuoLaakepaketti;
50        ruudut['2'] = Luovihollinen;
51        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
52    }
53
54    PhysicsObject LuoPalikka()
55    {
56        PhysicsObject palikka = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
57        return palikka;
58    }
59
60    PhysicsObject LuoLaakepaketti()
61    {
62        // tämä aliohjelma ei ole vielä valmis...
63        PhysicsObject laakepaketti = new PhysicsObject(50, 50);
64        return laakepaketti;
65    }
66
67
68    PhysicsObject LuoPelaaja()
69    {
70        pelaaja1 = new PlatformCharacter(125, 125);
71        pelaaja1.Mass = 4.0;
72        pelaaja1.Image = seppo;
73        pelaaja1.LeftWalkingAnimation = new Animation(Image.Mirror(seppo));
74        pelaaja1.RightWalkingAnimation = new Animation(seppo);
75        pelaaja1.Weapon = new AssaultRifle(150, 50);
76        pelaaja1.Weapon.Size = new Vector(230, 100);
77        pelaaja1.Weapon.Image = Ase1;
78        return pelaaja1;
79    }
80
81    void lisaaNappaimet()
82    {
83        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
84        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
85
86        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
87        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
88        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
89        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu");
90
91        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
92
93        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
94        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
95        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
96    }
97
98    void Ammu()
99    {
100        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
101        if (ammus != null)
102        {
103            ammus.Size *= 6;
104            ammus.Velocity *= 4;
105            rajahdys.MinLifetime = 0.1;
106            rajahdys.MaxLifetime = 0.2;
107            rajahdys.MinVelocity = 1;
108            rajahdys.MaxVelocity = 100;
109            rajahdys.MinScale = 0.05;
110            rajahdys.MaxScale = 0.1;
111
112            double x = ammus.X;
113            if (pelaaja1.FacingDirection == Direction.Left)
114            {
115                x -= 60;
116            }
117
118            if (pelaaja1.FacingDirection == Direction.Right)
119            {
120                x += 60;
121            }
122
123            rajahdys.AddEffect(x, ammus.Y, 20);
124
125            AddCollisionHandler(ammus, AmmusOsui);
126        }
127    }
128
129    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
130    {
131        if (kohde == vihollinen)
132        {
133            VahennaVihollisenVoimia();
134        }
135    }
136
137    void liikuta(PlatformCharacter hahmo, double nopeus)
138    {
139        hahmo.Walk(nopeus);
140        if (nopeus < 0)
141        {
142            hahmo.Weapon.Image = Image.Flip(Ase1);
143        }
144        else
145            hahmo.Weapon.Image = Ase1;
146
147    }
148
149    void hyppaa(PlatformCharacter hahmo, double voima)
150    {
151        hahmo.Jump(voima);
152    }
153
154    PhysicsObject Luovihollinen()
155    {
156        vihollinen = new PlatformCharacter(200, 200, Shapes.Circle);
157        vihollinen.Mass = 2.0;
158        vihollinen.Image = Evil;
159        vihollinen.LeftWalkingAnimation = new Animation(Image.Mirror(Evil));
160        vihollinen.RightWalkingAnimation = new Animation(Evil);
161        viholliset.Add(vihollinen);
162        return vihollinen;
163    }
164
165    protected override void Update(Time time)
166    {
167        base.Update(time);
168        foreach (PlatformCharacter vihollinen in viholliset)
169        {
170            if (pelaaja1.X < vihollinen.X)
171            {
172                vihollinen.Walk(-200);
173            }
174
175            if (pelaaja1.X > vihollinen.X)
176            {
177                vihollinen.Walk(200);
178            }
179        }
180    }
181
182
183    void LisaaVihollisenEnergiapalkki()
184    {
185        energiaMittari = new DoubleMeter(5);
186        energiaMittari.MaxValue = 5;
187        energiaMittari.MinValue = 0;
188        BarGauge voimaPalkki = new BarGauge(20, 150);
189        voimaPalkki.BindTo(energiaMittari);
190        Add(voimaPalkki);
191
192        voimaPalkki.X = (0.8 * Screen.RightSafe);
193        voimaPalkki.Y = (0.8 * Screen.TopSafe);
194        voimaPalkki.BarColor = Color.Green;
195        voimaPalkki.BorderColor = Color.Red;
196        voimaPalkki.Angle = Angle.Degrees(90);
197
198        // Kun voima loppuu, kutsutaan VoimaLoppui-aliohjelmaa
199        energiaMittari.LowerLimit += VihollinenKuolee;
200    }
201
202    void VahennaVihollisenVoimia()
203    {
204        energiaMittari.Value--;
205    }
206
207    void VihollinenKuolee(double mittarinArvo)
208    {
209        MessageDisplay.Add("Vihollinen kuoli");
210        rajahdys.MinScale = 0.2;
211        rajahdys.MaxScale = 1;
212        rajahdys.MinLifetime = 0.2;
213        rajahdys.MaxLifetime = 1.5;
214        rajahdys.MinVelocity = 100;
215        rajahdys.MaxVelocity = 400;
216        rajahdys.AddEffect(vihollinen.X, vihollinen.Y, 100);
217        vihollinen.Destroy();
218       
219    }
220}
Note: See TracBrowser for help on using the repository browser.