source: 2010/23/ekeimaja/Labyrinth/Labyrinth/Peli.cs @ 777

Revision 777, 14.1 KB checked in by ekeimaja, 11 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5using System.Collections.Generic;
6
7
8namespace Labyrinth // © Eki Majankallio 2010
9{
10    public class Peli : PhysicsGame
11    {
12
13        PhysicsObject Pelaaja1;
14        PhysicsObject Pelaaja2;
15        PhysicsObject Maali;
16
17        int pisteitaKentassa = 0;
18
19        const int RuudunLeveys = 50;
20        const int RuudunKorkeus = 70;
21
22        int kentanNro = 1;
23        IntMeter pistelaskuri1;
24        IntMeter pistelaskuri2;
25        int pisteitakeratty = 0;
26
27        Timer kentanVaihtoAjastin;
28
29        protected override void Begin()
30        {
31            LuoPisteLaskurit();
32            MessageDisplay.TextColor = Color.White;
33
34            var merkit = new Dictionary<char, ObjectCreator>();
35            merkit['x'] = LuoSeina;
36            merkit['D'] = LuoHirvio;
37            merkit['0'] = LuoRuoka;
38            merkit['1'] = LuoPelaaja1;
39            merkit['2'] = LuoPelaaja2;
40            merkit['F'] = LuoMaali;
41
42            char[,] ruudut = Tiles.ReadFromFile("kentta1.txt");
43
44            Tiles.Insert(this, ruudut, merkit, RuudunLeveys, RuudunKorkeus);
45
46            LuoOhjain();
47
48            Camera.ZoomToLevel();
49        }
50
51        void LuoPisteLaskurit()
52        {
53            // Pelaajan 2 pistelaskuri
54            pistelaskuri2 = new IntMeter(0);
55            ValueDisplay pisteNaytto2 = new ValueDisplay();
56            pisteNaytto2.Text = "Pelaaja2 pisteet: ";
57            pisteNaytto2.X = Screen.Left + 100;
58            pisteNaytto2.Y = Screen.Top - 60;
59            pisteNaytto2.ValueColor = Color.Green;
60            pisteNaytto2.TextColor = Color.Green;
61            pisteNaytto2.BindTo(pistelaskuri2);
62            Add(pisteNaytto2);
63
64            // Pelaajan 1 pistelaskuri
65            pistelaskuri1 = new IntMeter(0);
66            ValueDisplay pisteNaytto1 = new ValueDisplay();
67            pisteNaytto1.Text = "Pelaaja1 pisteet: ";
68            pisteNaytto1.X = Screen.Left + 100;
69            pisteNaytto1.Y = Screen.Top - 20;
70            pisteNaytto1.ValueColor = Color.Red;
71            pisteNaytto1.TextColor = Color.Red;
72            pisteNaytto1.BindTo(pistelaskuri1);
73            Add(pisteNaytto1);
74        }
75
76        PhysicsObject LuoPelaaja1()
77        {
78            Pelaaja1 = new PhysicsObject(40.0, 40.0);
79            Pelaaja1.IgnoresPhysicsLogics = true;
80            Pelaaja1.CanRotate = false;
81            Pelaaja1.Tag = "1";
82            Pelaaja1.Image = LoadImage("player1");
83            Add(Pelaaja1);
84            AddCollisionHandler(Pelaaja1, RuokaanTormays);
85            AddCollisionHandler(Pelaaja1, MaaliinTormays);
86            return Pelaaja1;
87
88        }
89
90        PhysicsObject LuoPelaaja2()
91        {
92            Pelaaja2 = new PhysicsObject(40.0, 40.0);
93            Pelaaja2.IgnoresPhysicsLogics = true;
94            Pelaaja2.CanRotate = false;
95            Pelaaja2.Tag = "2";
96            Pelaaja2.Image = LoadImage("player2");
97            Add(Pelaaja2);
98            AddCollisionHandler(Pelaaja2, RuokaanTormays);
99            AddCollisionHandler(Pelaaja2, MaaliinTormays);
100            return Pelaaja2;
101        }
102
103        PhysicsObject LuoHirvio()
104        {
105            PhysicsObject Hirvio = new PhysicsObject(48.0, 48.0);
106            Hirvio.Image = LoadImage("monster");
107            Add(Hirvio);
108            Hirvio.IgnoresCollisionResponse = true;
109            Hirvio.Velocity = new Vector(90.0, 0.0);
110            AddCollisionHandler(Hirvio, SeinaanTormays);
111            AddCollisionHandler(Hirvio, PelaajaanTormays);
112            return Hirvio;
113        }
114
115        PhysicsObject LuoRuoka()
116        {
117            PhysicsObject Ruoka = PhysicsObject.CreateStaticObject(50.0, 50.0);
118            Ruoka.IgnoresCollisionResponse = true;
119            Ruoka.Image = LoadImage("food");
120            Ruoka.IgnoresPhysicsLogics = false;
121            pisteitakeratty += 1;
122            Add(Ruoka);
123            Ruoka.Tag = "r";
124            return Ruoka;
125        }
126
127        PhysicsObject LuoMaali()
128        {
129            Maali = new PhysicsObject(50.0, 50.0);
130            Maali.Image = LoadImage("goal");
131            Maali.IgnoresPhysicsLogics = true;
132            Maali.CanRotate = false;
133            Maali.Restitution = 0.0;
134            Add(Maali);
135            return Maali;
136        }
137
138        PhysicsObject LuoSeina()
139        {
140            PhysicsObject seina = PhysicsObject.CreateStaticObject(RuudunLeveys, RuudunKorkeus);
141            seina.Shape = Shapes.Rectangle;
142            seina.Restitution = 0.0;
143            seina.IgnoresPhysicsLogics = true;
144            seina.Color = Color.Black;
145            return seina;
146
147        }
148        void LuoOhjain()
149        {
150            //näppäin alhaalla
151            Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaaVasemmalle, null);
152            Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaaOikealle, null);
153            Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaaYlos, null);
154            Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaaAlas, null);
155            Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaaja2Vasemmalle, null);
156            Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaaja2Oikealle, null);
157            Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaaja2Ylos, null);
158            Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaaja2Alas, null);
159
160            //näppäin ylhäällä
161            Keyboard.Listen(Key.Left, ButtonState.Released, Pelaaja1.StopHorizontal, null);
162            Keyboard.Listen(Key.Right, ButtonState.Released, Pelaaja1.StopHorizontal, null);
163            Keyboard.Listen(Key.Up, ButtonState.Released, Pelaaja1.StopVertical, null);
164            Keyboard.Listen(Key.Down, ButtonState.Released, Pelaaja1.StopVertical, null);
165            Keyboard.Listen(Key.A, ButtonState.Released, Pelaaja2.StopHorizontal, null);
166            Keyboard.Listen(Key.D, ButtonState.Released, Pelaaja2.StopHorizontal, null);
167            Keyboard.Listen(Key.W, ButtonState.Released, Pelaaja2.StopVertical, null);
168            Keyboard.Listen(Key.S, ButtonState.Released, Pelaaja2.StopVertical, null);
169
170        }
171
172        #region Liikuttaminen
173        //pelaaja1
174        void LiikutaPelaajaaVasemmalle()
175        {
176            Pelaaja1.Hit(new Vector(-10, 0));
177        }
178
179        void LiikutaPelaajaaOikealle()
180        {
181            Pelaaja1.Hit(new Vector(20, 0));
182        }
183
184        void LiikutaPelaajaaYlos()
185        {
186            Pelaaja1.Hit(new Vector(0, 10));
187        }
188
189        void LiikutaPelaajaaAlas()
190        {
191            Pelaaja1.Hit(new Vector(0, -10));
192        }
193        //Pelaaja2
194        void LiikutaPelaaja2Vasemmalle()
195        {
196            Pelaaja2.Hit(new Vector(-10, 0));
197        }
198
199        void LiikutaPelaaja2Oikealle()
200        {
201            Pelaaja2.Hit(new Vector(20, 0));
202        }
203
204        void LiikutaPelaaja2Ylos()
205        {
206            Pelaaja2.Hit(new Vector(0, 10));
207        }
208
209        void LiikutaPelaaja2Alas()
210        {
211            Pelaaja2.Hit(new Vector(0, -10));
212        }
213        #endregion
214
215        void SeinaanTormays(PhysicsObject Hirvio, PhysicsObject seina)
216        {
217            Hirvio.Velocity = -Hirvio.Velocity;
218        }
219
220        void PelaajaanTormays(PhysicsObject Hirvio, PhysicsObject kohde)
221        {
222            if (kohde == Pelaaja1)
223            {
224                Pelaaja1.Destroy();
225                TextDisplay viesti = new TextDisplay(); viesti.TextColor = Color.Red;
226                Add(viesti);
227                viesti.X = Screen.Left + 300;
228                viesti.Y = Screen.Top - 780;
229                viesti.Text = "Pelaaja1 joutui Hirviön kitaan!";
230            }
231            if (kohde == Pelaaja2)
232            {
233                Pelaaja2.Destroy();
234                TextDisplay viesti = new TextDisplay(); viesti.TextColor = Color.Green;
235                Add(viesti);
236                viesti.X = Screen.Left + 300;
237                viesti.Y = Screen.Top - 800;
238                viesti.Text = "Pelaaja2 joutui Hirviön kitaan!";
239
240            }
241            if (Pelaaja1.IsDestroyed() && Pelaaja2.IsDestroyed())
242            {
243                Timer ajastin = new Timer();
244                ajastin.Interval = 5;
245                ajastin.Trigger += LopetaPeli;
246                Add(ajastin);
247                ajastin.Start();
248
249                TextDisplay viesti = new TextDisplay(); viesti.TextColor = Color.Orange;
250                Add(viesti);
251                viesti.X = Screen.Left + 650;
252                viesti.Y = Screen.Top - 780;
253                viesti.Text = "Ei pelaajia kentällä, GAME OVER!";
254
255            }
256        }
257
258        void RuokaanTormays(PhysicsObject tormaaja, PhysicsObject pallo)
259        {
260            if (pallo.Tag.ToString() == "r") // r-tägistä saa pisteitä
261            {
262                pisteitakeratty -= 1;
263                pallo.Destroy();
264                if (tormaaja.Tag.ToString() == "1")
265                {
266                    pistelaskuri1.Value += 10;
267                }
268                else if (tormaaja.Tag.ToString() == "2")
269                {
270                    pistelaskuri2.Value += 10;
271                }
272            }
273
274        }
275        void MaaliinTormays(PhysicsObject voittaja, PhysicsObject tormattava)
276        {
277            if (tormattava == Maali)
278            {
279
280                if (pisteitakeratty > pisteitaKentassa)
281                {
282                    TextDisplay viesti = new TextDisplay();
283                    Add(viesti);
284                    viesti.X = Screen.Left + 800;
285                    viesti.Y = Screen.Top - 800;
286                    viesti.Text = "Et ole kerännyt kaikkia pisteitä!";
287                    return;
288                }
289
290                if (voittaja.Tag.ToString() == "1")
291                {
292                    TextDisplay viesti = new TextDisplay();
293                    Add(viesti);
294                    viesti.X = Screen.Left + 300;
295                    viesti.Y = Screen.Top - 800;
296                    viesti.Text = "Pelaaja1 voitti pelin!";
297                }
298                else if (voittaja.Tag.ToString() == "2")
299                {
300                    TextDisplay viesti = new TextDisplay();
301                    viesti.TextColor = Color.White;
302                    Add(viesti);
303                    viesti.X = Screen.Left + 300;
304                    viesti.Y = Screen.Top - 800;
305                    viesti.Text = "Pelaaja2 voitti pelin!";
306                    TimeSpan aika = new TimeSpan(0, 0, 5);
307                    viesti.MaximumLifetime = aika;
308                }
309
310                kentanVaihtoAjastin = new Timer();
311                kentanVaihtoAjastin.Interval = 2;
312                kentanVaihtoAjastin.Trigger += VaihdaKenttaa;
313                Add(kentanVaihtoAjastin);
314                kentanVaihtoAjastin.Start();
315            }
316        }
317
318        void VaihdaKenttaa(Timer t)
319        {
320            MessageDisplay.Add("Tultiin VaihdaKenttaa()-aliohjelmaan");
321
322            kentanVaihtoAjastin.Stop();
323            ClearAll();
324            SeuraavaKentta(++kentanNro);
325        }
326
327        void SeuraavaKentta(int moneskoKentta)
328        {
329            MessageDisplay.Add
330                ("Vaihdetaan kenttää");
331            if (moneskoKentta == 1) LuoKentta1();
332            else if (moneskoKentta == 2) LuoKentta2();
333            else if (moneskoKentta == 3) PeliLopetus();
334        }
335        void LuoKentta1()
336        {
337            var merkit = new Dictionary<char, ObjectCreator>();
338            merkit['x'] = LuoSeina;
339            merkit['D'] = LuoHirvio;
340            merkit['0'] = LuoRuoka;
341            merkit['1'] = LuoPelaaja1;
342            merkit['2'] = LuoPelaaja2;
343            merkit['F'] = LuoMaali;
344
345            char[,] ruudut = Tiles.ReadFromFile("kentta1.txt");
346
347            Tiles.Insert(this, ruudut, merkit, RuudunLeveys, RuudunKorkeus);
348
349
350            Camera.ZoomToLevel();
351        }
352
353        void LuoKentta2()
354        {
355            var merkit = new Dictionary<char, ObjectCreator>();
356            merkit['x'] = LuoSeina;
357            merkit['D'] = LuoHirvio;
358            merkit['0'] = LuoRuoka;
359            merkit['1'] = LuoPelaaja1;
360            merkit['2'] = LuoPelaaja2;
361            merkit['F'] = LuoMaali;
362
363            char[,] ruudut = Tiles.ReadFromFile("kentta2.txt");
364
365            Tiles.Insert(this, ruudut, merkit, RuudunLeveys, RuudunKorkeus);
366
367            LuoOhjain();
368            Camera.ZoomToLevel();
369        }
370
371        void LuoKentta3()
372        {
373
374            var merkit = new Dictionary<char, ObjectCreator>();
375            merkit['x'] = LuoSeina;
376            merkit['D'] = LuoHirvio;
377            merkit['0'] = LuoRuoka;
378            merkit['1'] = LuoPelaaja1;
379            merkit['2'] = LuoPelaaja2;
380            merkit['F'] = LuoMaali;
381
382            char[,] ruudut = Tiles.ReadFromFile("kenttafinal.txt");
383
384            Tiles.Insert(this, ruudut, merkit, RuudunLeveys, RuudunKorkeus);
385
386            LuoOhjain();
387            Camera.ZoomToLevel();
388        }
389        void LopetaPeli(Timer t)
390        {
391            Exit();
392        }
393        void PeliLopetus()
394         {
395         TextDisplay viesti = new TextDisplay(); viesti.TextColor = Color.Red;
396         Add(viesti);
397         viesti.X = Screen.Left + 500;
398         viesti.Y = Screen.Top - 180;
399         viesti.Text = "LÄPÄISIT PELIN!";
400         TextDisplay viesti2 = new TextDisplay(); viesti.TextColor = Color.Red;
401         Add(viesti2);
402         viesti2.X = Screen.Left + 500;
403         viesti2.Y = Screen.Top - 190;
404         viesti2.Text = "Pelistä saattaa tulla uusia versioita kesän aikana...";
405         TextDisplay viesti3 = new TextDisplay(); viesti.TextColor = Color.Red;
406         Add(viesti3);
407         viesti3.X = Screen.Left + 500;
408         viesti3.Y = Screen.Top - 200;
409         viesti3.Text = "...joten jos haluat pelata, ota yhteyttä!";
410         TextDisplay viesti4 = new TextDisplay(); viesti.TextColor = Color.Red;
411         Add(viesti4);
412         viesti4.X = Screen.Left + 500;
413         viesti4.Y = Screen.Top - 210;
414         viesti4.Text = "-Eki Majankallio";
415         }
416    }
417}
418   
419   
Note: See TracBrowser for help on using the repository browser.