source: 2013/24/AamosR/GeneerinenAvaruuslentely/GeneerinenAvaruuslentely/GeneerinenAvaruuslentely/GeneerinenAvaruuslentely.cs @ 4094

Revision 4094, 10.1 KB checked in by juiitamm, 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
9//TO DO-list: Tee health packit
10
11
12class alus : PhysicsObject
13{
14    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
15    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
16
17    public alus(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
21    }
22}
23
24public class GeneerinenAvaruuslentely : PhysicsGame
25{
26    EasyHighScore topLista = new EasyHighScore();
27    Image aluskuva = LoadImage("alus");
28    Image asteroidikuva = LoadImage("asteroidi");
29    Image tausta = LoadImage("tausta");
30    Image vihollinenkuva = LoadImage("vihollinen");
31    SoundEffect hurt = LoadSoundEffect("hit");
32    SoundEffect shoot = LoadSoundEffect("shoot");
33    SoundEffect explosion = LoadSoundEffect("explosion");
34
35
36    alus alus;
37    PhysicsObject asteroidi;
38    //PhysicsObject vihollinen;
39    IntMeter pisteLaskuri;
40    IntMeter ElamaLaskuri;
41   
42
43   
44   
45   
46    public override void Begin()
47    {
48        // TODO: Kirjoita ohjelmakoodisi tähän
49        //IsFullScreen = true;
50        ClearAll();
51        Level.BackgroundColor = Color.Black;
52
53        SetWindowSize(1920, 1080, true);
54        MultiSelectWindow valikko = new MultiSelectWindow("Generic Space Game", "Start Game", "High Score", "Quit");
55        //valikko.ItemSelected += PainettiinValikonNappia;
56       
57        valikko.Color = Color.SkyBlue;
58       
59        valikko.BorderColor = Color.Black;
60        valikko.AddItemHandler(0, AloitaPeli);
61        valikko.AddItemHandler(1, ParhaatPisteet);
62        valikko.AddItemHandler(2, ConfirmExit);
63       
64        Add(valikko);
65       
66    }
67
68    void ParhaatPisteet()
69    {
70        topLista.Show();
71        topLista.HighScoreWindow.Closed += delegate { Begin(); };
72    }
73   
74    void AloitaPeli()
75    {
76        ClearAll();
77
78        MediaPlayer.Play("8bit Dungeon Boss");
79        LuoKentta();
80        AsteroidiAjastin();
81        VihollisAjastin();
82        AsetaOhjaimet();
83        LuoPisteLaskuri();
84        LuoElamaLaskuri();
85    }
86
87    void LuoElamaLaskuri()
88    {
89        ElamaLaskuri = new IntMeter(5, 0, 10);
90
91        Label ElamaNaytto = new Label();
92        ElamaNaytto.X = Screen.Left + 100;
93        ElamaNaytto.Y = Screen.Top - 100;
94        ElamaNaytto.TextColor = Color.White;
95        ElamaNaytto.Title = "HP";
96        ElamaNaytto.BindTo(ElamaLaskuri);
97       
98        ElamaLaskuri.LowerLimit +=  ElamaLoppui;
99        ElamaLaskuri.LowerLimit += ElamaLaskuri.Reset;
100        //ElamaLaskuri.LowerLimit += topLista.EnterAndShow(pisteLaskuri.Value);
101        //ElamaLaskuri.LowerLimit += topLista.HighScoreWindow.Closed += Begin;
102
103        Add(ElamaNaytto);
104
105
106    }
107
108    void ElamaLoppui()
109    {
110        alus.Destroy();
111        explosion.Play();
112        //Begin();
113        topLista.EnterAndShow(pisteLaskuri.Value);
114        topLista.HighScoreWindow.Closed += delegate { Begin(); };
115       
116       
117    }
118
119    void LuoPisteLaskuri()
120    {
121        pisteLaskuri = new IntMeter(0);
122
123        Timer pisteTimer = new Timer();
124        pisteTimer.Interval = 2;
125        pisteTimer.Timeout += delegate { pisteLaskuri.Value++; };
126        pisteTimer.Start();
127
128        Label pisteNaytto = new Label();
129        pisteNaytto.X = Screen.Right - 100;
130        pisteNaytto.Y = Screen.Top - 100;
131        pisteNaytto.TextColor = Color.White;
132        //pisteNaytto.Color = Color.White;
133        pisteNaytto.Title = "Points";
134       
135
136        pisteNaytto.BindTo(pisteLaskuri);
137        Add(pisteNaytto);
138       
139    }
140
141
142    void LuoKentta()
143    {
144        Level.Width = Screen.Width;
145        Level.Height = Screen.Height;
146        Level.CreateBorders();
147       
148        alus = new alus(100, 100);
149        alus.Shape = Shape.Rectangle;
150        alus.X = 0;
151        alus.Y = 0;
152        alus.Image = aluskuva;
153        alus.AngularDamping = 0.5;
154        alus.LinearDamping = 0.95;
155        alus.ElamaLaskuri.Value--;
156
157        Level.Background.Image = tausta;
158
159        Add(alus);
160
161        AddCollisionHandler(alus, "vihollinen", kuolema);
162
163       
164
165
166    }
167
168   
169
170    void AsetaOhjaimet()
171    {
172        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
173        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
174        Keyboard.Listen(Key.A, ButtonState.Down, KaannaAlusta, null, 10.0);
175        Keyboard.Listen(Key.D, ButtonState.Down, KaannaAlusta, null, -10.0);
176        Keyboard.Listen(Key.W, ButtonState.Down, TyonnaAlusta, null);
177        Keyboard.Listen(Key.S, ButtonState.Down, VedaAlusta, null);
178        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Ammu, null);
179    }
180
181    void KaannaAlusta(double kulma)
182    {
183        alus.AngularVelocity = kulma;
184    }
185
186    void TyonnaAlusta()
187    {
188        Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle);
189        alus.Push(pelaajanSuunta);
190
191    }
192
193    void VedaAlusta()
194    {
195        Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle);
196        alus.Push(pelaajanSuunta - pelaajanSuunta - pelaajanSuunta);
197
198    }
199
200    void kuolema(PhysicsObject alus, PhysicsObject vihollinen)
201    {
202        hurt.Play();
203        ElamaLaskuri.Value -= 1;
204        vihollinen.Destroy();
205    }
206
207       
208   
209
210    void LisaaAsteroidi()
211    {
212        //Vector kentanPiste = Level.GetRandomPosition();
213        //RandomGen.NextVector(
214
215        Vector kentanPiste = Vector.FromLengthAndAngle(Level.Width + 200, RandomGen.NextAngle());
216        asteroidi = new PhysicsObject(50, 50);
217        asteroidi.Position = kentanPiste;
218        asteroidi.Shape = Shape.Circle;
219        asteroidi.Color = Color.Black;
220        asteroidi.Image = asteroidikuva;
221        asteroidi.Tag = "vihollinen";
222        asteroidi.IgnoresCollisionResponse = true;
223        Add(asteroidi);
224        Angle asteroidikulma = (Vector.Zero - asteroidi.Position).Angle;
225        Vector asteroidivector = Vector.FromLengthAndAngle(500, RandomGen.NextAngle(asteroidikulma -Angle.FromDegrees(50), (asteroidikulma +Angle.FromDegrees(50))));
226        asteroidi.Hit(asteroidivector);
227    }
228
229    void AsteroidiAjastin()
230    {
231        Timer ajastin = new Timer();
232        ajastin.Interval = 0.5;
233        ajastin.Timeout += LisaaAsteroidi;
234        ajastin.Start();
235    }
236
237    void VihollisAjastin()
238    {
239        Timer ajastin = new Timer();
240        ajastin.Interval = 7;
241        ajastin.Timeout += LisaaVihollinen;
242        ajastin.Start();
243    }
244
245    void LisaaVihollinen()
246    {
247        Vector kentanPiste = Vector.FromLengthAndAngle(Level.Width + 200, RandomGen.NextAngle());
248        PhysicsObject vihollinen = new PhysicsObject(150, 150);
249        vihollinen.Position = kentanPiste;
250        vihollinen.Shape = Shape.Circle;
251        vihollinen.Color = Color.Black;
252        vihollinen.Image = vihollinenkuva;
253        vihollinen.Tag = "vihollinen";
254        //vihollinen.Tag = "vihu";
255        vihollinen.IgnoresCollisionResponse = true;
256        vihollinen.MaximumLifetime = TimeSpan.FromSeconds(10);
257
258        AssaultRifle pelaajan1Ase = new AssaultRifle(30, 10);
259        pelaajan1Ase.IsVisible = false;
260       
261        pelaajan1Ase.InfiniteAmmo = true;
262        pelaajan1Ase.Power.DefaultValue = 200;
263        pelaajan1Ase.Power.Value = 200;
264        pelaajan1Ase.ProjectileCollision = AmmusOsui;
265        vihollinen.Add(pelaajan1Ase);
266
267        Add(vihollinen);
268        Angle vihollinenkulma = (Vector.Zero - vihollinen.Position).Angle;
269        Vector vihollinenvector = Vector.FromLengthAndAngle(500, RandomGen.NextAngle(vihollinenkulma - Angle.FromDegrees(10), (vihollinenkulma + Angle.FromDegrees(10))));
270       
271        vihollinen.Hit(vihollinenvector);
272
273        Timer ajastin = new Timer();
274        ajastin.Interval = 5;
275        ajastin.Timeout += delegate { VihollinenAmpuu(vihollinen, pelaajan1Ase, ajastin); };
276        ajastin.Start();
277
278    }
279
280    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
281    {
282        if (kohde == alus)
283        {
284            ElamaLaskuri.Value -= 1;
285            hurt.Play();
286           
287        }
288
289        ammus.Destroy();
290    }
291
292    void VihollinenAmpuu(PhysicsObject vihollinen, AssaultRifle ase, Timer ajastin)
293    {
294        if (vihollinen.IsDestroyed)
295        {
296            ajastin.Stop();
297        }
298        Vector suunta = (alus.Position - vihollinen.Position).Normalize();
299        ase.Angle = suunta.Angle;
300        PhysicsObject ammus = ase.Shoot();
301
302        if (ammus != null)
303        {
304            ammus.IgnoresCollisionResponse = true;
305        }
306    }
307
308    void Ammu()
309    {
310        shoot.Play();
311        PhysicsObject ammus = new PhysicsObject(10, 10);
312       
313        Vector pelaajanSuunta = Vector.FromLengthAndAngle(2500.0, alus.Angle);
314       
315
316        ammus.Position = alus.Position + Vector.FromLengthAndAngle(80.0, alus.Angle);
317        ammus.Shape = Shape.Circle;
318        ammus.Color = Color.Yellow;
319        ammus.Hit(pelaajanSuunta);
320
321        Add(ammus, -1);
322       
323       
324        ammus.CanRotate = false;
325        ammus.IgnoresCollisionResponse = true;
326        AddCollisionHandler(ammus, "vihollinen", vihollisenKuolema);
327       
328        Timer poistumisAjastin = new Timer();
329        poistumisAjastin.Interval = 1;
330        poistumisAjastin.Timeout += delegate { ammusPoistuu(ammus); };
331        poistumisAjastin.Start();
332       
333    }
334
335    void ammusPoistuu(PhysicsObject ammus)
336    {
337        if (ammus.X > Level.Right)
338        {
339            ammus.Destroy();
340        }
341
342        else if (ammus.Y > Level.Top)
343        {
344            ammus.Destroy();
345        }
346    }
347
348    void vihollisenKuolema(PhysicsObject ammus, PhysicsObject vihollinen)
349    {
350        vihollinen.Destroy();
351        hurt.Play();
352        ammus.Destroy();
353
354        pisteLaskuri.Value += 10;
355       
356    }
357
358    void asteroidiKuolema(PhysicsObject ammus, PhysicsObject asteroidi)
359    {
360        asteroidi.Destroy();
361        ammus.Destroy();
362
363        pisteLaskuri.Value += 5;
364    }
365}
Note: See TracBrowser for help on using the repository browser.