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

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