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

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