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

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

pelivalmis (päivitetty)

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