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

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