source: 2015/23/OskuL/FysiikkaPeli2/FysiikkaPeli2/FysiikkaPeli2/space race.cs @ 5889

Revision 5889, 11.6 KB checked in by osjoallu, 6 years ago (diff)

valmispeli

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class FysiikkaPeli2 : PhysicsGame
10{
11    Image maalikuva = LoadImage("maali");
12    Image tynnyriKuva = LoadImage("hazarx2");
13    Image rajahdysKuva = LoadImage("");
14    SoundEffect rajahdysAani = LoadSoundEffect("");
15    PhysicsObject pelaaja1, pelaaja2;
16    PhysicsObject asteroidi;
17    PhysicsObject maali;
18
19    IntMeter pisteLaskuri1, pisteLaskuri2;
20    DoubleMeter elamaLaskuri;
21    DoubleMeter elamaLaskuri2;
22    public override void Begin()
23    {
24        AloitaPeli();
25       
26       
27
28       
29    }
30    private void LuoKentta()
31    {
32        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("SPACERACE");
33        ruudut.SetTileMethod(Color.Cyan, LuoPelaaja1);
34        ruudut.SetTileMethod(Color.White, LuoPistetynnyri);
35        ruudut.SetTileMethod(Color.Gold, LuoPelaaja2);
36        ruudut.SetTileMethod(Color.Black, LuoAsteroidi);
37        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoMaali);
38        ruudut.SetTileMethod(Color.Red, LuoReuna);
39        //Level.Background.CreateStars();
40
41
42        ruudut.Execute(20, 20);
43
44        Level.Background.Color = Color.Black;
45        Level.Size = new Vector(3000.0, 1800.0);
46
47        Level.Background.Image = LoadImage("earth");
48        Level.Background.ScaleToLevel();
49
50        //GameObject tausta = new GameObject(LoadImage("Earth"));
51
52        //Add(tausta, -3);
53        //Image taustakuva = LoadImage("space");
54        //GameObject taustaPilvet = new GameObject(Screen.Width * 1.5, Screen.Height * 1.5 );
55        //taustaPilvet.Image = taustakuva;
56        //Add(taustaPilvet, -3);
57        //Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
58
59
60
61        //Level.Background.Scale = 2.0;
62        //Level.Size = Level.Size * 2;
63        //Level.Background.
64    }
65
66    DoubleMeter LuoElamaLaskuri(Double x, Double y, PhysicsObject pelaaja)
67    {
68        DoubleMeter elamaLaskuri = new DoubleMeter(10);
69        elamaLaskuri.MaxValue = 10;
70
71        if (pelaaja.Tag.Equals("eka"))
72        {
73            elamaLaskuri.LowerLimit += ElamaLoppui1;
74        }
75
76        if (pelaaja.Tag.Equals("toka"))
77        {
78            elamaLaskuri.LowerLimit += ElamaLoppui2;
79        }
80
81        ProgressBar elamaPalkki = new ProgressBar(150, 20);
82        elamaPalkki.X = x;
83        elamaPalkki.Y = y;
84        elamaPalkki.BindTo(elamaLaskuri);
85        elamaPalkki.Color = Color.Transparent;
86        elamaPalkki.BarColor = Color.Red;
87        elamaPalkki.BorderColor = Color.Black;
88        Add(elamaPalkki);
89        return elamaLaskuri;
90
91    }
92
93
94    void LuoPistelaskuri1()
95    {
96        pisteLaskuri1 = new IntMeter(0);
97
98        Label pisteNaytto = new Label();
99        pisteNaytto.X = Screen.Left + 500;
100        pisteNaytto.Y = Screen.Top - 100;
101        pisteNaytto.TextColor = Color.Black;
102        pisteNaytto.Color = Color.White;
103        pisteNaytto.Title = "Pisteet";
104        pisteNaytto.BindTo(pisteLaskuri1);
105        IntMeter keratytEsineet = new IntMeter(0);
106        pisteLaskuri1.MaxValue = 10;
107        pisteLaskuri1.UpperLimit += delegate { KaikkiKeratty(pelaaja1); };
108        Add(pisteNaytto);
109    }
110
111    void LuoPistelaskuri2()
112    {
113        pisteLaskuri2 = new IntMeter(0);
114
115        Label pisteNaytto = new Label();
116        pisteNaytto.X = Screen.Right - 500;
117        pisteNaytto.Y = Screen.Top - 100;
118        pisteNaytto.TextColor = Color.Black;
119        pisteNaytto.Color = Color.White;
120        pisteNaytto.Title = "Pisteet";
121        pisteNaytto.BindTo(pisteLaskuri2);
122        IntMeter keratytEsineet = new IntMeter(0);
123        pisteLaskuri2.MaxValue = 10;
124        pisteLaskuri2.UpperLimit += delegate { KaikkiKeratty(pelaaja2); };
125        Add(pisteNaytto);
126    }
127
128    void KaikkiKeratty(PhysicsObject pelaaja)
129    {
130        // "moi pelaaja " + pelaaja.Tag + "!!!"
131       
132        // moi pelaaja eka!!!
133
134        MessageDisplay.Add("Maali auki " + pelaaja.Tag + "lle pelaajalle");
135        AktivoiMaali(pelaaja);
136    }
137
138    void  ElamaLoppui1()
139    {
140        MessageDisplay.Add("Hävisit, paremmin ensikerralla");
141        pelaaja1.Destroy();
142        Keyboard.Disable(Key.Up);
143        Keyboard.Disable(Key.Right);
144        Keyboard.Disable(Key.Left);
145        Keyboard.Disable(Key.Down);
146    }
147
148    void ElamaLoppui2()
149    {
150        MessageDisplay.Add("Hävisit, paremmin ensikerralla");
151        pelaaja2.Destroy();
152        Keyboard.Disable(Key.W);
153        Keyboard.Disable(Key.A);
154        Keyboard.Disable(Key.S);
155        Keyboard.Disable(Key.D);
156    }
157    private void LuoOhjaimet()
158    {
159        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, "Liikutetaan pelaajaa", 1, 1);
160        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, "käännä oikealle", 1, 2);
161        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, "käännä vasemmalle", 1, 3);
162        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, "jarru taaksepäin", 1, 4);
163
164        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, "Liikutetaan pelaajaa", 2, 1);
165        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, "käännä oikealle", 2, 2);
166        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "käännä vasemmalle", 2, 3);
167        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, "jarru taaksepäin", 2, 4);
168        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, "aloita peli uudestaan");
169    }
170    private void LiikutaPelaajaa(int pelaajaNro, int liikkeenTyyppi)
171    {
172        switch (pelaajaNro)
173        {
174            case 1:
175                switch (liikkeenTyyppi)
176                {
177                    case 1:
178                        pelaaja1.Push(Vector.FromLengthAndAngle(250.0, pelaaja1.Angle));//kaasu eteen                       
179                        break;
180                    case 2:
181                        pelaaja1.Angle += Angle.FromDegrees(-1.5);//oikealle=myötäpäivään
182                        break;
183                    case 3:
184                        pelaaja1.Angle += Angle.FromDegrees(1.5);//vasemmalle=vastapäivään
185                        break;
186                    case 4:
187                        pelaaja1.Push(-Vector.FromLengthAndAngle(250.0, pelaaja1.Angle));
188                        break;
189                }
190
191                break;
192            case 2:
193                switch (liikkeenTyyppi)
194                {
195                    case 1:
196                        pelaaja2.Push(Vector.FromLengthAndAngle(250.0, pelaaja2.Angle));//kaasu eteen                       
197                        break;
198                    case 2:
199                        pelaaja2.Angle += Angle.FromDegrees(-2.0);//oikealle=myötäpäivään
200                        break;
201                    case 3:
202                        pelaaja2.Angle += Angle.FromDegrees(2.0);//vasemmalle=vastapäivään
203                        break;
204                    case 4:
205                        pelaaja2.Push(-Vector.FromLengthAndAngle(250.0, pelaaja2.Angle));
206                        break;
207                }
208                break;
209        }
210    }
211
212    private void LuoAsteroidi(Vector paikka, double leveys, double korkeus)
213    {
214        asteroidi = new PhysicsObject(30, 30);
215        Image c = LoadImage("asteroid");
216        asteroidi.Image = c;
217        asteroidi.Position = paikka;
218        asteroidi.Tag = "asteroid";
219        Add(asteroidi);
220    }
221    private void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
222    {
223        pelaaja1 = new PhysicsObject(30, 30);
224        Image c = LoadImage("ship");
225        pelaaja1.Image = c;
226        pelaaja1.Position = paikka;
227        pelaaja1.Tag = "eka";
228        pelaaja1.AngularDamping = 0.9;
229        Add(pelaaja1);
230        pelaaja1.LinearDamping = 0.98;
231        AddCollisionHandler(pelaaja1, "asteroid", PelaajaOsuu);
232        AddCollisionHandler(pelaaja1, "piste", PelaajaOsuuPisteeseen);
233    }
234    private void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
235    {
236        pelaaja2 = new PhysicsObject(30, 30);
237        Image c = LoadImage("ship");
238        pelaaja2.Image = c;
239
240        pelaaja2.Position = paikka;
241        pelaaja2.Tag = "toka";
242        pelaaja2.AngularDamping = 0.9;
243        Add(pelaaja2);
244        pelaaja2.LinearDamping = 0.98;
245        AddCollisionHandler(pelaaja2, "asteroid", PelaajaOsuu);
246        AddCollisionHandler(pelaaja2, "piste", PelaajaOsuuPisteeseen);
247    }
248    private void LuoReuna(Vector paikka, double leveys, double korkeus)
249    {
250        PhysicsObject reuna = PhysicsObject.CreateStaticObject(20, 20);
251        reuna.Position = paikka;
252        Add(reuna);
253        reuna.Color = Color.Transparent;
254    }
255    private void LuoMaali(Vector paikka, double leveys, double korkeus)
256    {
257        maali = PhysicsObject.CreateStaticObject(50, 50);
258        maali.Position = paikka;
259
260        Add(maali);
261        maali.Image = maalikuva;
262    }
263    private void AktivoiMaali(PhysicsObject pelaaja)
264    {
265        AddCollisionHandler(maali, pelaaja.Tag, PeliLoppuu);
266        maali.Color = Color.Turquoise;
267    }
268
269    private void PeliLoppuu(PhysicsObject maali, PhysicsObject voittaja)
270    {
271        IsPaused = true;
272        Label voittoTeksti = new Label(voittaja.Tag + " voitti pelin.");
273        voittoTeksti.Color = Color.White;
274        voittoTeksti.Position = new Vector(0.0, 0.0);
275       
276        Add(voittoTeksti);
277    }
278    private void AloitaPeli()
279    {
280        ClearAll();
281        LuoPistelaskuri1();
282        LuoPistelaskuri2();
283        LuoKentta();
284        LuoOhjaimet();
285        //Camera.Position = pelaaja1.Position + new Vector(720, 0);
286        Camera.Follow(pelaaja1, pelaaja2);
287        Camera.FollowXMargin = 1000;
288        Camera.FollowYMargin = 100;
289        //Camera.StayInLevel = true;
290        elamaLaskuri = LuoElamaLaskuri(Screen.Left + 500, Screen.Top - 70, pelaaja1);
291        elamaLaskuri2 = LuoElamaLaskuri(Screen.Right - 500, Screen.Top - 70, pelaaja2);
292        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
293        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
294    }
295
296    void LuoPistetynnyri(Vector paikka, double leveys, double korkeus)
297    {
298        PhysicsObject tynnyri = new PhysicsObject(leveys, korkeus);
299        tynnyri.Position = paikka;
300        tynnyri.Image = tynnyriKuva;
301        tynnyri.Tag = "piste";
302        Add(tynnyri);
303
304       
305    }
306
307    void PelaajaOsuuPisteeseen(PhysicsObject pelaaja, PhysicsObject kohde)
308    {
309        kohde.Destroy();
310        if (pelaaja.Tag.Equals("eka"))
311        {
312            pisteLaskuri1.Value += 1; 
313        }
314        else if (pelaaja.Tag.Equals("toka"))
315        {
316            pisteLaskuri2.Value += 1;
317        }
318    }
319
320    void PelaajaOsuu(PhysicsObject pelaaja, PhysicsObject kohde)
321    {
322        if (pelaaja.Tag.Equals("eka"))
323        {
324            if (elamaLaskuri != null)
325            {
326                elamaLaskuri.Value -= 2;
327            }
328        }
329
330        if (pelaaja.Tag.Equals("toka"))
331        {
332            if (elamaLaskuri2 != null)
333            {
334                elamaLaskuri2.Value -= 2;
335            }
336        }
337
338
339
340        kohde.Destroy();
341        Explosion rajahdys = new Explosion(50);
342        rajahdys.Position = kohde.Position;
343        rajahdys.Speed = 500.0;
344        rajahdys.Force = 10;
345        //rajahdys.Image = rajahdysKuva;
346        //rajahdys.Sound = rajahdysAani;
347        //rajahdys.ShockwaveColor = Color.Yellow;
348        //rajahdys.ShockwaveColor = new Color(255, 0, 150, 90);
349        Add(rajahdys);
350    }
351
352
353}
Note: See TracBrowser for help on using the repository browser.