source: 2011/31/JoonasM/TankSurvival/TankSurvival/TankSurvival/Peli.cs @ 2568

Revision 2568, 10.0 KB checked in by joarmuho, 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 : PhysicsGame
10{
11    List<Label> valikonKohdat;
12
13    Image olionKuva = LoadImage("pelaaja");
14    Image palikanKuva = LoadImage("seinä");
15    Image vihunKuva = LoadImage("vihollinen");
16    Image maalinKuva = LoadImage("maali");
17
18    PhysicsObject pelaaja;
19    PlasmaCannon plasmaTykki;
20
21    ScoreList topLista = new ScoreList(10, false, 0);
22
23    int kenttaNro = 1;
24
25
26    public override void Begin()
27
28    {
29        Valikko();
30        if (DataStorage.Exists("pisteet.xml"))
31        topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
32
33    }
34
35    void Valikko()
36    {
37        ClearAll();
38
39        Level.BackgroundColor = Color.ForestGreen;
40
41        valikonKohdat = new List<Label>();
42
43        Label kohta1 = new Label("Aloita uusi peli");
44        kohta1.Position = new Vector(0, 40);
45        valikonKohdat.Add(kohta1);
46
47        Label kohta2 = new Label("Lopeta");
48        kohta2.Position = new Vector(0, -40);
49        valikonKohdat.Add(kohta2);
50
51        Label kohta3 = new Label("Tank Survive");
52        kohta3.Position = new Vector(0, 200);
53        kohta3.TextScale = new Vector(4, 4);
54        valikonKohdat.Add(kohta3);
55
56        Label kohta4 = new Label("Olet pudonnut luolastoon ja tarkoituksena on selvitä elossa ylös");
57        kohta4.Position = new Vector(0, -110);
58        valikonKohdat.Add(kohta4);
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, Exit, null);
67       
68        Mouse.IsCursorVisible = true;
69        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
70        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
71       
72
73    }
74
75    void ValikossaLiikkuminen(AnalogState hiirenTila)
76    {
77        foreach (Label kohta in valikonKohdat)
78        {
79            if (Mouse.IsCursorOn(kohta))
80            {
81                kohta.TextColor = Color.Red;
82            }
83            else
84            {
85                kohta.TextColor = Color.Black;
86            }
87
88        }
89    }
90
91    void AloitaPeli()
92    {
93        ClearAll();
94        LuoKenttä();
95        LuoPelaaja();
96        asetaOhjaimet();
97
98    }
99
100    void LuoKenttä()
101    {
102        TileMap ruudut = TileMap.FromLevelAsset("level1");
103        ruudut.SetTileMethod('=', LuoPalikka);
104        ruudut.SetTileMethod('v', Luovihu);
105        ruudut.SetTileMethod('m', LuoMaali);
106        ruudut.Execute();
107        LuoLaskuri();
108        Luoelämät();
109    }
110
111    void LuoPelaaja()
112    {
113        Camera.StayInLevel = true;
114        Camera.ZoomFactor = 4;
115        Level.BackgroundColor = Color.ForestGreen;
116        pelaaja = new PhysicsObject(29, 50);
117        pelaaja.X = -420.0;
118        pelaaja.Y = 290.0;
119        pelaaja.Image = olionKuva;
120        pelaaja.Restitution = 1.0;
121        pelaaja.KineticFriction = 1.0;
122        pelaaja.LinearDamping = 0.5;
123        pelaaja.AngularDamping = 0.5;
124        Add(pelaaja);
125        plasmaTykki = new PlasmaCannon(20, 1);
126        pelaaja.Add(plasmaTykki);
127        plasmaTykki.Power.Value += 0.1;
128        plasmaTykki.Angle += Angle.FromDegrees(-97);
129        Camera.Follow(pelaaja);
130        AddCollisionHandler(pelaaja, Kasittelepelaajantormays);
131    }
132
133    void asetaOhjaimet()
134    {
135        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-250, 0));
136        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(250, 0));
137        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 250));
138        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -250));
139        Keyboard.Listen(Key.A, ButtonState.Down, KäännäPelaajaa, null, 5.0);
140        Keyboard.Listen(Key.D, ButtonState.Down, KäännäPelaajaa, null, -5.0);
141        Keyboard.Listen(Key.A, ButtonState.Released, KäännäPelaajaa, null, 0.0);
142        Keyboard.Listen(Key.D, ButtonState.Released, KäännäPelaajaa, null, -0.0);
143        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
144        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
145        Keyboard.Listen(Key.S, ButtonState.Down, AmmuAseella, "Ammu");
146    }
147
148    void Luovihu(Vector paikka, double leveys, double korkeus)
149    {
150        PhysicsObject vihu = PhysicsObject.CreateStaticObject(leveys, korkeus, Shape.Rectangle);
151        vihu.Position = paikka;
152        vihu.Image = vihunKuva;
153        vihu.Tag = "vihu";
154        Timer ajastin = new Timer();
155        ajastin.Interval = 1.5;
156        ajastin.Timeout += delegate { vihollineAmpuu(vihu); };
157        ajastin.Start();
158
159        Add(vihu);
160    }
161
162    void vihollineAmpuu(PhysicsObject vihollinen)
163    {
164        if (vihollinen.IsDestroyed) return;
165
166        PhysicsObject ammus;
167
168        int i = 0;
169
170        while (i < 4)
171        {
172            ammus = new PhysicsObject(10, 10);
173            ammus.Position = vihollinen.Position;
174            Add(ammus);
175            ammus.Tag = "vihuammus";
176            switch (i)
177            {
178                case 0: // ylös
179                    ammus.Hit(new Vector(0, 100));
180                    ammus.Y += 10;
181                    break;
182                case 1: // oikealle
183                    ammus.Hit(new Vector(100, 0));
184                    ammus.X += 10;
185                    break;
186                case 2:  // alas
187                    ammus.Hit(new Vector(0, -100));
188                    ammus.Y -= 10;
189                    break;
190                case 3: // vasemalle
191                    ammus.Hit(new Vector(-100, 0));
192                    ammus.X -= 10;
193                    break;
194                default:
195                    break;
196            }           
197           
198            AddCollisionHandler(ammus, kasitteleammuksentormaus);
199            i++;
200        }
201    }
202
203    void LuoPalikka(Vector paikka, double leveys, double korkeus)
204    {
205        PhysicsObject taso = PhysicsObject.CreateStaticObject(
206  leveys, korkeus, Shape.Rectangle);
207        taso.Position = paikka;
208        taso.Image = palikanKuva;
209        Add(taso);
210        taso.Tag = "taso";
211    }
212
213    void LuoMaali(Vector paikka, double leveys, double korkeus)
214    {
215        PhysicsObject maali = PhysicsObject.CreateStaticObject(
216  leveys, korkeus, Shape.Rectangle);
217        maali.Position = paikka;
218        maali.Image = maalinKuva;
219        Add(maali);
220        maali.Tag = "maali";
221    }
222
223    void KäännäPelaajaa(double kulmanopeus)
224    {
225        pelaaja.AngularVelocity = kulmanopeus;
226    }
227
228    void LiikutaPelaajaa(Vector vektori)
229    {
230        pelaaja.Move(vektori);
231    }
232
233    void Kasittelepelaajantormays(PhysicsObject pelaaja, PhysicsObject kohde)
234    {
235        if (kohde.Tag.ToString() == "vihu")
236        {
237            AloitaAlusta();
238        }
239        if (kohde.Tag.ToString() == "vihuammus")
240        {
241            AloitaAlusta();
242        }
243    }
244
245    void AloitaAlusta()
246    {
247        elämäLaskuri.Value--;
248        if (elämäLaskuri.Value < 1) 
249
250        {
251            ClearAll();
252            HighScoreWindow topIkkuna = new HighScoreWindow("TankSurvival",
253                             "Parhaat pisteet",
254                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
255                             topLista, pisteLaskuri.Value+elämäLaskuri.Value);
256            topIkkuna.Closed += TallennaPisteet;
257            Add(topIkkuna);
258            ClearAll();
259            Valikko();
260        }
261
262        pelaaja.X = -420.0;
263        pelaaja.Y = 290.0;
264    }
265
266    void TallennaPisteet(Window sender)
267    {
268        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
269    }
270
271
272
273    void AmmuAseella()
274    {
275        PhysicsObject ammus = plasmaTykki.Shoot();
276
277        if (ammus != null)
278        {
279            ammus.Size *= 1;
280            AddCollisionHandler(ammus, kasitteleammuksentormaus);
281        }
282    }
283
284    void kasitteleammuksentormaus(PhysicsObject ammus, PhysicsObject kohde)
285    {
286        if (kohde.Tag.ToString() == "vihu" && ammus.Tag.ToString() != "vihuammus")
287        {
288            kohde.Destroy();
289            Explosion rajahdys = new Explosion(25);
290            rajahdys.Position = kohde.Position;
291            rajahdys.ShockwaveColor = Color.Red;
292            Add(rajahdys);
293            pisteLaskuri.Value++;
294
295        }
296        if (kohde.Tag.ToString() == "taso")
297        {
298            ammus.Destroy();
299        }
300        if (kohde.Tag.ToString() == "maali")
301        {
302            ammus.Destroy();
303        }
304
305    }
306
307    IntMeter pisteLaskuri;
308
309    void LuoLaskuri()
310    {
311        pisteLaskuri = new IntMeter(0);
312
313        Label pisteNaytto = new Label();
314        pisteNaytto.X = Screen.Left + 140;
315        pisteNaytto.Y = Screen.Top - 111;
316        pisteNaytto.TextColor = Color.Red;
317
318        pisteNaytto.TextColor = Color.Red;
319
320        pisteNaytto.BindTo(pisteLaskuri);
321        Add(pisteNaytto);
322
323        Label pisteTeksti = new Label("Pisteitä: ");
324        pisteTeksti.X = Screen.Left + 90;
325        pisteTeksti.Y = Screen.Top - 111;
326        pisteTeksti.TextColor = Color.White;
327        Add(pisteTeksti);
328
329    }
330    IntMeter elämäLaskuri;
331
332    void Luoelämät()
333    {
334        elämäLaskuri = new IntMeter(3);
335
336        Label elämäNaytto = new Label();
337        elämäNaytto.X = Screen.Left + 140;
338        elämäNaytto.Y = Screen.Top - 90;
339        elämäNaytto.TextColor = Color.Red;
340
341        elämäNaytto.TextColor = Color.Red;
342
343        elämäNaytto.BindTo(elämäLaskuri);
344        Add(elämäNaytto);
345
346        Label elämäTeksti = new Label("Elämiä: ");
347        elämäTeksti.X = Screen.Left + 90;
348        elämäTeksti.Y = Screen.Top - 90;
349        elämäTeksti.TextColor = Color.White;
350        Add(elämäTeksti);
351    }
352
353}
Note: See TracBrowser for help on using the repository browser.