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

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