source: 2016/25/ToukoP/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 7500

Revision 7500, 10.1 KB checked in by tesatapa, 3 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 FysiikkaPeli1 : PhysicsGame
10{
11    AssaultRifle raketinAse;
12    Image savunkuva = LoadImage("savu");
13    IntMeter pelaajanpisteet = new IntMeter(0);
14
15    ScoreList TopLista;
16    PhysicsObject raketti;
17    Vector pelaajanAlkuPaikka;
18    string[] kentat = new string[] { "Kentta1", "Kentta2", "Kentta3", "Kentta4", "Kentta5", "Kentta6" };
19    int kenttaMenossa = 0;
20    double raketinNopeus = 75.0;
21    public override void Begin()
22
23    {
24        TopLista = new ScoreList(10, true, 10000);
25        TopLista = DataStorage.TryLoad<ScoreList>(TopLista, "pisteet2.xml");
26        AlkuValikko();
27
28
29
30    }
31
32    void luoraketti(Vector paikka, double leveys, double korkeus)
33    {
34        pelaajanAlkuPaikka = paikka;
35        raketti = new PhysicsObject(45, 20);
36        raketti.Shape = Shape.Hexagon;
37        raketti.Angle = Angle.FromDegrees(90.0);
38        Add(raketti);
39        raketti.Color = Color.Black;
40        raketti.Position = paikka;
41        raketti.RotateImage = true;
42        Image kuva = LoadImage("raketti");
43        raketti.CollisionIgnoreGroup = 2;
44        raketti.Image = kuva;
45        Timer ajastin = new Timer();
46        ajastin.Interval = 0.10;
47        ajastin.Timeout += asetanopeus;
48        ajastin.Start();
49        AddCollisionHandler(raketti, "vihollinen", TormaaViholliseen);
50        AddCollisionHandler(raketti, "maali", tormaamaaliin);
51        AddCollisionHandler(raketti, "boosti", keraaBoosti);
52        AddCollisionHandler(raketti, "hidaste", keraaHidaste);
53        AddCollisionHandler(raketti, "asteroidi", TormaaViholliseen);
54        Ase();
55        raketti.Add(raketinAse);
56
57    }
58    void tormaamaaliin(PhysicsObject raketti, PhysicsObject maali)
59    {
60        if (kentat.Length > kenttaMenossa +1)
61        { SeuraavaKentta(); }
62
63        else
64        {
65            ClearAll();
66            TarkistaPaasitkoListalle();
67        }
68    }
69    void LuoKentta()
70    {
71        Level.Background.Color = Color.White;
72        TileMap kentta = TileMap.FromLevelAsset(kentat[kenttaMenossa]);
73        kentta.SetTileMethod('p', luoraketti);
74        kentta.SetTileMethod('#', LisaaTaso);
75        kentta.SetTileMethod('m', LisaaMaali);
76        kentta.SetTileMethod('b', Boosti);
77        kentta.SetTileMethod('h', Hidaste);
78        kentta.SetTileMethod('s', LuoSavu);
79        kentta.SetTileMethod('v', LuoVihollinen);
80        kentta.SetTileMethod('a', LuoAsteroidi);
81        kentta.Execute();
82
83
84    }
85    void LisaaTaso(Vector paikka, double leveys, double korkeus)
86    {
87        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
88        taso.Position = paikka;
89        taso.Color = Color.Blue;
90        Add(taso);
91        taso.Tag = "vihollinen";
92
93    }
94    void LisaaMaali(Vector paikka, double leveys, double korkeus)
95    {
96        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
97        maali.Position = paikka;
98        maali.Color = Color.Blue;
99        Add(maali);
100        maali.Tag = "maali";
101        maali.Color = Color.Pink;
102        maali.CollisionIgnoreGroup = 5;
103
104
105    }
106    void LuoOhjaimet()
107    {
108        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
109        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
110        Keyboard.Listen(Key.Right, ButtonState.Down, kaanna, "", -1.7);
111        Keyboard.Listen(Key.Left, ButtonState.Down, kaanna, "", 1.7);
112        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, null, raketinAse);
113
114    }
115
116    void kaanna(double turn)
117    {
118        raketti.Angle += Angle.FromDegrees(turn);
119
120
121
122    }
123
124    void asetanopeus()
125    {
126        raketti.Velocity = Vector.FromLengthAndAngle(raketinNopeus, raketti.Angle);
127    }
128
129    void TormaaViholliseen(PhysicsObject pelaaja, PhysicsObject vihollinen)
130    {
131        //pelaaja.Destroy();
132        Pisteet();
133        ClearAll();
134        raketinNopeus = 75.0;
135        AloitaPeli();
136        //aloitaalusta();
137        DoNextUpdate(delegate { raketti.StopAngular(); });
138    }
139    void aloitaalusta()
140    {
141        raketti.StopAngular();
142        raketinNopeus = 75.0;
143        raketti.Position = pelaajanAlkuPaikka;
144        raketti.Velocity = Vector.Zero;
145        raketti.Angle = Angle.FromDegrees(90);
146
147
148
149    }
150    void Lisaalaskuri()
151    {
152        IntMeter laskuri;
153        if (pelaajanpisteet == null)
154        {
155            laskuri = new IntMeter(0);
156        }
157        else
158        {
159            laskuri = pelaajanpisteet;
160        }
161        pelaajanpisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0, laskuri);
162    }
163    IntMeter LuoPisteLaskuri(double x, double y, IntMeter laskuri)
164    {
165
166        Label naytto = new Label();
167        naytto.BindTo(laskuri);
168        naytto.X = x;
169        naytto.Y = y;
170        naytto.TextColor = Color.Black;
171        naytto.BorderColor = Color.White;
172        Add(naytto);
173        return laskuri;
174    }
175
176    void Pisteet()
177    {
178        pelaajanpisteet.Value += 1;
179
180
181
182    }
183
184    void AlkuValikko()
185    {
186
187        MultiSelectWindow AlkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
188        "Aloita peli", "Parhaat pisteet", "Lopeta");
189        Add(AlkuValikko);
190        AlkuValikko.AddItemHandler(0, AloitaPeli);
191        AlkuValikko.AddItemHandler(1, Parhaatpisteet);
192        AlkuValikko.AddItemHandler(2, Exit);
193        AlkuValikko.DefaultCancel = 3;
194        AlkuValikko.Color = Color.Red;
195        Mouse.IsCursorVisible = true;
196    }
197
198
199    public void Aloitapeli(Window sender)
200    {
201        //...
202    }
203
204
205
206    void TarkistaPaasitkoListalle()
207    {
208        HighScoreWindow TopIkkuna = new HighScoreWindow("Parhaat pisteet", "Onnittelut Paasit Listalle",
209           TopLista, pelaajanpisteet.Value);
210
211        TopIkkuna.Closed += TallennaPisteet;
212        Add(TopIkkuna);
213    }
214
215
216
217    void Parhaatpisteet()
218    {
219        HighScoreWindow TopIkkuna = new HighScoreWindow(
220            "Parhaat pisteet",
221
222            TopLista);
223        TopIkkuna.Closed += delegate { AlkuValikko(); };
224        Add(TopIkkuna);
225    }
226
227
228    void AloitaPeli()
229    {
230        MediaPlayer.Play("TaustaMusa");
231        //MediaPlayer.PlayFromFile("TaustaMusa.mp3");
232        MediaPlayer.IsRepeating = true;
233        LuoKentta();
234        Lisaalaskuri();
235        LuoOhjaimet();
236        Camera.ZoomToLevel();
237    }
238
239
240    void TallennaPisteet(Window sender)
241    {
242        DataStorage.Save<ScoreList>(TopLista, "pisteet.xml");
243        pelaajanpisteet.Value = 0;
244        AlkuValikko();
245
246    }
247
248    void SeuraavaKentta()
249    {
250        ClearAll();
251        kenttaMenossa++;
252        if (kenttaMenossa >= kentat.Length) { kenttaMenossa = 0; AlkuValikko(); }
253        else
254        {
255            AloitaPeli();
256        }
257
258    }
259    void Boosti(Vector paikka, double leveys, double korkeus)
260    {
261
262        PhysicsObject boosti = PhysicsObject.CreateStaticObject(leveys, korkeus);
263        boosti.IgnoresCollisionResponse = true;
264        Add(boosti);
265        boosti.Position = paikka;
266        boosti.Tag = "boosti";
267        boosti.Color = Color.Red;
268
269    }
270    void keraaBoosti(PhysicsObject pelaaja, PhysicsObject boosti)
271    {
272        raketinNopeus = 270.0;
273        Timer.SingleShot(1.0, delegate { raketinNopeus = 75.0; });
274    }
275    void Hidaste(Vector paikka, double leveys, double korkeus)
276    {
277
278        PhysicsObject hidaste = PhysicsObject.CreateStaticObject(leveys, korkeus);
279        hidaste.IgnoresCollisionResponse = true;
280        Add(hidaste);
281        hidaste.Position = paikka;
282        hidaste.Tag = "hidaste";
283        hidaste.Color = Color.Green;
284
285    }
286    void keraaHidaste(PhysicsObject pelaaja, PhysicsObject hidaste)
287    {
288        raketinNopeus = 25.0;
289        Timer.SingleShot(2.0, delegate { raketinNopeus = 75; });
290    }
291    void LuoSavu(Vector paikka, double leveys, double korkeus)
292    {
293        Smoke savu = new Smoke();
294        savu.Position = paikka;
295        Add(savu);
296        savu.AlphaAmount = 0.08;
297        //savu.Image = LoadImage("raketti");
298
299
300    }
301    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
302    {
303        PhysicsObject Viholllinen = PhysicsObject.CreateStaticObject(leveys, korkeus);
304        Viholllinen.Position = paikka;
305        Viholllinen.Color = Color.Brown;
306        Add(Viholllinen);
307        Viholllinen.CollisionIgnoreGroup = 5;
308        Timer ajastin = new Timer();
309        ajastin.Interval = 2.1;
310        ajastin.Timeout += delegate { ammukohti(Viholllinen, raketti); };
311        ajastin.Start();
312    }
313    void ammukohti(PhysicsObject vihollinen, PhysicsObject pelaaja)
314    {
315
316        Vector suunta = pelaaja.Position - vihollinen.Position;
317        PhysicsObject ammus = new PhysicsObject(15, 15);
318        ammus.Position = vihollinen.Position;
319        ammus.CollisionIgnoreGroup = vihollinen.CollisionIgnoreGroup;
320        Add(ammus);
321        ammus.Velocity = suunta.Normalize() * 500;
322        ammus.Tag = "vihollinen";
323        AddCollisionHandler(ammus, CollisionHandler.DestroyObject);
324        ammus.Color = Color.Orange;
325
326    }
327    void Ase()
328    {
329        raketinAse = new AssaultRifle(0, 0);
330        raketinAse.Ammo.Value = 1000;
331        raketinAse.ProjectileCollision = AmmusOsui;
332    }
333    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
334    {
335
336    }
337    void AmmuAseella(AssaultRifle ase)
338    {
339        PhysicsObject ammus = ase.Shoot();
340        if (ammus != null)
341        {
342
343            ammus.CollisionIgnoreGroup = 5;
344            AddCollisionHandler(ammus, ammustormaa);
345        }
346    }
347    void ammustormaa(PhysicsObject ammus, PhysicsObject kohde)
348    {
349        ammus.Destroy();
350        if ((String)kohde.Tag == "tuhoutuva")
351        {
352            kohde.Destroy();
353        }
354    }
355    void LuoAsteroidi(Vector paikka, double leveys, double korkeus)
356    {
357        PhysicsObject asteroidi = new PhysicsObject(70.0, 75.0);
358        asteroidi.Tag = "tuhoutuva";
359        asteroidi.Color = Color.Black;
360        Add(asteroidi);
361        asteroidi.Position = paikka;
362
363
364
365    }
366}
367
368
Note: See TracBrowser for help on using the repository browser.