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

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