source: 2012/24/AamosR/Thunderbird/Thunderbird/Thunderbird/Thunderbird.cs @ 3831

Revision 3831, 13.6 KB checked in by hniemi, 8 years ago (diff)

Updated version of game.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Thunderbird : PhysicsGame
10{
11    Image taustaKuva = LoadImage("taustakuva");
12    Image ammusKuva = LoadImage("ammus");
13
14    SoundEffect ammusAani = LoadSoundEffect("ampumisaani");
15    SoundEffect vihollisaani = LoadSoundEffect("vihollisaani");
16    SoundEffect lintuaani = LoadSoundEffect("lintuaani");
17   
18    Image pilviKuva = LoadImage("pilvi");
19    Image rajahdys_kuva = LoadImage("vihollinen1");
20
21    Image[] viholliskuvat1 = LoadImages("vihollinen1", "vihollinen12");
22    Image[] viholliskuvat2 = LoadImages("vihollinen2", "vihollinen22");
23    Image[] viholliskuvat3 = LoadImages("vihollinen3", "vihollinen32");
24    Image[] lintukuvat = LoadImages("Thunderbird", "Thunderbird2");
25   
26   Vector nopeusYlos = new Vector(0, 400);
27   Vector nopeusAlas = new Vector(0, -400);
28   Vector pysaytaLintu = new Vector(0, 0);
29   Vector nopeusVasemmalle = new Vector(-400, 0);
30   Vector nopeusOikealle = new Vector(400, 0);
31
32   Timer vihollisajastin1;
33   Timer vihollisajastin2;
34   Timer vihollisajastin3;
35   Timer tahtiajastin;
36   Timer pilviajastin;
37   
38   PhysicsObject lintu;
39
40   IntMeter pisteLaskuri;
41
42   ScoreList topLista = new ScoreList(10, false, 1);
43   ExplosionSystem rajahdys;
44
45   void LuoLaskuri()
46   {
47       pisteLaskuri = new IntMeter(0);
48
49       Label pisteNaytto = new Label();
50       pisteNaytto.X = Screen.Right - 100;
51       pisteNaytto.Y = Screen.Top - 100;
52       pisteNaytto.TextColor = Color.Black;
53       pisteNaytto.Color = Color.White;
54
55       pisteNaytto.BindTo(pisteLaskuri);
56       Add(pisteNaytto);
57   }
58   
59    public override void Begin()
60    {
61        if (DataStorage.Exists("pisteet.xml"))
62            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
63       
64       
65
66        MultiSelectWindow valikko = new MultiSelectWindow("Thunderbird", "Start game",  "Highscores", "Exit");
67        valikko.ItemSelected += PainettiinValikonNappia;
68        Add(valikko);
69    }
70
71    void PainettiinValikonNappia(int valinta)
72    {
73        switch (valinta)
74        {
75            case 0:
76                ClearAll();
77                ClearTimers();
78                vihollisajastin1 = null;
79                vihollisajastin2 = null;
80                vihollisajastin3 = null;
81                LuoKentta();
82                AsetaOhjaimet();
83                LuoLaskuri();
84
85                vihollisajastin1 = new Timer();
86                vihollisajastin2 = new Timer();
87                vihollisajastin3 = new Timer();
88
89                tahtiajastin = new Timer();
90                pilviajastin = new Timer();
91
92                vihollisajastin1.Interval = 2;
93                vihollisajastin1.Timeout += lisaaVihollinen;
94                vihollisajastin1.Start();
95
96                //vihollinenPoistuu();
97
98                Timer.SingleShot(30, kutsuvihollisia);
99                Timer.SingleShot(60, kutsuvihollisia2);
100       
101                tahtiajastin.Interval = 1;
102                tahtiajastin.Timeout += lisaaTahti;
103                tahtiajastin.Start();
104
105                pilviajastin.Interval = 3;
106                pilviajastin.Timeout += lisaaPilvi;
107                pilviajastin.Start();
108               
109                rajahdys = new ExplosionSystem(rajahdys_kuva, 50);
110                Add(rajahdys);
111                break;
112
113            case 1:
114                HighScoreWindow topIkkuna = new HighScoreWindow(
115                             "Highscores",
116                             topLista );
117                                topIkkuna.Closed += TallennaPisteet;
118                                topIkkuna.Closed += NaytaGameOver;
119                                Add( topIkkuna );
120                                break;
121           
122            case 2:
123                //exit
124                Exit();
125                break;
126        }
127    }
128
129    void TallennaPisteet(Window sender)
130    {
131        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
132    }
133
134    void NaytaPaavalikko(Window sender)
135    {
136        MultiSelectWindow valikko = new MultiSelectWindow("Thunderbird", "Start game", "Highscores", "Exit");
137        valikko.ItemSelected += PainettiinValikonNappia;
138        Add(valikko);
139    }
140
141    void NaytaGameOver(Window sender)
142    {
143        MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Retry", "Highscores", "Exit");
144        valikko.ItemSelected += PainettiinValikonNappia;
145        Add(valikko);
146    }
147
148    void AsetaOhjaimet()
149    {
150        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
151        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
152
153        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Lennä ylöspäin", lintu, nopeusYlos);
154        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, lintu, pysaytaLintu);
155        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Lennä alaspäin", lintu, nopeusAlas);
156        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, lintu, pysaytaLintu);
157        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Lennä vasemmalle", lintu, nopeusVasemmalle);
158        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, lintu, pysaytaLintu);
159        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Lennä oikealle", lintu, nopeusOikealle);
160        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, lintu, pysaytaLintu);
161
162        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Lennä ylöspäin", lintu, nopeusYlos);
163        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, null, lintu, pysaytaLintu);
164        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Lennä alaspäin", lintu, nopeusAlas);
165        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, null, lintu, pysaytaLintu);
166        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Lennä vasemmalle", lintu, nopeusVasemmalle);
167        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, lintu, pysaytaLintu);
168        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Lennä oikealle", lintu, nopeusOikealle);
169        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, lintu, pysaytaLintu);
170
171        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
172       
173        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Ammu");
174        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, "Ammu");
175    }
176
177    void  AsetaNopeus( PhysicsObject lintu, Vector nopeus)
178    {
179        lintu.Velocity = nopeus;
180    }
181   
182    void LuoKentta()
183    {
184        lintu = new PhysicsObject(150, 150);
185        lintu.Shape = Shape.Rectangle;
186        lintu.Animation = new Animation(lintukuvat);
187        lintu.Animation.FPS = 4;
188        lintu.Animation.Start();
189        lintu.X = -350;
190        lintu.Y = 0;
191        lintu.CanRotate = false;
192        lintu.Restitution = 0;
193        AddCollisionHandler(lintu, "vihollinen", kuolema);
194        Add (lintu);
195
196        Level.Background.CreateGradient(Color.Blue, Color.White);
197        Level.CreateBorders(false);
198       
199       
200        Camera.ZoomToLevel();
201
202    }
203
204    void lisaaVihollinen()
205    {
206        PhysicsObject vihollinen = new PhysicsObject(99, 99);
207        vihollinen.Shape = Shape.Rectangle;
208        vihollinen.Animation = new Animation(viholliskuvat1);
209        vihollinen.Animation.FPS = 2;
210        vihollinen.Animation.Start();
211       
212        vihollinen.X = Level.Width;
213        vihollinen.Y = RandomGen.NextDouble(-342, 342);
214        vihollinen.Hit(new Vector(-250, 0));
215        vihollinen.CanRotate = false;
216        vihollinen.IgnoresCollisionResponse = true;
217        vihollinen.Tag = "vihollinen";
218        Add (vihollinen);
219
220        Timer poistumisAjastin = new Timer();
221        poistumisAjastin.Interval = 0.2;
222        poistumisAjastin.Timeout += delegate { vihollinenPoistuu(vihollinen); };
223        poistumisAjastin.Start();
224    }
225
226    void lisaaVihollinen2()
227    {
228        PhysicsObject vihollinen = new PhysicsObject(99, 99);
229        vihollinen.Shape = Shape.Rectangle;
230
231        vihollinen.Animation = new Animation(viholliskuvat2);
232        vihollinen.Animation.FPS = 3;
233        vihollinen.Animation.Start();
234       
235        vihollinen.X = Level.Width;
236        vihollinen.Y = RandomGen.NextDouble(-342, 342);
237        vihollinen.Hit(new Vector(-550, 0));
238        vihollinen.CanRotate = false;
239        vihollinen.IgnoresCollisionResponse = true;
240        vihollinen.Tag = "vihollinen";
241        Add(vihollinen);
242
243        Timer poistumisAjastin = new Timer();
244        poistumisAjastin.Interval = 0.2;
245        poistumisAjastin.Timeout += delegate { 
246        vihollinenPoistuu(vihollinen); };
247        poistumisAjastin.Start();
248    }
249
250    void lisaaVihollinen3()
251    {
252        PhysicsObject vihollinen = new PhysicsObject(99, 99);
253        vihollinen.Shape = Shape.Rectangle;
254
255        vihollinen.Animation = new Animation(viholliskuvat3);
256        vihollinen.Animation.FPS = 4;
257        vihollinen.Animation.Start();
258       
259        vihollinen.X = Level.Width;
260        vihollinen.Y = RandomGen.NextDouble(-342, 342);
261        vihollinen.Hit(new Vector(-950, 0));
262        vihollinen.CanRotate = false;
263        vihollinen.IgnoresCollisionResponse = true;
264        vihollinen.Tag = "vihollinen";
265        Add(vihollinen);
266
267        Timer poistumisAjastin = new Timer();
268        poistumisAjastin.Interval = 0.2;
269        poistumisAjastin.Timeout += delegate { vihollinenPoistuu(vihollinen); };
270        poistumisAjastin.Start();
271    }
272
273    void kutsuvihollisia()
274    {
275        lisaaVihollinen2();
276        Timer.SingleShot(2, kutsuvihollisia);
277    }
278
279    void kutsuvihollisia2()
280    {
281        lisaaVihollinen3();
282        Timer.SingleShot(1.5, kutsuvihollisia2);
283    }
284   
285    void lisaaTahti()
286    {
287        PhysicsObject tahti = new PhysicsObject(10, 10);
288        tahti.Shape = Shape.Star;
289        tahti.Color = Color.Yellow;
290        tahti.X = Level.Width;
291        tahti.Y = RandomGen.NextDouble(-342, 342);
292        tahti.Hit(new Vector(-50, 0));
293        tahti.CanRotate = false;
294        tahti.IgnoresCollisionResponse = true;
295        Add(tahti, -3);
296        Timer poistumisAjastin = new Timer();
297        poistumisAjastin.Interval = 0.2;
298        poistumisAjastin.Timeout += delegate { tahtiPoistuu(tahti); };
299        poistumisAjastin.Start();
300    }
301
302    void lisaaPilvi()
303    {
304        PhysicsObject pilvi = new PhysicsObject(80, 50);
305        pilvi.Shape = Shape.Rectangle;
306        pilvi.Image = pilviKuva;
307        pilvi.X = Level.Width;
308        pilvi.Y = RandomGen.NextDouble(-342, 342);
309        pilvi.Hit(new Vector(-100, 0));
310        pilvi.CanRotate = false;
311        pilvi.IgnoresCollisionResponse = true;
312        Add(pilvi, -2);
313        Timer poistumisAjastin = new Timer();
314        poistumisAjastin.Interval = 0.2;
315        poistumisAjastin.Timeout += delegate { pilviPoistuu(pilvi); };
316        poistumisAjastin.Start();
317    }
318
319    void kuolema(PhysicsObject lintu, PhysicsObject vihollinen)
320    {
321        lintu.Destroy();
322        lintuaani.Play();
323
324       
325        /*MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Retry?", "Exit");
326        valikko.ItemSelected += PainettiinValikonNappia;
327        Add(valikko);*/
328        HighScoreWindow topIkkuna = new HighScoreWindow(
329                             "Highscores",
330                             "Game Over! Input your name to post on the scoreboard.",
331                             topLista, pisteLaskuri.Value);
332        topIkkuna.Closed += TallennaPisteet;
333        topIkkuna.Closed += NaytaGameOver;
334        Add(topIkkuna);
335    }
336
337    void Ammu()
338    {
339        PhysicsObject ammus = new PhysicsObject(60, 40);
340        Add (ammus, -1);
341        ammus.X = lintu.X +100;
342        ammus.Y = lintu.Y;
343        ammus.Shape = Shape.Circle;
344        ammus.Image = ammusKuva;
345        ammus.CanRotate = false;
346        ammus.IgnoresCollisionResponse = true;
347        AddCollisionHandler(ammus, "vihollinen", vihollisenKuolema);
348        ammus.Hit(new Vector(900, 0));
349        Timer poistumisAjastin = new Timer();
350        poistumisAjastin.Interval = 0.2;
351        poistumisAjastin.Timeout += delegate { ammusPoistuu(ammus); };
352        poistumisAjastin.Start();
353        ammusAani.Play();
354    }
355
356    void vihollisenKuolema(PhysicsObject ammus, PhysicsObject vihollinen)
357    {
358        vihollinen.Destroy();
359        ammus.Destroy();
360        vihollisaani.Play();
361       
362        double x = vihollinen.X;
363        double y = vihollinen.Y;
364        rajahdys.MinScale = 40;
365        rajahdys.MaxScale = 50;
366        rajahdys.MinVelocity = 50;
367        rajahdys.MaxVelocity = 70;
368        rajahdys.MinLifetime = 0.4;
369        rajahdys.MaxLifetime = 0.6;
370       
371        int pMaara = 50;
372        rajahdys.AddEffect(x, y, pMaara);
373       
374
375
376        pisteLaskuri.Value = pisteLaskuri.Value + 10;
377    }
378
379    void vihollinenPoistuu(PhysicsObject vihollinen)
380    {
381        if (vihollinen.X < Level.Left)
382        {
383            vihollinen.Destroy();
384        }
385    }
386
387    void tahtiPoistuu(PhysicsObject tahti)
388    {
389        if (tahti.X < Level.Left -20)
390        {
391            tahti.Destroy();
392        }
393    }
394
395    void pilviPoistuu(PhysicsObject pilvi)
396    {
397        if (pilvi.X < Level.Left -20)
398        {
399            pilvi.Destroy();
400        }
401    }
402
403    void ammusPoistuu(PhysicsObject ammus)
404    {
405        if (ammus.X > Level.Right)
406        {
407            ammus.Destroy();
408        }
409    }
410
411}
Note: See TracBrowser for help on using the repository browser.