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

Revision 1158, 9.2 KB checked in by arhetaka, 10 years ago (diff)

edistyy vähän.

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
14
15    int Pelaaja1NosteenSuunta = 1;
16    int Pelaaja2NosteenSuunta = 1;
17
18    Animation kone1_kaantyy_animation;
19    Animation kone2_kaantyy_animation;
20
21    protected override void Begin()
22    {
23        LuoKentta();       
24    }
25
26    void LuoKentta()
27    {
28        Level.BackgroundColor = Color.LightBlue;
29        Gravity = new Vector(0.0, -150.0);
30        Level.Height = Screen.Height;
31        Level.Width = 20000;
32        Level.CreateBorders();       
33        Level.CreateBottomBorder();
34        Level.Background.CreateGradient(Color.White, Color.Blue);
35        Level.CreateGround(100, 200, 50, Color.Green);
36        /*
37        PhysicsObject maa = PhysicsObject.CreateStaticObject(Level.Width, 50);
38        //maa.CollisionIgnorer.
39        maa.Color = Color.Green;
40        maa.Tag = "maailma";
41        maa.Y = Level.Bottom;       
42        Add(maa);*/
43
44        kone1 = TeeLentokone(true);
45        kone1.Image = LoadImage("kone1");
46        kone1.Tag = "kone1";
47        kone1.X = -100;
48        Add(kone1);
49        //Camera.FollowedObject = kone1.;
50       
51        /*
52        kone2 = TeeLentokone(true);
53        kone2.Image = LoadImage("kone2");
54        kone2.Tag = "kone2";
55
56        kone2.X = 100;
57        Add(kone2);
58        */
59        Image[] kone1_kaantyy_kuvat = LoadImages("kone1_nurin", "kone1_nurin_2", "kone1_nurin_3", "kone1_nurin_4", "kone1");
60        kone1_kaantyy_animation = new Animation(kone1_kaantyy_kuvat);
61
62        Image[] kone2_kaantyy_kuvat = LoadImages("kone2_nurin", "kone2_nurin_2", "kone2_nurin_3", "kone2_nurin_4", "kone2");
63        kone2_kaantyy_animation = new Animation(kone2_kaantyy_kuvat);
64
65
66        TeeOhjaimet();
67
68        Camera.StayInLevel = true;
69
70
71        systeemi = new ExplosionSystem(LoadImage("rajahdys"), 100, false);
72        systeemi.MaxScale = 0.3;
73        systeemi.MinScale = 0.1;
74        systeemi.MaxLifetime = 0.1;
75        systeemi.MinLifetime = 0.08;
76        Add(systeemi);
77
78        for (int a = 0; a < 100; a++)
79        {
80            LuoVihollinen(RandomGen.NextInt(2));
81        }
82
83    }
84    PhysicsObject TeeLentokone(bool ihminen)
85    {
86        PhysicsObject kone = new PhysicsObject(30, 30);
87        kone.Color = Color.Black;
88        kone.IgnoresGravity = false;
89        kone.LinearDamping = 0.985;
90        return kone;
91    }
92
93    void TeeOhjaimet()
94    {
95        //pelaaja 1
96        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, kone1);
97        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaPelaajaa, null, kone1, -2);
98        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaPelaajaa, null, kone1, 2);
99        Keyboard.Listen(Key.Right, ButtonState.Up, KaannaPelaajaa, null, kone1, 0);
100        Keyboard.Listen(Key.Left, ButtonState.Up, KaannaPelaajaa, null, kone1, 0);
101        Keyboard.Listen(Key.Down, ButtonState.Pressed, PyoritaPelaajaa, null, kone1);
102        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, null, kone1, 1);
103
104        //pelaaja 2
105        /*
106        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, kone2);
107        Keyboard.Listen(Key.D, ButtonState.Down, KaannaPelaajaa, null, kone2, -1);
108        Keyboard.Listen(Key.A, ButtonState.Down, KaannaPelaajaa, null, kone2, 1);
109        Keyboard.Listen(Key.D, ButtonState.Up, KaannaPelaajaa, null, kone2, 0);
110        Keyboard.Listen(Key.A, ButtonState.Up, KaannaPelaajaa, null, kone2, 0);
111        Keyboard.Listen(Key.S, ButtonState.Pressed, PyoritaPelaajaa, null, kone2);
112        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, null, kone2, 1);*/
113    }
114
115    void LiikutaPelaajaa(PhysicsObject pelaaja)
116    {
117        pelaaja.Push(Vector.FromLengthAndAngle(300, pelaaja.Angle));
118    }
119    void KaannaPelaajaa(PhysicsObject pelaaja, int nopeus) //pitäisikö riippua nopeudesta?
120    {
121        pelaaja.AngularVelocity = nopeus;
122    }
123 
124    void PaivitaKoneenNoste(PhysicsObject kone)
125    {
126        Vector KoneenNokanSuunta = Vector.FromLengthAndAngle(1, kone.Angle);
127        Vector KoneenNopeusEteen = kone.Velocity.Project(KoneenNokanSuunta);
128        if (KoneenNopeusEteen.Magnitude != 0)
129        {
130            if ((kone.Velocity.Magnitude / KoneenNopeusEteen.Magnitude / 100) < 0.05)
131            {
132                kone.LinearDamping = 1 - (kone.Velocity.Magnitude / KoneenNopeusEteen.Magnitude / 200);
133            }
134        }
135        if (kone.Tag == "kone1")
136        {
137            kone.Push(Vector.FromLengthAndAngle((KoneenNopeusEteen.Magnitude / 2), (kone.Angle + Angle.RightAngle) * Pelaaja1NosteenSuunta));
138        }
139        else
140        {
141            kone.Push(Vector.FromLengthAndAngle((KoneenNopeusEteen.Magnitude / 2), (kone.Angle + Angle.RightAngle) * Pelaaja2NosteenSuunta));
142        }
143        kone.Push(Vector.FromLengthAndAngle(10, kone.Angle)); //tyhjäkäynti
144    }
145
146
147    void PyoritaPelaajaa(PhysicsObject pelaaja)
148    {
149        if (pelaaja.Tag == "kone1")
150        {
151            Pelaaja1NosteenSuunta = Pelaaja1NosteenSuunta * -1;
152            if (Pelaaja1NosteenSuunta == -1)
153            {
154                Animation kone1_kaantyy_reverse_animation = Animation.Flip(kone1_kaantyy_animation);
155                kone1.Animation = kone1_kaantyy_reverse_animation;               
156                kone1.Animation.FPS = 6;
157                kone1.Animation.StopOnLastFrame = true;
158                kone1.Animation.Start(1);           
159            }
160            else
161            {               
162                kone1.Animation = kone1_kaantyy_animation;           
163                kone1.Animation.FPS = 6;
164                kone1.Animation.StopOnLastFrame = true;
165                kone1.Animation.Start(1);               
166            }
167        }
168        else
169        {
170            Pelaaja2NosteenSuunta = Pelaaja2NosteenSuunta * -1;
171            if (Pelaaja2NosteenSuunta == -1)
172            {
173                Animation kone2_kaantyy_reverse_animation = Animation.Flip(kone2_kaantyy_animation);
174                kone2.Animation = kone2_kaantyy_reverse_animation;
175                kone2.Animation.FPS = 6;
176                kone2.Animation.StopOnLastFrame = true;
177                kone2.Animation.Start(1);
178            }
179            else
180            {
181                kone2.Animation = kone2_kaantyy_animation;
182                kone2.Animation.FPS = 6;
183                kone2.Animation.StopOnLastFrame = true;
184                kone2.Animation.Start(1);
185            }
186        }
187
188    }
189    void Ammu(PhysicsObject kone, int nopeus)
190    {
191        PhysicsObject ammus = new PhysicsObject(4, 4);
192        ammus.Shape = Shapes.Circle;
193        ammus.Color = Color.Yellow;
194        ammus.X = kone.X;
195        ammus.Y = kone.Y;
196        ammus.Mass = 5;
197        ammus.IgnoresCollisionResponse = false;
198        ammus.IgnoresExplosions = true;
199        TimeSpan elinaika = new TimeSpan(15000000);
200        ammus.MaximumLifetime = elinaika;
201        ammus.Tag = kone.Tag + "ammus";
202        AddCollisionHandler(ammus, AmmusOsuu);
203        Add(ammus);
204        Angle koneenKulma = kone.Angle;
205        Vector KoneenNokanSuunta = Vector.FromLengthAndAngle(1, kone.Angle);
206        Vector KoneenNopeusEteen = kone.Velocity.Project(KoneenNokanSuunta);
207        Vector impulssi = Vector.FromLengthAndAngle(KoneenNopeusEteen.Magnitude * 5  + 2500, koneenKulma);
208        ammus.Hit(impulssi);
209    }
210    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
211    {
212       
213        if (kohde.Tag != "")
214        {
215            string ampuja = ammus.Tag.ToString();
216            string uhri = kohde.Tag.ToString();
217            if (uhri == "viho_aija" || uhri == "viho_tankki")
218            {
219               
220                kohde.MaximumLifetime = TimeSpan.FromMilliseconds(2000)  + kohde.Lifetime;
221                //Remove(kohde);
222            }
223            else
224            {
225                if (ampuja[4] != uhri[4] && kohde.Tag != "ajopiste")
226                {
227                    systeemi.AddEffect(ammus.X, ammus.Y, 5);
228                    ammus.Destroy();
229                }
230            }
231        }
232        if (kohde.Tag != "kone1")
233        {
234            systeemi.AddEffect(ammus.X, ammus.Y, 5);
235            ammus.Destroy();
236        }
237    }
238
239    protected override void Update(Time time)
240    {
241        PaivitaKoneenNoste(kone1);
242        //PaivitaKoneenNoste(kone2);
243        Camera.X = kone1.X;
244        base.Update(time);
245    }
246    void LuoVihollinen(int tyyppi)
247    {
248        PhysicsObject vihollinen = new PhysicsObject(30, 30);
249        vihollinen.Shape = Shapes.Triangle;
250        vihollinen.KineticFriction = 1;
251        vihollinen.Mass = 1;
252        vihollinen.X = RandomGen.NextDouble(Level.Left + 20, Level.Right -20);
253        vihollinen.Y = Level.Bottom + 200;
254        vihollinen.AngularDamping = 1;
255        if (tyyppi == 1)
256        {
257            vihollinen.Image = LoadImage("vih_aija");
258            vihollinen.Tag = "viho_aija";
259        }
260        else
261        {
262            vihollinen.Image = LoadImage("vih_tankki");
263            vihollinen.Tag = "viho_tankki";
264        }
265       
266        Add(vihollinen);
267    }
268
269}
Note: See TracBrowser for help on using the repository browser.