source: 2011/31/AleksiR/OmaPeli/OmaPeli/OmaPeli/Peli.cs @ 2573

Revision 2573, 11.1 KB checked in by almarimp, 8 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 : PhysicsGame
10{
11   
12    List<Label> valikonKohdat;
13
14    PhysicsObject Alus1;
15    PhysicsObject Alus2;
16    PhysicsObject tahti;
17    PhysicsObject tahti1;
18    PhysicsObject tahti2;
19    LaserGun pyssy;
20    LaserGun pyssy2;
21    IntMeter pisteLaskuri1;
22    IntMeter pisteLaskuri2;
23
24    Image alus1Kuva = LoadImage("Alus1");
25    Image alus2Kuva = LoadImage("Alus2");
26    Image tahtiKuva = LoadImage("Tahti");
27    Image alusKuva = LoadImage("Alus");
28
29    public override void Begin()
30    {
31        Valikko();
32    }
33
34    void Valikko()
35    {
36        ClearAll();
37        valikonKohdat = new List<Label>();
38        Level.BackgroundColor = Color.Black;
39        Level.Background.CreateStars();
40
41        Label kohta1 = new Label("Aloita uusi peli");
42        kohta1.Position = new Vector(0, 80);
43        valikonKohdat.Add(kohta1);
44
45        Label kohta3= new Label("Lopeta");
46        kohta3.Position = new Vector(0, 0);
47        valikonKohdat.Add(kohta3);
48
49        foreach (Label valikonKohta in valikonKohdat)
50        {
51            Add(valikonKohta);
52        }
53
54        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaUusiPeli, null);
55        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
56
57        Mouse.IsCursorVisible = true;
58        Mouse.ListenMovement(1.0, valikossaLiikkuminen, null);
59        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
60    }
61
62    void valikossaLiikkuminen(AnalogState hiirenTila)
63    {
64        foreach (Label kohta in valikonKohdat)
65        {
66            if (Mouse.IsCursorOn(kohta))
67            {
68                kohta.TextColor = Color.Red;
69            }
70            else
71            {
72                kohta.TextColor = Color.GreenYellow;
73            }
74
75        }
76    }
77
78    void AloitaPeli()
79    {
80        ClearAll();
81        AloitaUusiPeli();
82    }
83
84
85    void AloitaUusiPeli()
86    {
87        ClearAll();
88        Nappaimet();
89        LuoAlus1();
90        LuoAlus2();
91        LuoLaskuri1();
92        LuoLaskuri2();
93        LuoKentta();
94        LuoTahdet();
95
96        FollowerBrain aly1 = new FollowerBrain();
97        aly1.Target = Alus1;
98        aly1.FollowAlways = true;
99        aly1.TargetFollowDistance = 750;
100        aly1.Speed = 50;
101
102        FollowerBrain aly2 = new FollowerBrain();
103        aly2.Target = Alus2;
104        aly2.FollowAlways = true;
105        aly2.TargetFollowDistance = 500;
106        aly2.Speed = 50;
107
108        tahti1 = new PhysicsObject(7, 25);
109        tahti1.Shape = Shape.Star;
110        tahti1.Color = Color.Yellow;
111        tahti1.Y = -300;
112        tahti1.X = -100;
113        tahti1.Brain = aly1;
114        tahti1.Tag = "Tähti";
115        tahti1.Image = alus1Kuva;
116        tahti1.IgnoresCollisionResponse = false;
117
118        Add(tahti1);
119
120        tahti2 = new PhysicsObject(7, 25);
121        tahti2.Shape = Shape.Star;
122        tahti2.Color = Color.Yellow;
123        tahti2.Y = -300;
124        tahti2.X = 100;
125        tahti2.Brain = aly2;
126        tahti2.Tag = "Tähti";
127        tahti2.Image = alus1Kuva;
128        tahti2.IgnoresCollisionResponse = false;
129
130        Add(tahti2);
131
132    }
133
134    void LuoKentta()
135    {
136        Level.CreateBorders(1.0, false);
137        Level.BackgroundColor = Color.Black;
138        Level.Background.CreateStars();
139        Level.Background.FitToLevel();
140
141        Gravity = new Vector(0, -50);
142
143        IsFullScreen = true;
144        Camera.ZoomToLevel();
145    }
146
147    void LuoTahdet()
148    {
149        int i = 0;
150
151        while (i < 2)
152        {
153            LuoUusiTahti();
154            i++;
155        }
156
157    }
158
159    void LuoAlus1()
160    {
161        Alus1 = new PhysicsObject(10, 30);
162        Alus1.Shape = Shape.Triangle;
163        Alus1.Color = Color.DarkRed;
164        Alus1.CanRotate = false;
165        Alus1.IgnoresExplosions = true;
166        Alus1.Restitution = 0;
167        Alus1.X = -250;
168        Alus1.Tag = "Alus";
169        Alus1.Image = alusKuva;
170        Add(Alus1);
171
172        pyssy = new LaserGun(20, 5);
173        pyssy.Angle += Angle.FromDegrees(90);
174        pyssy.Shoot();
175        pyssy.ProjectileCollision = AmmusOsuu;
176        pyssy.AmmoIgnoresGravity = true;
177        pyssy.InfiniteAmmo = true;
178        pyssy.MaxAmmoLifetime = TimeSpan.MaxValue;
179        pyssy.IsVisible = false;
180        Alus1.Add(pyssy);
181    }
182
183    void LuoAlus2()
184    {
185        Alus2 = new PhysicsObject(10, 30);
186        Alus2.Shape = Shape.Triangle;
187        Alus2.Color = Color.ForestGreen;
188        Alus2.CanRotate = false;
189        Alus2.IgnoresExplosions = true;
190        Alus2.Restitution = 0;
191        Alus2.X = 250;
192        Alus2.Tag = "Alus";
193        Alus2.Image = alus2Kuva;
194        Add(Alus2);
195
196
197        pyssy2 = new LaserGun(20, 5);
198        pyssy2.Angle += Angle.FromDegrees(90);
199        pyssy2.Shoot();
200        pyssy2.MaxAmmoLifetime = TimeSpan.MaxValue;
201        pyssy2.ProjectileCollision = PlasmaOsuu;
202        pyssy2.AmmoIgnoresGravity = true;
203        pyssy2.InfiniteAmmo = true;
204        pyssy2.IsVisible = false;
205        Alus2.Add(pyssy2);
206    }
207
208    void Nappaimet()
209    {
210
211        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
212
213        Keyboard.Listen(Key.Left, ButtonState.Down,LiikutaPelaajaa1, "Pelaaja 1 liikkuu vasemmalle", new Vector(-500, 0));
214        Keyboard.Listen(Key.Right, ButtonState.Down,LiikutaPelaajaa1, "Pelaaja 1 liikkuu oikealle", new Vector(500, 0));
215        Keyboard.Listen(Key.Up, ButtonState.Down,LiikutaPelaajaa1, "Pelaaja1 liikkuu ylös", new Vector(0, 500));
216        Keyboard.Listen(Key.Down, ButtonState.Down,LiikutaPelaajaa1, "Pelaaja 1 liikkuu alas", new Vector(0, -500));
217
218        Keyboard.Listen(Key.A, ButtonState.Down,LiikutaPelaajaa2, "Pelaaja 2 liikkuu vasemmalle", new Vector(-500, 0));
219        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa2, "Pelaaja 2 liikkuu oikealle", new Vector(500, 0));
220        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa2, "Pelaaja 2 liikkuu ylös", new Vector(0, 500));
221        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa2, "Pelaaja 2 liikkuu alas", new Vector(0, -500));
222         
223        Keyboard.Listen(Key.Space, ButtonState.Down, Ampuu, null);
224        Keyboard.Listen(Key.Tab, ButtonState.Down, Ampuu2, null);
225    }
226
227    void Ampuu()
228    {
229        pyssy.Shoot();
230    }
231
232    void Ampuu2()
233    {
234        pyssy2.Shoot();
235    }
236
237    void LiikutaPelaajaa1(Vector vektori1)
238    {
239        Alus1.Push(vektori1);
240    }
241
242    void LiikutaPelaajaa2(Vector vektori2)
243    {
244        Alus2.Push(vektori2);
245    }
246
247    protected override void Update(Time time)
248    {
249        base.Update(time);
250        if (Alus1 != null && Alus2 != null)
251        {
252        Alus1.Angle = Alus1.Velocity.Angle - Angle.FromDegrees(90);
253        Alus2.Angle = Alus2.Velocity.Angle - Angle.FromDegrees(90);
254        }
255    }
256
257
258    void LuoUusiTahti()
259    {
260        TagFollowerBrain aly = new TagFollowerBrain("Alus", 5000);
261        aly.TargetFollowDistance = 500;
262
263        tahti = new PhysicsObject(30, 30);
264        tahti.Shape = Shape.Star;
265        tahti.Color = RandomGen.NextColor();
266        tahti.Y = RandomGen.NextDouble(-400, 400);
267        tahti.X = RandomGen.NextDouble(-400, 400);
268        tahti.Brain = aly;
269        tahti.Tag = "Tähti";
270        tahti.IgnoresGravity = true;
271        tahti.Restitution = 10;
272        tahti.Image = tahtiKuva;
273        AddCollisionHandler(tahti, tahtiTormasi);
274        Add(tahti);
275    }
276
277
278    void LuoLaskuri1()
279    {
280        pisteLaskuri1 = new IntMeter(0);
281        pisteLaskuri1.MaxValue = 1000;
282        pisteLaskuri1.UpperLimit += Laskuri1Max;
283
284        Label pisteNaytto = new Label();
285        pisteNaytto.X = Screen.Left + 100;
286        pisteNaytto.Y = Screen.Top - 100;
287        pisteNaytto.TextColor = Color.Red;
288
289        pisteNaytto.BindTo(pisteLaskuri1);
290        Add(pisteNaytto);
291
292        Label pisteTeksti = new Label("Pisteitä: ");
293        pisteTeksti.X = Screen.Left + 50;
294        pisteTeksti.Y = Screen.Top - 100;
295        pisteTeksti.TextColor = Color.Red;
296        Add(pisteTeksti);
297    }
298
299    void LuoLaskuri2()
300    {
301        pisteLaskuri2 = new IntMeter(0);
302        pisteLaskuri2.MaxValue = 1000;
303        pisteLaskuri2.UpperLimit += Laskuri2Max;
304
305        Label pisteNaytto2 = new Label();
306        pisteNaytto2.X = Screen.Right - 100;
307        pisteNaytto2.Y = Screen.Top - 100;
308        pisteNaytto2.TextColor = Color.ForestGreen;
309
310        pisteNaytto2.BindTo(pisteLaskuri2);
311        Add(pisteNaytto2);
312
313        Label pisteTeksti2 = new Label("Pisteitä: ");
314        pisteTeksti2.X = Screen.Right - 150;
315        pisteTeksti2.Y = Screen.Top - 100;
316        pisteTeksti2.TextColor = Color.ForestGreen;
317        Add(pisteTeksti2);
318    }
319
320
321    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
322    {
323        Explosion rajahdys = new Explosion(2.5);
324        rajahdys.Position = ammus.Position;
325        Add(rajahdys);
326        ammus.Destroy();
327
328        if (kohde.IsDestroyed)
329        {
330            return;
331        }
332
333        if (kohde.Tag.ToString() == "Tähti")
334        {
335            ammus.Destroy();
336            kohde.Destroy();
337            LuoUusiTahti();
338            pisteLaskuri1.Value += 10;
339        }
340
341        if (kohde == Alus2)
342        {
343            ammus.Destroy();
344            pisteLaskuri2.Value -= 10;
345        }
346
347    }
348
349    void PlasmaOsuu(PhysicsObject ammus, PhysicsObject kohde)
350    {
351        Explosion rajahdys = new Explosion(2.5);
352        rajahdys.Position = ammus.Position;
353        Add(rajahdys);
354        ammus.Destroy();
355
356        if (kohde.IsDestroyed)
357        {
358            return;
359        }
360
361        if (kohde.Tag.ToString() == "Tähti")
362        {
363            ammus.Destroy();
364            kohde.Destroy();
365            LuoUusiTahti();
366            pisteLaskuri2.Value += 10;
367        }
368
369        if (kohde == Alus1)
370        {
371            ammus.Destroy();
372            pisteLaskuri1.Value -= 10;
373        }
374
375    }
376
377
378    void tahtiTormasi(PhysicsObject tahti, PhysicsObject kohde)
379    {
380        if (kohde == Alus2)
381        {
382            tahti.Destroy();
383            pisteLaskuri2.Value -= 100;
384            LuoUusiTahti();
385        }
386
387        if (kohde == Alus1)
388        {
389            tahti.Destroy();
390            pisteLaskuri1.Value -= 100;
391            LuoUusiTahti();
392        }
393
394    }
395
396
397    void Laskuri1Max(int arvo)
398    {
399        MessageDisplay.TextColor = Color.Fuchsia;
400        MessageDisplay.Add("Pelaaja 1 voitti pelin. Uusi peli alkaa 5 sekunnin kuluttua.");
401        Alus1.Destroy();
402        Alus2.Destroy();
403        Timer.SingleShot(5.0, ajastinLaukesi);
404    }
405
406    void Laskuri2Max(int arvo)
407    {
408        MessageDisplay.TextColor = Color.Aqua;
409        MessageDisplay.Add("Pelaaja 2 voitti pelin. Uusi peli alkaa 5 sekunnin kuluttua.");
410        Alus1.Destroy();
411        Alus2.Destroy();
412        Timer.SingleShot(5.0, ajastinLaukesi);
413    }
414
415    void ajastinLaukesi()
416    {
417        ClearAll();
418        AloitaUusiPeli();
419    }
420
421}
Note: See TracBrowser for help on using the repository browser.