source: 2011/31/JereK/Serades/Serades/Serades/Peli.cs @ 2531

Revision 2531, 9.0 KB checked in by jekuukka, 10 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : TopDownPhysicsGame
10{
11    Vector[] vihollistenAloitukset = { new Vector(450,350),
12                                     new Vector(-450,350),
13                                     new Vector(450,-350),
14                                     new Vector(-450,-350)};
15    Image olionkuva = LoadImage("alus");
16    Image karttakuva = LoadImage("kartta");
17    Image vihokuva = LoadImage("vihollinen");
18    Image taustakuva = LoadImage("taustakuva");
19    Image oliokuva = LoadImage("alus2");
20    Image pomonkuva = LoadImage("boss");
21    PhysicsObject pelaaja1;
22    PhysicsObject pelaaja2;
23    LaserGun pelaaja1Pyssy;
24    LaserGun pelaaja2Pyssy;
25    List<Label> valikonKohdat;
26
27
28    List<PhysicsObject> viholliset = new List<PhysicsObject>();
29
30    int taso = 1;
31
32    PhysicsObject beam = new PhysicsObject(new RaySegment(Vector.Zero, Vector.UnitX, 10));
33
34
35    public override void Begin()
36    {
37        Valikko();
38    }
39
40    void Valikko()
41    {
42        ClearAll();
43        Camera.ZoomToLevel();
44        Level.Background.Image = taustakuva;
45        Level.Background.FitToLevel();
46        valikonKohdat = new List<Label>();
47
48        Label kohta1 = new Label("Aloita peli yhdellä pelaajalla.");
49        kohta1.Position = new Vector(0, 40);
50        valikonKohdat.Add(kohta1);
51
52        Label kohta2 = new Label("Aloita peli kahdella pelaajalla.");
53        kohta2.Position = new Vector(0, 0);
54        valikonKohdat.Add(kohta2);
55
56        Label kohta3 = new Label("Lopeta ja poistu pelistä.");
57        kohta3.Position = new Vector(0, -40);
58        valikonKohdat.Add(kohta3);
59
60        foreach (Label valikonKohta in valikonKohdat)
61        {
62            Add(valikonKohta);
63        }
64
65        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
66        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, AloitaKaksinpeli, null);
67        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
68
69        Mouse.IsCursorVisible = true;
70        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
71        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
72    }
73
74    void ValikossaLiikkuminen(AnalogState a)
75    {
76        foreach (Label kohta in valikonKohdat)
77        {
78            if (Mouse.IsCursorOn(kohta))
79            {
80                kohta.TextColor = Color.White;
81            }
82            else
83            {
84                kohta.TextColor = Color.OrangeRed;
85            }
86
87        }
88
89    }
90
91
92
93    void LuoAlus()
94    {
95        pelaaja1 = new PhysicsObject(30, 30);
96        Add(pelaaja1);
97        pelaaja1.LinearDamping = 0.96;
98        pelaaja1.Image = olionkuva;
99        pelaaja1Pyssy = new LaserGun(20, 5);
100        pelaaja1Pyssy.ProjectileCollision = LaserSadeOsuu;
101        pelaaja1Pyssy.InfiniteAmmo = true;
102        pelaaja1.Add(pelaaja1Pyssy);
103        pelaaja1.IgnoresExplosions = true;
104        pelaaja1Pyssy.Angle = pelaaja1Pyssy.Angle + Angle.FromDegrees(90);
105        beam.Color = Color.Blue;
106    }
107
108    void AsetaPelaaja2()
109    {
110        pelaaja2 = new PhysicsObject(30, 30);
111        Add(pelaaja2);
112        pelaaja2.LinearDamping = 0.96;
113        pelaaja2.Image = oliokuva;
114        pelaaja2Pyssy = new LaserGun(20, 5);
115        pelaaja2Pyssy.ProjectileCollision = LaserSadeOsuu;
116        pelaaja2Pyssy.InfiniteAmmo = true;
117        pelaaja2.IgnoresExplosions = true;
118        pelaaja2.Add(pelaaja2Pyssy);
119        pelaaja2Pyssy.Angle = pelaaja2Pyssy.Angle + Angle.FromDegrees(90);
120        beam.Color = Color.Blue;
121        pelaaja2.X = 30;
122    }
123
124    void SeuraavaTaso() 
125    {
126        taso++;
127
128        if (taso < 2)
129        {
130            MessageDisplay.Add("Seuraava aalto alkaa!!");
131            Timer.SingleShot(3, AloitaAalto);
132        }
133        else 
134        {
135            MessageDisplay.Add("VAROKAA POMOA");
136            Timer.SingleShot(3, AloitaPomotaistelu);
137        }
138    }
139
140    void AloitaPomotaistelu() 
141    {
142        PhysicsObject Pomo = new PhysicsObject(200, 100);
143        Pomo.Image = pomonkuva;
144        Add(Pomo);
145        Pomo.X = 450;
146        Pomo.Y = 350;
147       
148        PlasmaCannon plasmaTykki = new PlasmaCannon(20, 5);
149        Pomo.Add(plasmaTykki);
150        plasmaTykki.PlasmaParticleCollision = PlasmaPalloOsuu;
151
152 
153    }
154
155    void AloitaAalto()
156    {
157        Timer ajastin = new Timer();
158        ajastin.Interval = 3.0 - (taso / 10.0);
159        ajastin.Timeout += LuoVihollinen;
160       
161        ajastin.Start(2);
162    }
163
164    void Aloitakaksin()
165    {
166        Timer ajastin = new Timer();
167        ajastin.Interval = 1.0 - (taso / 10.0);
168        ajastin.Timeout += LuoVihollinen;
169        ajastin.Start(30);
170    }
171
172    void AsetaOhjaimet()
173    {
174        Keyboard.Listen(Key.Left, ButtonState.Down,
175          Kaanna, null, 10.0, pelaaja1);
176        Keyboard.Listen(Key.Right, ButtonState.Down,
177          Kaanna, null, -10.0, pelaaja1);
178        Keyboard.Listen(Key.Up, ButtonState.Down,
179          Kaasu, null, pelaaja1);
180        Keyboard.Listen(Key.Down, ButtonState.Down,
181          Kaasu, null, pelaaja1);
182        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, null, pelaaja1Pyssy);
183        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "");
184    }
185
186    void AsetaKakkosohjaimet()
187    {
188        Keyboard.Listen(Key.A, ButtonState.Down,
189    Kaanna, null, 10.0, pelaaja2);
190        Keyboard.Listen(Key.D, ButtonState.Down,
191          Kaanna, null, -10.0, pelaaja2);
192        Keyboard.Listen(Key.W, ButtonState.Down,
193          Kaasu, null, pelaaja2);
194        Keyboard.Listen(Key.S, ButtonState.Down,
195          Kaasu, null, pelaaja2);
196        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Ammu, null, pelaaja2Pyssy); 
197    }
198
199    void Ammu(Weapon pyssy)
200    {
201        PhysicsObject ammus = pyssy.Shoot();
202        if (ammus != null) AddCollisionHandler(ammus, LaserSadeOsuu);
203    }
204
205
206    void Kaasu(PhysicsObject alus)
207    {
208        alus.Push(Vector.FromLengthAndAngle(400, alus.Angle + Angle.FromDegrees(90)));
209    }
210
211    void Kaanna(double nopeus, PhysicsObject alus)
212    {
213        alus.AngularAcceleration = nopeus;
214    }
215
216    void LuoVihollinen()
217    {
218        for (int i = 0; i < 4; i++)
219        {
220            PhysicsObject vihollinen = new PhysicsObject(40, 40);
221            vihollinen.X = 450;
222            vihollinen.Y = 350;
223            vihollinen.Position = vihollistenAloitukset[i];
224            vihollinen.Image = vihokuva;
225            //AddCollisionHandler(vihollinen, LaserSadeOsuu);
226            vihollinen.Tag = "vihollinen";
227
228            FollowerBrain seuraajanAivot = new FollowerBrain();
229            seuraajanAivot.Target = pelaaja1;
230            seuraajanAivot.Speed = 50;
231            seuraajanAivot.TargetFollowDistance = 600;
232            seuraajanAivot.FollowAlways = true;
233            seuraajanAivot.TargetCloseDistance = 1;
234            seuraajanAivot.StopWhenTargetClose = false;
235            seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
236            vihollinen.Brain = seuraajanAivot;
237            seuraajanAivot.Active = true;
238            Add(vihollinen);
239
240            viholliset.Add(vihollinen);
241        }
242    }
243
244    void mitaTapahtuuKunOllaanLahella(object lahettajaAivot, EventArgs e)
245    {
246        //TODO
247    }
248
249    void LaserSadeOsuu(PhysicsObject ammus, PhysicsObject kohde)
250    {
251        ammus.Destroy();
252        Explosion rajahdys = new Explosion(50);
253        rajahdys.Position = ammus.Position;
254        Add(rajahdys);
255
256        if (kohde.Tag.ToString() == "vihollinen")
257        {
258            kohde.Destroy();
259            if (viholliset.Contains(kohde)) {
260                viholliset.Remove(kohde);
261                if (viholliset.Count == 0) { SeuraavaTaso(); }
262            }
263        }
264    }
265
266    void PlasmaPalloOsuu(PhysicsObject pallo, PhysicsObject kohde)
267    {
268        if (kohde.Tag.ToString() == "pelaaja") 
269        {
270            kohde.Destroy();
271        }
272    }
273
274    void AloitaPeli()
275    {
276        ClearAll();
277        MessageDisplay.TextColor = Color.OrangeRed;
278
279        LuoAlus();
280        Level.CreateBorders();
281        Camera.ZoomToLevel();
282        Level.Background.CreateStars(2000);
283        AsetaOhjaimet();
284       // MessageDisplay.Add("Test");
285
286        MessageDisplay.MessageTime = new TimeSpan(0, 0, 10);
287        //tekstikentta.X = Screen.Left + 100;
288        //tekstikentta.Y = Screen.Top - 100;
289        AloitaAalto();
290        beam.Color = Color.Red;
291
292        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
293    }
294
295    void AloitaKaksinpeli()
296    {
297        ClearAll();
298        MessageDisplay.TextColor = Color.OrangeRed;
299        LuoAlus();
300        AsetaPelaaja2();
301        AsetaOhjaimet();
302        AsetaKakkosohjaimet();
303        Level.CreateBorders();
304        Camera.ZoomToLevel();
305        Level.Background.Image = taustakuva;
306        Level.Background.CreateStars(2000);
307        Aloitakaksin();
308    }
309}
Note: See TracBrowser for help on using the repository browser.