source: 2010/24/arhetaka/AcesHigh/AcesHigh/Peli.cs @ 1244

Revision 1244, 13.5 KB checked in by arhetaka, 10 years ago (diff)

valmis?

Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.ScreenObjects;
5using Jypeli.Assets;
6using Jypeli.Effects;
7
8public class Peli : PhysicsGame
9{
10    PhysicsObject kone1;
11    PhysicsObject kone2;
12    ExplosionSystem systeemi;
13    ExplosionSystem pomminsysteemi;
14
15    PhysicsObject kone1pommi = new PhysicsObject(24, 8);
16    PhysicsObject kone2pommi = new PhysicsObject(24, 8);
17
18    int Pelaaja1NosteenSuunta = 1;
19    int Pelaaja2NosteenSuunta = 1;
20
21    Animation kone1_kaantyy_animation;
22    Animation kone2_kaantyy_animation;
23
24    SoundEffect PommiAani;
25    SoundEffect VihellysAani;
26    SoundEffect kk;
27    SoundEffect kk_osuma;
28
29    Sound viheltaa;
30
31    protected override void Begin()
32    {
33        LuoKentta(); 
34    }
35
36    void LuoKentta()
37    {
38        Level.BackgroundColor = Color.LightBlue;
39        Gravity = new Vector(0.0, -150.0);
40        Level.Height = Screen.Height;
41        Level.Width = 5000;
42        Level.CreateBorders();       
43        Level.CreateBottomBorder();
44        Level.Background.CreateGradient(Color.White, Color.Blue);
45        Level.CreateGround(100, 200, 50, Color.Green);
46       
47        kone1 = TeeLentokone(true);
48        kone1.Image = LoadImage("kone1");
49        kone1.Tag = "kone1";
50        kone1.X = -100;
51        AddCollisionHandler(kone1, kone1osuu);
52        Add(kone1);
53        //Camera.FollowedObject = kone1.;
54       
55        /*
56        kone2 = TeeLentokone(true);
57        kone2.Image = LoadImage("kone2");
58        kone2.Tag = "kone2";
59
60        kone2.X = 100;
61        Add(kone2);
62        */
63        Image[] kone1_kaantyy_kuvat = LoadImages("kone1_nurin", "kone1_nurin_2", "kone1_nurin_3", "kone1_nurin_4", "kone1");
64        kone1_kaantyy_animation = new Animation(kone1_kaantyy_kuvat);
65
66        Image[] kone2_kaantyy_kuvat = LoadImages("kone2_nurin", "kone2_nurin_2", "kone2_nurin_3", "kone2_nurin_4", "kone2");
67        kone2_kaantyy_animation = new Animation(kone2_kaantyy_kuvat);
68
69
70        TeeOhjaimet();
71
72        Camera.StayInLevel = true;
73
74
75        systeemi = new ExplosionSystem(LoadImage("rajahdys"), 100, false);
76        systeemi.MaxScale = 0.3;
77        systeemi.MinScale = 0.1;
78        systeemi.MaxLifetime = 0.1;
79        systeemi.MinLifetime = 0.08;
80        Add(systeemi);
81
82        pomminsysteemi = new ExplosionSystem(LoadImage("rajahdys"), 100, false);
83        pomminsysteemi.MaxScale = 0.5;
84        pomminsysteemi.MinScale = 0.3;
85        pomminsysteemi.MaxLifetime = 0.3;
86        pomminsysteemi.MinLifetime = 0.08;
87        Add(pomminsysteemi);
88
89        for (int a = 0; a < 10; a++)
90        {
91            LuoVihollinen(RandomGen.NextInt(2));
92        }
93         PommiAani = LoadSoundEffect("rajahdys_aani");
94         VihellysAani = LoadSoundEffect("viheltaa");
95         kk = LoadSoundEffect("kk");
96         kk_osuma = LoadSoundEffect("kk_osuu");
97    }
98    PhysicsObject TeeLentokone(bool ihminen)
99    {
100        PhysicsObject kone = new PhysicsObject(30, 30);
101        kone.Color = Color.Black;
102        kone.IgnoresGravity = false;
103        kone.LinearDamping = 0.985;
104        return kone;
105    }
106
107    void TeeOhjaimet()
108    {
109        //pelaaja 1
110        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, kone1);
111        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaPelaajaa, null, kone1, -2);
112        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaPelaajaa, null, kone1, 2);
113        Keyboard.Listen(Key.Right, ButtonState.Up, KaannaPelaajaa, null, kone1, 0);
114        Keyboard.Listen(Key.Left, ButtonState.Up, KaannaPelaajaa, null, kone1, 0);
115        Keyboard.Listen(Key.Down, ButtonState.Pressed, PyoritaPelaajaa, null, kone1);
116        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, null, kone1, 1);
117        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Pommita, null, kone1);
118       
119
120        //pelaaja 2
121        /*
122        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, kone2);
123        Keyboard.Listen(Key.D, ButtonState.Down, KaannaPelaajaa, null, kone2, -1);
124        Keyboard.Listen(Key.A, ButtonState.Down, KaannaPelaajaa, null, kone2, 1);
125        Keyboard.Listen(Key.D, ButtonState.Up, KaannaPelaajaa, null, kone2, 0);
126        Keyboard.Listen(Key.A, ButtonState.Up, KaannaPelaajaa, null, kone2, 0);
127        Keyboard.Listen(Key.S, ButtonState.Pressed, PyoritaPelaajaa, null, kone2);
128        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, null, kone2, 1);*/
129    }
130
131    void LiikutaPelaajaa(PhysicsObject pelaaja)
132    {
133        pelaaja.Push(Vector.FromLengthAndAngle(300, pelaaja.Angle));
134    }
135    void KaannaPelaajaa(PhysicsObject pelaaja, int nopeus) //pitäisikö riippua nopeudesta?
136    {
137        pelaaja.AngularVelocity = nopeus;
138    }
139 
140    void PaivitaKoneenNoste(PhysicsObject kone)
141    {
142        Vector KoneenNokanSuunta = Vector.FromLengthAndAngle(1, kone.Angle);
143        Vector KoneenNopeusEteen = kone.Velocity.Project(KoneenNokanSuunta);
144        if (KoneenNopeusEteen.Magnitude != 0)
145        {
146            if ((kone.Velocity.Magnitude / KoneenNopeusEteen.Magnitude / 100) < 0.05)
147            {
148                kone.LinearDamping = 1 - (kone.Velocity.Magnitude / KoneenNopeusEteen.Magnitude / 200);
149            }
150        }
151        if (kone.Tag == "kone1")
152        {
153            kone.Push(Vector.FromLengthAndAngle((KoneenNopeusEteen.Magnitude / 2), (kone.Angle + Angle.RightAngle) * Pelaaja1NosteenSuunta));
154        }
155        else
156        {
157            kone.Push(Vector.FromLengthAndAngle((KoneenNopeusEteen.Magnitude / 2), (kone.Angle + Angle.RightAngle) * Pelaaja2NosteenSuunta));
158        }
159        kone.Push(Vector.FromLengthAndAngle(10, kone.Angle)); //tyhjäkäynti
160    }
161
162    void PaivitaPainotus(PhysicsObject kone)
163    {
164        Vector KoneenNokanSuunta = Vector.FromLengthAndAngle(1, kone.Angle);
165        if (kone.Angle > Angle.Degrees(-90) && kone.Angle < Angle.Degrees(90))
166        {
167            Double kulmanopeus = kone.Angle.Degree;
168            if (kulmanopeus < 0)
169            {
170                kulmanopeus = kulmanopeus * -1;
171            }
172            kulmanopeus = 100 - kulmanopeus;
173            kulmanopeus = kulmanopeus / 100;
174            kone.AngularVelocity -= kulmanopeus;
175        }
176        else 
177        {
178            Double kulmanopeus = kone.Angle.Degree;
179            if (kulmanopeus > 90)
180            {
181                kulmanopeus = 180 - kulmanopeus;
182            }
183            else
184            {
185                kulmanopeus = kulmanopeus * -1;
186                kulmanopeus = 180 - kulmanopeus;
187            }
188            kulmanopeus = 100 - kulmanopeus;
189            kulmanopeus = kulmanopeus / 100;           
190            kone.AngularVelocity += kulmanopeus;
191        }
192
193    }
194
195    void kone1osuu(PhysicsObject kone, PhysicsObject kohde)
196    {
197        if (kohde.Tag == "pommi1")
198        {
199           
200
201        }
202    }
203
204    void PyoritaPelaajaa(PhysicsObject pelaaja)
205    {
206        if (pelaaja.Tag == "kone1")
207        {
208            Pelaaja1NosteenSuunta = Pelaaja1NosteenSuunta * -1;
209            if (Pelaaja1NosteenSuunta == -1)
210            {
211                Animation kone1_kaantyy_reverse_animation = Animation.Flip(kone1_kaantyy_animation);
212                kone1.Animation = kone1_kaantyy_reverse_animation;               
213                kone1.Animation.FPS = 6;
214                kone1.Animation.StopOnLastFrame = true;
215                kone1.Animation.Start(1);           
216            }
217            else
218            {               
219                kone1.Animation = kone1_kaantyy_animation;           
220                kone1.Animation.FPS = 6;
221                kone1.Animation.StopOnLastFrame = true;
222                kone1.Animation.Start(1);               
223            }
224        }
225        else
226        {
227            Pelaaja2NosteenSuunta = Pelaaja2NosteenSuunta * -1;
228            if (Pelaaja2NosteenSuunta == -1)
229            {
230                Animation kone2_kaantyy_reverse_animation = Animation.Flip(kone2_kaantyy_animation);
231                kone2.Animation = kone2_kaantyy_reverse_animation;
232                kone2.Animation.FPS = 6;
233                kone2.Animation.StopOnLastFrame = true;
234                kone2.Animation.Start(1);
235            }
236            else
237            {
238                kone2.Animation = kone2_kaantyy_animation;
239                kone2.Animation.FPS = 6;
240                kone2.Animation.StopOnLastFrame = true;
241                kone2.Animation.Start(1);
242            }
243        }
244
245    }
246    void Ammu(PhysicsObject kone, int nopeus)
247    {
248        kk.Play();
249        PhysicsObject ammus = new PhysicsObject(4, 4);
250        ammus.Shape = Shapes.Circle;
251        ammus.Color = Color.Yellow;
252        ammus.X = kone.X;
253        ammus.Y = kone.Y;
254        ammus.Mass = 5;
255        ammus.IgnoresCollisionResponse = false;
256        ammus.IgnoresExplosions = true;
257        TimeSpan elinaika = new TimeSpan(15000000);
258        ammus.MaximumLifetime = elinaika;
259        ammus.Tag = kone.Tag + "ammus";
260        AddCollisionHandler(ammus, AmmusOsuu);
261        Add(ammus);
262        Angle koneenKulma = kone.Angle;
263        Vector KoneenNokanSuunta = Vector.FromLengthAndAngle(1, kone.Angle);
264        Vector KoneenNopeusEteen = kone.Velocity.Project(KoneenNokanSuunta);
265        Vector impulssi = Vector.FromLengthAndAngle(KoneenNopeusEteen.Magnitude * 5  + 2500, koneenKulma);
266        ammus.Hit(impulssi);
267    }
268    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
269    {
270        Osuma(ammus, kohde);
271        kk_osuma.Play();
272        if (kohde.Tag != "kone1")
273        {
274            systeemi.AddEffect(ammus.X, ammus.Y, 5);
275            ammus.Destroy();
276        }
277    }
278    void Osuma(PhysicsObject ammus, PhysicsObject kohde)
279    {
280        if (kohde.Tag != "" && ammus.Tag != "")
281        {
282            string ampuja = ammus.Tag.ToString();
283            string uhri = kohde.Tag.ToString();
284            if (kohde.Tag == "viho_aija" || kohde.Tag == "viho_tankki")
285            {
286
287                if (ammus.Tag == "pommi1")
288                {
289                    kohde.MaximumLifetime = TimeSpan.FromMilliseconds(RandomGen.NextDouble(500, 2000)) + kohde.Lifetime;
290                }
291                else if (kohde.Tag != "viho_tankki")
292                {
293                    kohde.MaximumLifetime = TimeSpan.FromMilliseconds(RandomGen.NextDouble(500, 2000)) + kohde.Lifetime;
294                }
295            }
296            else
297            {
298                if (ampuja[4] != uhri[4] && kohde.Tag != "ajopiste")
299                {
300                    systeemi.AddEffect(ammus.X, ammus.Y, 5);
301                    ammus.Destroy();
302                }
303            }
304        }
305    }
306   
307    void LuoVihollinen(int tyyppi)
308    {
309        PhysicsObject vihollinen = new PhysicsObject(30,30);
310       
311        if (tyyppi == 1)
312        {
313
314            vihollinen.Mass = 100;
315            vihollinen.Image = LoadImage("vih_aija");
316            vihollinen.Tag = "viho_aija";
317        }
318        else
319        {
320            vihollinen.Mass = 1000000;
321            vihollinen.LinearDamping = 1;
322            vihollinen.Width = 60;
323            vihollinen.Height = 60;
324            vihollinen.Image = LoadImage("vih_tankki");
325            vihollinen.Tag = "viho_tankki";
326        }
327        vihollinen.Shape = Shapes.Triangle;
328        vihollinen.KineticFriction = 1;
329        vihollinen.Mass = 1;
330        vihollinen.X = RandomGen.NextDouble(Level.Left + 20, Level.Right - 20);
331        vihollinen.Y = Level.Bottom + 200;
332        vihollinen.AngularDamping = 1;
333        Add(vihollinen);
334    }
335    void Pommita(PhysicsObject kone)
336    {
337        if (!kone1pommi.IsAddedToGame)
338        {
339           
340            viheltaa = VihellysAani.CreateSound();
341            viheltaa.Pitch = -0.99;
342            viheltaa.IsLooped = true;
343            viheltaa.Play();
344            kone1pommi = new PhysicsObject(12, 4);
345            kone1pommi.X = kone.X;
346            kone1pommi.Y = kone.Y;
347            kone1pommi.Tag = "pommi1";
348            kone1pommi.Velocity = kone.Velocity;
349            kone1pommi.Angle = kone.Angle;
350            kone1pommi.Image = LoadImage("pommi");
351            kone1pommi.IgnoresCollisionResponse = true;
352            kone1pommi.LinearDamping = 0.999;
353            kone1pommi.AngularDamping = 0.99;
354            Timer ajastin = new Timer();
355            ajastin.Tag = kone1pommi;
356            ajastin.Interval = 0.2;
357            ajastin.Trigger += PommiVirittyy;
358            Add(ajastin);
359            ajastin.Start();
360            AddCollisionHandler(kone1pommi, PommiOsuu);
361            Add(kone1pommi);
362        }
363    }
364    void PommiVirittyy(Timer sender)
365    {
366        PhysicsObject pommi = (PhysicsObject)sender.Tag;
367        pommi.IgnoresCollisionResponse = false;
368    }
369
370    void PommiOsuu(PhysicsObject pommi, PhysicsObject kohde)
371    {
372        if (kohde.Tag != "kone1")
373        {
374            viheltaa.Stop();
375            Osuma(pommi, kohde);
376            pomminsysteemi.AddEffect(pommi.X, pommi.Y, 50);
377           
378            PommiAani.Play();
379
380            Remove(pommi);
381        }
382    }
383    void PaivitaPommit()
384    {
385
386    }
387
388    protected override void Update(Time time)
389    {
390        PaivitaKoneenNoste(kone1);
391        PaivitaPainotus(kone1);
392        PaivitaPainotus(kone1pommi);
393        if (kone1pommi.IsAddedToGame)
394        {
395            if (viheltaa.Pitch < 0.97)
396            {
397                viheltaa.Pitch += 0.01;
398            }
399        }
400        //PaivitaKoneenNoste(kone2);
401        Camera.X = kone1.X;
402        base.Update(time);
403    }
404
405}
Note: See TracBrowser for help on using the repository browser.