source: 2013/30/VilleF/Lentokone/Lentokone/Lentokone/Lentokone.cs @ 4707

Revision 4707, 12.3 KB checked in by totakahe, 7 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 Lentokone : PhysicsGame
10{
11
12    Font fontti = LoadFont("PisteFontti");
13    private Animation rasa;
14    private Animation sauruksenLento;
15    private Animation juusto;
16    private Animation miesa;
17    Image rasse = LoadImage("rasse");
18    Image ukkeliPi = LoadImage("ukkeli");
19    Image pommik = LoadImage("pommi");
20    Image maisema = LoadImage("havutausta");
21    Image havusaurus = LoadImage("havusauruskuva");
22    Image tykkikoira = LoadImage("tykkikoira");
23
24    Vector nopeusYlos = new Vector(0, 1000);
25    Vector nopeusAlas = new Vector(0, -1000);
26   
27    PhysicsObject pelaaja;
28    PhysicsObject pommi;
29    PhysicsObject Rasa;
30    Cannon RasasenTykki;
31
32    Timer komboLaskurinAjastin;
33    IntMeter pisteLaskuri;
34    IntMeter KomboLaskuri;
35
36    public override void Begin()
37    {
38        Label tekstikentta = new Label("Havupommitus V 0.1");
39        tekstikentta.X = Screen.Left + 105;
40        tekstikentta.Y = Screen.Top - 10;
41        Add(tekstikentta);
42        LuoPistelaskuri();
43        miesa = LoadAnimation("blingbling");
44        juusto = LoadAnimation("ukkeli");
45        sauruksenLento = LoadAnimation("animaatio");
46        rasa = LoadAnimation("rasanen");
47
48        Level.Width = 1024;
49        Level.Height =  820;
50        Gravity = new Vector(0.0, -500);
51        //MediaPl-ayer.Play("
52        LuoKomboLaskuri();
53        LuoPelaaja();
54        LuoKentta();
55        LisaaVihollinen();
56        LisaaVihollinen();
57        pelaaja.Animation = sauruksenLento;
58        pelaaja.Animation.Start();
59        pelaaja.Animation.FPS = 3;
60        Camera.ZoomToLevel();
61        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
62        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
63        Keyboard.Listen(Key.Left, ButtonState.Down, HidastaPelaajaa, null);
64        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, 1);
65        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaPelaajaa, null, 3.0);
66        Keyboard.Listen(Key.Up, ButtonState.Released, KaannaPelaajaa, null, 0.0);
67        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaPelaajaa, null, -3.0);
68        Keyboard.Listen(Key.Down, ButtonState.Released, KaannaPelaajaa, null, 0.0);
69        Keyboard.Listen(Key.Space, ButtonState.Released, TiputaPommi, "Ammu");
70        Keyboard.Listen(Key.R, ButtonState.Released, LuoPelaaja, "Ammu");
71        Keyboard.Listen(Key.V, ButtonState.Released, LisaaVihollinen, "Ammu");
72        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
73        Keyboard.Listen(Key.NumPad4, ButtonState.Down, LiikutaRasasta, null, -1);
74        Keyboard.Listen(Key.NumPad6, ButtonState.Down, LiikutaRasasta, null, 1);
75        Keyboard.Listen(Key.NumPad5, ButtonState.Released, RasanenPommi, "Saarnaa");
76        Keyboard.Listen(Key.B, ButtonState.Released, tiputamuu, "Luo Rasa");
77       
78
79    }
80
81    void LuoKentta()
82    {
83        Level.Background.Image = maisema;
84        Level.Background.FitToLevel();
85        Surface alareuna = new Surface(Level.Width, 50, 20, 60, 60);
86        alareuna.Color = Color.Green;
87        alareuna.Bottom = Level.Bottom;
88        Add(alareuna);
89
90        PhysicsObject oikeaReuna = Level.CreateRightBorder();
91        oikeaReuna.CollisionIgnoreGroup = 2;
92        oikeaReuna.IsVisible = false;
93
94
95        PhysicsObject vasenReuna = Level.CreateLeftBorder();
96        vasenReuna.CollisionIgnoreGroup = 2;
97        vasenReuna.IsVisible = false;
98
99    }
100
101    void LuoPelaaja()
102    {
103        pelaaja = new PhysicsObject(100.0, 120.0);
104        pelaaja.Shape = Shape.FromImage(havusaurus);
105        pelaaja.Image = havusaurus;
106        pelaaja.LinearDamping = 0.99;
107        pelaaja.CollisionIgnoreGroup = 2;
108        //pelaaja.MirrorImage();
109        pelaaja.Animation = sauruksenLento;
110        pelaaja.Animation.Start();
111        pelaaja.Animation.FPS = 3;
112        Add(pelaaja);
113        AddCollisionHandler(pelaaja, CollisionHandler.ExplodeObject(200, true));
114        AddCollisionHandler(pelaaja, "vihollinen", CollisionHandler.ExplodeTarget(50, true));
115        pelaaja.MaxVelocity = 600;
116        Timer ajastin = new Timer();
117        ajastin.Interval = 0.1;
118        ajastin.Timeout += KaannaKohtiMaata;
119        ajastin.Start();
120        pisteLaskuri.Value = -10;
121    }
122
123    void tiputamuu()
124    {
125        if (Rasa != null) return;
126        Rasa = new PhysicsObject(100, 100);
127        Rasa.Shape = Shape.FromImage(rasse);
128        Rasa.Position = pelaaja.Position;
129        Rasa.Animation = rasa;
130        Rasa.Animation.Start();
131        Rasa.Animation.FPS = 3;
132        Rasa.CollisionIgnoreGroup = 2;
133        Add(Rasa);
134
135        RasasenTykki = new Cannon(50, 10);
136        RasasenTykki.Ammo.Value = 999;
137        RasasenTykki.ProjectileCollision = AmmusOsui;
138       
139
140
141        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
142        Keyboard.Listen(Key.NumPad8, ButtonState.Released, AmmuAseella, "Ammu", RasasenTykki);
143
144        Rasa.Add(RasasenTykki);
145    }
146
147    void TiputaPommi()
148    {
149
150        pommi = new PhysicsObject(50, 50);
151        pommi.Shape = Shape.FromImage(pommik);
152        pommi.Image = pommik;
153        pommi.Position = pelaaja.Position;
154
155        pommi.CollisionIgnoreGroup = pelaaja.CollisionIgnoreGroup;
156
157
158        Add(pommi);
159
160        AddCollisionHandler(pommi, PommiOsuu);
161    }
162
163    void LisaaVihollinen()
164    {
165        int n = 0;
166        while (n < 10)
167        {
168
169
170            double x = RandomGen.NextDouble(Level.Right, Level.Left);
171            PhysicsObject ukkeli1 = new PhysicsObject(40, 60);
172            ukkeli1.Animation = RandomGen.SelectOne(juusto, miesa);
173            ukkeli1.Animation.Start();
174            ukkeli1.Animation.FPS = 5;
175            ukkeli1.Tag = "vihollinen";
176            ukkeli1.X = x;
177            ukkeli1.Y = Level.Bottom + 80;
178            Add(ukkeli1);
179            n++;
180            Timer ajastin = new Timer();
181            ajastin.Interval = RandomGen.NextDouble(0.2, 1);
182            ajastin.Timeout += delegate
183            {
184                ukkeli1.Velocity = new Vector(RandomGen.SelectOne(-200, 200, -500, 500), 0);
185            };
186            ajastin.Start();
187        }
188    }
189
190    void LuoPistelaskuri()
191    {
192        pisteLaskuri = new IntMeter(0);
193
194        Label pisteNaytto = new Label();
195        pisteNaytto.X = Screen.Right - 100;
196        pisteNaytto.Y = Screen.Top - 100;
197        pisteNaytto.TextColor = Color.Green;
198        pisteNaytto.IntFormatString = "Pisteitä: {0:D1}";
199        pisteNaytto.BindTo(pisteLaskuri);
200        Add(pisteNaytto);
201    }
202
203    void LuoKomboLaskuri()
204    {
205        KomboLaskuri = new IntMeter(0);
206
207        Label komboNaytto = new Label();
208        komboNaytto.X = Screen.Right - 200;
209        komboNaytto.Y = Screen.Top - 200;
210        komboNaytto.TextColor = Color.Green;
211        komboNaytto.IntFormatString = "COMBO: {0:D1}";
212        komboNaytto.BindTo(KomboLaskuri);
213        Add(komboNaytto);
214
215        komboLaskurinAjastin = new Timer();
216        komboLaskurinAjastin.Interval = 5;
217        komboLaskurinAjastin.Timeout += delegate { KomboLaskuri.Reset(); };
218        komboLaskurinAjastin.Start();
219
220        KomboLaskuri.Changed += delegate { Kombot(); };
221
222
223
224
225    }
226
227    void Kombot()
228    {
229        if (KomboLaskuri.Value == 10)
230        {
231            MessageDisplay.Add( "Fatality" );
232            MessageDisplay.TextColor = Color.Red;
233            MessageDisplay.MessageTime = new TimeSpan(0, 0, 2);
234            MessageDisplay.X = Screen.Left + 500;
235            MessageDisplay.Y = 0;
236        }
237        if (KomboLaskuri.Value > 6)    {}
238    }
239
240    void RasanenPommi()
241    {
242        PhysicsObject Raamattu = new PhysicsObject(30, 30);
243        Raamattu.Image = pommik;
244        Rasa.Throw(Raamattu, Angle.FromDegrees(30), 500);
245        Raamattu.CollisionIgnoreGroup = Rasa.CollisionIgnoreGroup;
246        AddCollisionHandler(Raamattu, RaamattuOsuu);
247        Add(Raamattu);     
248    }
249
250    void Tahtaa(AnalogState hiirenLiike)
251    {
252        Vector suunta = (Mouse.PositionOnWorld - RasasenTykki.AbsolutePosition).Normalize();
253        RasasenTykki.Angle = suunta.Angle;
254    }
255
256    void AmmuAseella(Cannon RasasenTykki)
257    {
258        PhysicsObject ammus = RasasenTykki.Shoot();
259
260       
261
262        if (ammus != null)
263        {
264            ammus.Image = tykkikoira;
265            ammus.Size *= 6;
266            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
267        }
268    }
269
270    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
271    {
272        if (kohde.Tag.Equals("vihollinen"))
273        {
274            kohde.Destroy();
275            pisteLaskuri.Value += 1;
276            KomboLaskuri.Value += 1;
277            komboLaskurinAjastin.Reset();
278        }
279    }
280
281    void RaamattuOsuu(PhysicsObject pommi, PhysicsObject kohde)
282    {
283        if (kohde.Tag.Equals("vihollinen"))
284        {
285            kohde.Destroy();
286            pisteLaskuri.Value += 1;
287            KomboLaskuri.Value += 1;
288            komboLaskurinAjastin.Reset();
289        }
290        if (KomboLaskuri > 3)
291        {
292            Explosion o = new Explosion(120);
293            o.Position = pommi.Position;
294            pommi.Destroy();
295            Add(o);
296            o.ShockwaveReachesObject += delegate(IPhysicsObject rKohde, Vector v)
297            {
298                if (rKohde.Tag.Equals("vihollinen")) rKohde.Destroy(); 
299            };
300        }
301        else
302        {
303            Explosion o = new Explosion(60);
304            o.Position = pommi.Position;
305            pommi.Destroy();
306            Add(o);
307            o.ShockwaveReachesObject += delegate(IPhysicsObject rKohde, Vector v) { if (rKohde.Tag.Equals("vihollinen")) rKohde.Destroy(); };
308            //pisteet++;}
309        }     
310    }
311
312    void PommiOsuu(PhysicsObject pommi, PhysicsObject kohde)
313    {
314        if (kohde.Tag.Equals("vihollinen"))
315        {
316            kohde.Destroy();
317            pisteLaskuri.Value += 1;
318            KomboLaskuri.Value += 1;
319            komboLaskurinAjastin.Reset();
320        }
321        if (KomboLaskuri > 3)
322        {
323            Explosion e = new Explosion(120);
324            e.Position = pommi.Position;
325            pommi.Destroy();
326            Add(e);
327            e.ShockwaveReachesObject += delegate(IPhysicsObject rKohde, Vector v)
328            {
329                if (rKohde.Tag.Equals("vihollinen")) rKohde.Destroy();
330            };
331        }
332
333
334        else
335        {
336            Explosion o = new Explosion(60);
337            o.Position = pommi.Position;
338            pommi.Destroy();
339            Add(o);
340            o.ShockwaveReachesObject += delegate(IPhysicsObject rKohde, Vector v) { if (rKohde.Tag.Equals("vihollinen")) rKohde.Destroy(); };
341            //pisteet++;}
342        }
343    }
344
345    void KaannaPelaajaa(double kaannos)
346    {
347        pelaaja.AngularVelocity = kaannos;
348    }
349
350    protected override void Update(Time time)
351    {
352        base.Update(time);
353        if (pelaaja != null)
354        {
355            if (pelaaja.Position.X > Level.Right) pelaaja.Position = new Vector(Level.Left, pelaaja.Position.Y);
356            if (pelaaja.Position.X < Level.Left) pelaaja.Position = new Vector(Level.Right, pelaaja.Position.Y);
357        }
358    }
359
360    void HidastaPelaajaa()
361    {
362        pelaaja.Velocity = new Vector(pelaaja.Velocity.X * 0.95, pelaaja.Velocity.Y);
363    }
364
365    void LiikutaPelaajaa(int suunta)
366    {
367        pelaaja.Push(Vector.FromLengthAndAngle(3000 * suunta, pelaaja.Angle));
368    }
369
370    void KaannaKohtiMaata()
371    {
372        if ((pelaaja.Angle.Degrees > 70) && (pelaaja.Angle.Degrees < 110))
373            return;
374        if ((pelaaja.Angle.Degrees >= 110) || (pelaaja.Angle.Degrees <= -90))
375            pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees + 0.4);
376        else
377            pelaaja.Angle = Angle.FromDegrees(pelaaja.Angle.Degrees - 0.4);
378    }
379
380    void LiikutaRasasta(int suunta)
381    {
382        Rasa.Push(new Vector(suunta* 400, 0));
383        if (Rasa.Position.X > Level.Right)
384        {
385
386            Rasa.Position = new Vector(Level.Left, Rasa.Position.Y);
387            return;
388        }
389        if (Rasa.Position.X <Level.Left)
390        {
391
392            Rasa.Position = new Vector(Level.Right, Rasa.Position.Y);
393            return;
394        }
395    }
396
397}
Note: See TracBrowser for help on using the repository browser.