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

Revision 1204, 12.4 KB checked in by arhetaka, 10 years ago (diff)

aceshigh ehkä toimii

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    protected override void Begin()
25    {
26        LuoKentta();       
27    }
28
29    void LuoKentta()
30    {
31        Level.BackgroundColor = Color.LightBlue;
32        Gravity = new Vector(0.0, -150.0);
33        Level.Height = Screen.Height;
34        Level.Width = 5000;
35        Level.CreateBorders();       
36        Level.CreateBottomBorder();
37        Level.Background.CreateGradient(Color.White, Color.Blue);
38        Level.CreateGround(100, 200, 50, Color.Green);
39        /*
40        PhysicsObject maa = PhysicsObject.CreateStaticObject(Level.Width, 50);
41        //maa.CollisionIgnorer.
42        maa.Color = Color.Green;
43        maa.Tag = "maailma";
44        maa.Y = Level.Bottom;       
45        Add(maa);*/
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
94    }
95    PhysicsObject TeeLentokone(bool ihminen)
96    {
97        PhysicsObject kone = new PhysicsObject(30, 30);
98        kone.Color = Color.Black;
99        kone.IgnoresGravity = false;
100        kone.LinearDamping = 0.985;
101        return kone;
102    }
103
104    void TeeOhjaimet()
105    {
106        //pelaaja 1
107        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, kone1);
108        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaPelaajaa, null, kone1, -2);
109        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaPelaajaa, null, kone1, 2);
110        Keyboard.Listen(Key.Right, ButtonState.Up, KaannaPelaajaa, null, kone1, 0);
111        Keyboard.Listen(Key.Left, ButtonState.Up, KaannaPelaajaa, null, kone1, 0);
112        Keyboard.Listen(Key.Down, ButtonState.Pressed, PyoritaPelaajaa, null, kone1);
113        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, null, kone1, 1);
114        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Pommita, null, kone1);
115       
116
117        //pelaaja 2
118        /*
119        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, kone2);
120        Keyboard.Listen(Key.D, ButtonState.Down, KaannaPelaajaa, null, kone2, -1);
121        Keyboard.Listen(Key.A, ButtonState.Down, KaannaPelaajaa, null, kone2, 1);
122        Keyboard.Listen(Key.D, ButtonState.Up, KaannaPelaajaa, null, kone2, 0);
123        Keyboard.Listen(Key.A, ButtonState.Up, KaannaPelaajaa, null, kone2, 0);
124        Keyboard.Listen(Key.S, ButtonState.Pressed, PyoritaPelaajaa, null, kone2);
125        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, null, kone2, 1);*/
126    }
127
128    void LiikutaPelaajaa(PhysicsObject pelaaja)
129    {
130        pelaaja.Push(Vector.FromLengthAndAngle(300, pelaaja.Angle));
131    }
132    void KaannaPelaajaa(PhysicsObject pelaaja, int nopeus) //pitäisikö riippua nopeudesta?
133    {
134        pelaaja.AngularVelocity = nopeus;
135    }
136 
137    void PaivitaKoneenNoste(PhysicsObject kone)
138    {
139        Vector KoneenNokanSuunta = Vector.FromLengthAndAngle(1, kone.Angle);
140        Vector KoneenNopeusEteen = kone.Velocity.Project(KoneenNokanSuunta);
141        if (KoneenNopeusEteen.Magnitude != 0)
142        {
143            if ((kone.Velocity.Magnitude / KoneenNopeusEteen.Magnitude / 100) < 0.05)
144            {
145                kone.LinearDamping = 1 - (kone.Velocity.Magnitude / KoneenNopeusEteen.Magnitude / 200);
146            }
147        }
148        if (kone.Tag == "kone1")
149        {
150            kone.Push(Vector.FromLengthAndAngle((KoneenNopeusEteen.Magnitude / 2), (kone.Angle + Angle.RightAngle) * Pelaaja1NosteenSuunta));
151        }
152        else
153        {
154            kone.Push(Vector.FromLengthAndAngle((KoneenNopeusEteen.Magnitude / 2), (kone.Angle + Angle.RightAngle) * Pelaaja2NosteenSuunta));
155        }
156        kone.Push(Vector.FromLengthAndAngle(10, kone.Angle)); //tyhjäkäynti
157    }
158
159    void PaivitaPainotus(PhysicsObject kone)
160    {
161        Vector KoneenNokanSuunta = Vector.FromLengthAndAngle(1, kone.Angle);
162        if (kone.Angle > Angle.Degrees(-90) && kone.Angle < Angle.Degrees(90))
163        {
164            Double kulmanopeus = kone.Angle.Degree;
165            if (kulmanopeus < 0)
166            {
167                kulmanopeus = kulmanopeus * -1;
168            }
169            kulmanopeus = 100 - kulmanopeus;
170            kulmanopeus = kulmanopeus / 100;
171            kone.AngularVelocity -= kulmanopeus;
172        }
173        else 
174        {
175            Double kulmanopeus = kone.Angle.Degree;
176            if (kulmanopeus > 90)
177            {
178                kulmanopeus = 180 - kulmanopeus;
179            }
180            else
181            {
182                kulmanopeus = kulmanopeus * -1;
183                kulmanopeus = 180 - kulmanopeus;
184            }
185            kulmanopeus = 100 - kulmanopeus;
186            kulmanopeus = kulmanopeus / 100;           
187            kone.AngularVelocity += kulmanopeus;
188        }
189
190    }
191
192    void kone1osuu(PhysicsObject kone, PhysicsObject kohde)
193    {
194        if (kohde.Tag == "pommi1")
195        {
196           
197
198        }
199    }
200
201    void PyoritaPelaajaa(PhysicsObject pelaaja)
202    {
203        if (pelaaja.Tag == "kone1")
204        {
205            Pelaaja1NosteenSuunta = Pelaaja1NosteenSuunta * -1;
206            if (Pelaaja1NosteenSuunta == -1)
207            {
208                Animation kone1_kaantyy_reverse_animation = Animation.Flip(kone1_kaantyy_animation);
209                kone1.Animation = kone1_kaantyy_reverse_animation;               
210                kone1.Animation.FPS = 6;
211                kone1.Animation.StopOnLastFrame = true;
212                kone1.Animation.Start(1);           
213            }
214            else
215            {               
216                kone1.Animation = kone1_kaantyy_animation;           
217                kone1.Animation.FPS = 6;
218                kone1.Animation.StopOnLastFrame = true;
219                kone1.Animation.Start(1);               
220            }
221        }
222        else
223        {
224            Pelaaja2NosteenSuunta = Pelaaja2NosteenSuunta * -1;
225            if (Pelaaja2NosteenSuunta == -1)
226            {
227                Animation kone2_kaantyy_reverse_animation = Animation.Flip(kone2_kaantyy_animation);
228                kone2.Animation = kone2_kaantyy_reverse_animation;
229                kone2.Animation.FPS = 6;
230                kone2.Animation.StopOnLastFrame = true;
231                kone2.Animation.Start(1);
232            }
233            else
234            {
235                kone2.Animation = kone2_kaantyy_animation;
236                kone2.Animation.FPS = 6;
237                kone2.Animation.StopOnLastFrame = true;
238                kone2.Animation.Start(1);
239            }
240        }
241
242    }
243    void Ammu(PhysicsObject kone, int nopeus)
244    {
245        PhysicsObject ammus = new PhysicsObject(4, 4);
246        ammus.Shape = Shapes.Circle;
247        ammus.Color = Color.Yellow;
248        ammus.X = kone.X;
249        ammus.Y = kone.Y;
250        ammus.Mass = 5;
251        ammus.IgnoresCollisionResponse = false;
252        ammus.IgnoresExplosions = true;
253        TimeSpan elinaika = new TimeSpan(15000000);
254        ammus.MaximumLifetime = elinaika;
255        ammus.Tag = kone.Tag + "ammus";
256        AddCollisionHandler(ammus, AmmusOsuu);
257        Add(ammus);
258        Angle koneenKulma = kone.Angle;
259        Vector KoneenNokanSuunta = Vector.FromLengthAndAngle(1, kone.Angle);
260        Vector KoneenNopeusEteen = kone.Velocity.Project(KoneenNokanSuunta);
261        Vector impulssi = Vector.FromLengthAndAngle(KoneenNopeusEteen.Magnitude * 5  + 2500, koneenKulma);
262        ammus.Hit(impulssi);
263    }
264    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
265    {
266       
267        if (kohde.Tag != "")
268        {
269            string ampuja = ammus.Tag.ToString();
270            string uhri = kohde.Tag.ToString();
271            if (uhri == "viho_aija" || uhri == "viho_tankki")
272            {
273               
274                kohde.MaximumLifetime = TimeSpan.FromMilliseconds(RandomGen.NextDouble(500, 2000))  + kohde.Lifetime;
275                //Remove(kohde);
276            }
277            else
278            {
279                if (ampuja[4] != uhri[4] && kohde.Tag != "ajopiste")
280                {
281                    systeemi.AddEffect(ammus.X, ammus.Y, 5);
282                    ammus.Destroy();
283                }
284            }
285        }
286        if (kohde.Tag != "kone1")
287        {
288            systeemi.AddEffect(ammus.X, ammus.Y, 5);
289            ammus.Destroy();
290        }
291    }
292
293    void LuoVihollinen(int tyyppi)
294    {
295        PhysicsObject vihollinen = new PhysicsObject(30,30);
296       
297        if (tyyppi == 1)
298        {
299
300            vihollinen.Mass = 100;
301            vihollinen.Image = LoadImage("vih_aija");
302            vihollinen.Tag = "viho_aija";
303        }
304        else
305        {
306            vihollinen.Mass = 1000;
307            vihollinen.Width = 60;
308            vihollinen.Height = 60;
309            vihollinen.Image = LoadImage("vih_tankki");
310            vihollinen.Tag = "viho_tankki";
311        }
312        vihollinen.Shape = Shapes.Triangle;
313        vihollinen.KineticFriction = 1;
314        vihollinen.Mass = 1;
315        vihollinen.X = RandomGen.NextDouble(Level.Left + 20, Level.Right - 20);
316        vihollinen.Y = Level.Bottom + 200;
317        vihollinen.AngularDamping = 1;
318        Add(vihollinen);
319    }
320    void Pommita(PhysicsObject kone)
321    {
322        if (!kone1pommi.IsAddedToGame)
323        {
324            kone1pommi = new PhysicsObject(24, 8);
325            kone1pommi.X = kone.X;
326            kone1pommi.Y = kone.Y;
327            kone1pommi.Tag = "pommi1";
328            kone1pommi.Velocity = kone.Velocity;
329            kone1pommi.Angle = kone.Angle;
330            kone1pommi.Image = LoadImage("pommi");
331            kone1pommi.IgnoresCollisionResponse = true;
332            Timer ajastin = new Timer();
333            ajastin.Tag = kone1pommi;
334            ajastin.Interval = 0.2;
335            ajastin.Trigger += PommiVirittyy;
336            Add(ajastin);
337            ajastin.Start();
338            AddCollisionHandler(kone1pommi, PommiOsuu);
339            Add(kone1pommi);
340        }
341    }
342    void PommiVirittyy(Timer sender)
343    {
344        PhysicsObject pommi = (PhysicsObject)sender.Tag;
345        pommi.IgnoresCollisionResponse = false;
346    }
347
348    void PommiOsuu(PhysicsObject pommi, PhysicsObject kohde)
349    {
350        if (kohde.Tag != "kone1")
351        {
352            pomminsysteemi.AddEffect(pommi.X, pommi.Y, 50);
353            Remove(pommi);
354        }
355    }
356    void PaivitaPommit()
357    {
358
359    }
360
361    protected override void Update(Time time)
362    {
363        PaivitaKoneenNoste(kone1);
364        PaivitaPainotus(kone1);
365        PaivitaPainotus(kone1pommi);
366
367        //PaivitaKoneenNoste(kone2);
368        Camera.X = kone1.X;
369        base.Update(time);
370    }
371
372}
Note: See TracBrowser for help on using the repository browser.