source: 2011/24/EkiM/Peli.cs @ 2087

Revision 2087, 15.4 KB checked in by ekeimaja, 9 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Assets;
4using Jypeli.Widgets;
5using System.Collections.Generic;
6using Jypeli.Controls;
7
8
9
10namespace Labyrinth
11{
12    public class Peli : PhysicsGame
13    {
14
15
16        PhysicsObject Pelaaja1;
17        PhysicsObject Pelaaja2;
18        PhysicsObject Maali;
19
20        Image pelaajan1Kuva = LoadImage("player1");
21        Image pelaajan2Kuva = LoadImage("player2");
22        Image hirvionKuva = LoadImage("monster");
23        Image maalinKuva = LoadImage("goal");
24        Image ruoanKuva = LoadImage("food");
25
26        int pisteitakentassa = 0;
27
28
29        int kentanNro = 1;
30        IntMeter pistelaskuri1;
31        IntMeter pistelaskuri2;
32        int pisteitakeratty = 0;
33
34        public override void Begin()
35       
36        {
37           
38            SetWindowSize(1280,1024, true ); 
39             Valikko();
40        }
41
42       
43
44        private void AloitaPeli()
45        {
46            ClearAll();
47            LuoPisteLaskurit();
48
49
50            MediaPlayer.IsRepeating = true;
51            MediaPlayer.Play("taustamusa");
52            SoundEffect ruokaAani = LoadSoundEffect("ruoka");
53
54           
55
56
57            TileMap merkit = TileMap.FromFile("kentta1.txt");
58
59            merkit.SetTileMethod('x', LuoSeina);
60            merkit.SetTileMethod('D', LuoHirvio);
61            merkit.SetTileMethod('0', LuoRuoka);
62            merkit.SetTileMethod('1', LuoPelaaja1);
63            merkit.SetTileMethod('2', LuoPelaaja2);
64            merkit.SetTileMethod('F', LuoMaali);
65            merkit.Execute(40, 40);
66            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "");
67            LuoOhjain();
68
69            Camera.ZoomToLevel();
70        }
71
72        void Valikko()
73        {
74            ClearAll();
75            valikonKohdat = new List<Label>();
76
77            MediaPlayer.IsRepeating = true;
78            MediaPlayer.Play("menumusa"); 
79
80            Label kohta1 = new Label("Aloita uusi peli");
81            kohta1.Position = new Vector(0, 40);
82            valikonKohdat.Add(kohta1);
83
84            Label kohta2 = new Label("Näytä peliohje");
85            kohta2.Position = new Vector(0, 0);
86            valikonKohdat.Add(kohta2);
87
88            Label kohta3 = new Label("Lopeta");
89            kohta3.Position = new Vector(0, -40);
90            valikonKohdat.Add(kohta3);
91
92            foreach (Label valikonKohta in valikonKohdat)
93            {
94                Add(valikonKohta);
95            }
96
97            Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
98            Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, TietojaPelista, null);
99            Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
100
101            Mouse.IsCursorVisible = true;
102            //Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
103            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
104        }
105        List<Label> valikonKohdat;
106
107
108
109        void LuoPisteLaskurit()
110        {
111            // Pelaajan 2 pistelaskuri
112            pistelaskuri2 = new IntMeter(0);
113            Label pisteNaytto2 = new Label();
114            pisteNaytto2.Text = "Pelaaja2 pisteet: ";
115            pisteNaytto2.X = Screen.Left + 100;
116            pisteNaytto2.Y = Screen.Top - 60;
117            pisteNaytto2.TextColor = Color.Green;
118            pisteNaytto2.BindTo(pistelaskuri2);
119            Add(pisteNaytto2);
120
121            // Pelaajan 1 pistelaskuri
122            pistelaskuri1 = new IntMeter(0);
123            Label pisteNaytto1 = new Label();
124            pisteNaytto1.Text = "Pelaaja1 pisteet: ";
125            pisteNaytto1.X = Screen.Left + 100;
126            pisteNaytto1.Y = Screen.Top - 20;
127            pisteNaytto1.TextColor = Color.Red;
128            pisteNaytto1.BindTo(pistelaskuri1);
129            Add(pisteNaytto1);
130        }
131
132        void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
133        {
134            Pelaaja1 = new PhysicsObject(32, 32);
135            Pelaaja1.Image = LoadImage("player1");
136            Pelaaja1.Tag = "1";
137            Pelaaja1.Position = paikka;
138            AddCollisionHandler(Pelaaja1, RuokaanTormays);
139            AddCollisionHandler(Pelaaja1, MaaliinTormays);
140            Add(Pelaaja1);
141        }
142
143
144
145        void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
146        {
147            Pelaaja2 = new PhysicsObject(32, 32);
148            Pelaaja2.Image = LoadImage("player2");
149            Pelaaja2.Tag = "2";
150            Pelaaja2.Position = paikka;
151            AddCollisionHandler(Pelaaja2, RuokaanTormays);
152            AddCollisionHandler(Pelaaja2, MaaliinTormays);
153            Add(Pelaaja2);
154        }
155
156        void LuoHirvio(Vector paikka, double leveys, double korkeus)
157        {
158            PhysicsObject Hirvio = new PhysicsObject(38, 38);
159            Hirvio.Image = LoadImage("monster");
160            Hirvio.Position = paikka;
161            Hirvio.IgnoresCollisionResponse = true;
162            Hirvio.Velocity = new Vector(90.0, 0.0);
163            AddCollisionHandler(Hirvio, SeinaanTormays);
164            AddCollisionHandler(Hirvio, PelaajaanTormays);
165            Add(Hirvio);
166        }
167
168        void LuoRuoka(Vector paikka, double leveys, double korkeus)
169        {
170            PhysicsObject Ruoka = PhysicsObject.CreateStaticObject(50, 50);
171            Ruoka.IgnoresCollisionResponse = true;
172            Ruoka.Image = LoadImage("food");
173            Ruoka.Position = paikka;
174            pisteitakentassa += 1;
175            Add(Ruoka);
176            Ruoka.Tag = "r";
177            Add(Ruoka);
178        }
179
180        void LuoMaali(Vector paikka, double leveys, double korkeus)
181        {
182            Maali = new PhysicsObject(50, 40);
183            Maali.Position = paikka;
184            Maali.Image = LoadImage("goal");
185            Maali.IgnoresPhysicsLogics = true;
186            Maali.CanRotate = false;
187            Maali.Restitution = 0.0;
188            Add(Maali);
189        }
190
191        void LuoSeina(Vector paikka, double leveys, double korkeus)
192        {
193            PhysicsObject seina = PhysicsObject.CreateStaticObject(40, 40);
194            seina.Shape = Shape.Rectangle;
195            seina.Position = paikka;
196            seina.Restitution = 0.0;
197            seina.IgnoresPhysicsLogics = false;
198            seina.Color = Color.Black;
199            Add(seina);
200
201        }
202
203        void LuoOhjain()
204        {
205            //näppäin alhaalla
206                //Pelaaja1
207            Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaaVasemmalle, null);
208            Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaaOikealle, null);
209            Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaaYlos, null);
210            Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaaAlas, null);
211                //Pelaaja2
212            Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaaja2Vasemmalle, null);
213            Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaaja2Oikealle, null);
214            Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaaja2Ylos, null);
215            Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaaja2Alas, null);
216
217            //näppäin ylhäällä
218                //Pelaaja1
219            Keyboard.Listen(Key.Left, ButtonState.Released, Pelaaja1.StopHorizontal, null);
220            Keyboard.Listen(Key.Right, ButtonState.Released, Pelaaja1.StopHorizontal, null);
221            Keyboard.Listen(Key.Up, ButtonState.Released, Pelaaja1.StopVertical, null);
222            Keyboard.Listen(Key.Down, ButtonState.Released, Pelaaja1.StopVertical, null);
223                //Pelaaja2
224            Keyboard.Listen(Key.A, ButtonState.Released, Pelaaja2.StopHorizontal, null);
225            Keyboard.Listen(Key.D, ButtonState.Released, Pelaaja2.StopHorizontal, null);
226            Keyboard.Listen(Key.W, ButtonState.Released, Pelaaja2.StopVertical, null);
227            Keyboard.Listen(Key.S, ButtonState.Released, Pelaaja2.StopVertical, null);
228
229        }
230
231        #region Liikuttaminen
232        //pelaaja1
233        void LiikutaPelaajaaVasemmalle()
234        {
235            Pelaaja1.Hit(new Vector(-10, 0));
236        }
237
238        void LiikutaPelaajaaOikealle()
239        {
240            Pelaaja1.Hit(new Vector(10, 0));
241        }
242
243        void LiikutaPelaajaaYlos()
244        {
245            Pelaaja1.Hit(new Vector(0, 10));
246        }
247
248        void LiikutaPelaajaaAlas()
249        {
250            Pelaaja1.Hit(new Vector(0, -10));
251        }
252        //Pelaaja2
253        void LiikutaPelaaja2Vasemmalle()
254        {
255            Pelaaja2.Hit(new Vector(-10, 0));
256        }
257
258        void LiikutaPelaaja2Oikealle()
259        {
260            Pelaaja2.Hit(new Vector(10, 0));
261        }
262
263        void LiikutaPelaaja2Ylos()
264        {
265            Pelaaja2.Hit(new Vector(0, 10));
266        }
267
268        void LiikutaPelaaja2Alas()
269        {
270            Pelaaja2.Hit(new Vector(0, -10));
271        }
272        #endregion
273
274        void SeinaanTormays(PhysicsObject Hirvio, PhysicsObject seina)
275        {
276            Hirvio.Velocity = -Hirvio.Velocity;
277        }
278
279        void PelaajaanTormays(PhysicsObject Hirvio, PhysicsObject kohde)
280        {
281            if (kohde == Pelaaja1)
282            {
283                Pelaaja1.Destroy();
284                Label viesti = new Label(); viesti.TextColor = Color.Red;
285                Add(viesti);
286                viesti.X = Screen.Left + 500;
287                viesti.Y = Screen.Top - 700;
288                viesti.Text = "Pelaaja 1 joutui Hirviön kitaan! Pelaaja 2 voitti!";
289                Timer kentanvaihto = new Timer();
290                kentanvaihto.Interval = 2;
291                kentanvaihto.Trigger += VaihdaKenttaa;
292                kentanvaihto.Start(1);
293            }
294            if (kohde == Pelaaja2)
295            {
296                Pelaaja2.Destroy();
297                Label viesti2 = new Label(); viesti2.TextColor = Color.Green;
298                viesti2.X = Screen.Left + 500;
299                viesti2.Y = Screen.Top - 700;
300                MessageDisplay.Add("Pelaaja 2 joutui Hirviön kitaan! Pelaaja 1 voitti!");
301                Timer kentanvaihto2 = new Timer();
302                kentanvaihto2.Interval = 2;
303                kentanvaihto2.Trigger += VaihdaKenttaa;
304                kentanvaihto2.Start(1);
305
306            }
307            if (Pelaaja1.IsDestroyed && Pelaaja2.IsDestroyed)
308            {
309                Timer ajastin = new Timer();
310                ajastin.Interval = 5;
311                ajastin.Trigger += LopetaPeli;
312                ajastin.Start();
313
314                MessageDisplay viesti3 = new MessageDisplay();
315                viesti3.Color = Color.Orange;
316                viesti3.X = Screen.Left + 500;
317                viesti3.Y = Screen.Top - 650;
318                MessageDisplay.Add("Ei pelaajia kentällä, Peli päättyy!");
319
320            }
321        }
322
323        void RuokaanTormays(PhysicsObject tormaaja, PhysicsObject pallo)
324        {
325            //ruokaAani.Play();
326
327            if (pallo.Tag.ToString() == "r") // r-tagista saa pisteitä
328            {
329                pisteitakeratty += 1;
330                pallo.Destroy();
331                if (tormaaja.Tag.ToString() == "1")
332                {
333                    pistelaskuri1.Value += 10;
334                }
335                else if (tormaaja.Tag.ToString() == "2")
336                {
337                    pistelaskuri2.Value += 10;
338                }
339            }
340
341        }
342        void MaaliinTormays(PhysicsObject maalitormaaja, PhysicsObject tormattava)
343        {
344            if (tormattava == Maali)
345            {
346
347                if (pisteitakeratty < pisteitakentassa)
348                {
349
350                    MessageDisplay.MessageTime = new TimeSpan(0, 0, 2);
351                    MessageDisplay.Add("Et ole kerännyt kaikkia pisteitä!");
352                    MessageDisplay.MaxMessageCount = 0;
353                    return;
354                }
355
356                if (maalitormaaja.Tag.ToString() == "1")
357                {
358
359                    MessageDisplay.Add("Pelaaja 1 voitti pelin!");
360                    MessageDisplay.MaxMessageCount = 1;
361
362                }
363                else if (maalitormaaja.Tag.ToString() == "2")
364                {
365                    MessageDisplay.Add("Pelaaja 2 voitti pelin!");
366                    MessageDisplay.MaxMessageCount = 1;
367
368                }
369
370
371
372                Timer ajastin = new Timer();
373                ajastin.Interval = 2;
374                ajastin.Trigger += VaihdaKenttaa;
375                ajastin.Start(1);
376
377               
378            }
379        }
380
381        void VaihdaKenttaa(Timer ajastin)
382        {
383            ClearAll();
384            SeuraavaKentta(++kentanNro);
385        }
386
387        void SeuraavaKentta(int moneskoKentta)
388        {
389
390            if (moneskoKentta == 1) LuoKentta1();
391            else if (moneskoKentta == 2) LuoKentta2();
392            else if (moneskoKentta == 3) LuoKentta3();
393        }
394        void LuoKentta1()
395        {
396            TileMap merkit = TileMap.FromFile("kentta1.txt");
397
398            merkit.SetTileMethod('x', LuoSeina);
399            merkit.SetTileMethod('D', LuoHirvio);
400            merkit.SetTileMethod('0', LuoRuoka);
401            merkit.SetTileMethod('1', LuoPelaaja1);
402            merkit.SetTileMethod('2', LuoPelaaja2);
403            merkit.SetTileMethod('F', LuoMaali);
404            merkit.Execute(40, 40);
405
406            LuoPisteLaskurit();
407            Camera.ZoomToLevel();
408
409        }
410
411        void LuoKentta2()
412        {
413            //MediaPlayer.Play("kakkosmusa");
414            TileMap merkit = TileMap.FromFile("kentta2.txt");
415
416            merkit.SetTileMethod('x', LuoSeina);
417            merkit.SetTileMethod('D', LuoHirvio);
418            merkit.SetTileMethod('0', LuoRuoka);
419            merkit.SetTileMethod('1', LuoPelaaja1);
420            merkit.SetTileMethod('2', LuoPelaaja2);
421            merkit.SetTileMethod('F', LuoMaali);
422            merkit.Execute(40, 40);
423
424            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "");
425            LuoOhjain();
426            LuoPisteLaskurit();
427            Camera.ZoomToLevel();
428        }
429        void LuoKentta3()
430        {
431            //MediaPlayer.Play("kolmosmusa");
432            TileMap merkit = TileMap.FromFile("kentta3.txt");
433
434            merkit.SetTileMethod('x', LuoSeina);
435            merkit.SetTileMethod('D', LuoHirvio);
436            merkit.SetTileMethod('0', LuoRuoka);
437            merkit.SetTileMethod('1', LuoPelaaja1);
438            merkit.SetTileMethod('2', LuoPelaaja2);
439            merkit.SetTileMethod('F', LuoMaali);
440            merkit.Execute(40, 40);
441
442            LuoOhjain();
443            Camera.ZoomToLevel();
444        }
445        void LopetaPeli(Timer t)
446        {
447            Exit();
448        }
449        void TietojaPelista()
450        {
451
452
453            Label tietokentta = new Label("© AquaCrystal Studios \n \n Labyrinttiseikkailua kaksinpelinä, jossa fysiikan lait vaikuttavat. \n \n Musiikit: flashkit.com, calpomatt - American Beaty, calpomatt - Elysium \n \n Grafiikat: Eki Majankallio \n \n Ideointi: Eki Majankallio \n \n Ohjelmointi: Eki Majankallio \n \n Tätä peliä tullaan kehittämään edelleen. Tämä versio on beta 1.1 \n Uudet versiot löytyvät AquaCrystal Studiosin kotisivuilta www.aquacrystalstudios.tk");
454            //tietokentta.BorderColor = Color.Red;
455            tietokentta.X = Screen.Left + 400;
456            tietokentta.Y = Screen.Top - 180;
457            Add(tietokentta);
458
459        }
460    }
461}
Note: See TracBrowser for help on using the repository browser.