source: 2010/23/tajomyll/EHGABWWTGSBIAE/Peli.cs @ 751

Revision 751, 14.2 KB checked in by tajomyll, 10 years ago (diff)

Peli saatu valmiiksi!

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5using System.Collections.Generic;
6
7
8namespace EHGABWWTGSBIAE // Extremely Hard Game About Boy Who Wants To Go Shopping, But It Ain't Easy
9{
10
11    /// <summary>
12    /// Peli olisi IWBTG kaltainen peli, jossa oli hienoja ideoita, mutta oli todella vaikea.
13    /// Pelissä voi hypellä, ja juosta. Pelaajan pitää päästä Kauppaan. Hänen tiellään on monenlaisia esteitä, jotka vaikeuttavat pelaajan elämää.
14    /// Tämän hetkinen versio:
15    /// Version 0.1
16    /// Tulevaisuudessa peliin tulee vähintään kaksikymmentä huonetta .
17    /// </summary>
18    class Tasohyppely : PhysicsGame
19    {
20        const int ruudunLeveys = 20;
21        const int ruudunKorkeus = 32;
22
23        const double nopeus = 200;
24        const double hyppyVoima = 3500;
25
26        IntMeter pisteLaskuri;
27        ValueDisplay pisteNaytto;
28
29        PlatformCharacter pelaaja1;
30        PhysicsObject tynnyri;
31
32        int kenttaNro; // monesko kenttä on menossa
33
34        protected override void Begin()
35        {
36            kenttaNro = 0;
37            Level.Width = ruudunLeveys * 62;
38            Level.Height = ruudunKorkeus * 32;
39
40            // Luodaan pistelaskuri
41            pisteLaskuri = new IntMeter(0);
42
43            // luodaan pistelaskunäyttö
44            pisteNaytto = new ValueDisplay();
45            pisteNaytto.Text = "Pisteitä: ";
46            pisteNaytto.X = Screen.RightSafe - 250;
47            pisteNaytto.Y = Screen.TopSafe - 50;
48            pisteNaytto.BindTo(pisteLaskuri);
49            Add(pisteNaytto);    // lisätään peliin
50
51            Camera.StayInLevel = true;
52
53            seuraavaKentta();
54            MessageDisplay.Add("Etsi iso tähti!");
55        }
56
57        void seuraavaKentta()
58        {
59            ClearAll();
60          //  pisteLaskuri.Reset();
61
62          //  kenttaNro += 1;  lisätään kenttänumeroa yhdellä
63          //  MessageDisplay.Add("Kenttä " + kenttaNro);
64
65           /* if (kenttaNro == 0)
66            {
67                LuoKoti();
68                //Level.Background.Image = LoadImage("Koti");
69            }
70            else if (kenttaNro == 1)
71            {
72                LuoKallio();
73            }
74            */
75            // Asetetaan painovoima
76            Gravity = new Vector(0, -1000);
77
78            luoKentta();
79            lisaaNappaimet();
80        }
81
82        void luoKentta()
83        {
84            if (kenttaNro == 0)
85            {
86                LuoValikko();
87            }
88            else if (kenttaNro == 1)
89            {
90              //  Level.Background.Image = LoadImage("Koti");
91                LuoKoti();
92            }
93            else if (kenttaNro == 2)
94            {
95                LuoKallio();
96            }
97            else if (kenttaNro == 3)
98            {
99                LuoKauppa();
100            }
101            else if (kenttaNro == 4)
102            {
103                LuoLoppu();
104            }
105           
106        }
107
108        PhysicsObject lisaaTaso()
109        {
110            //MessageDisplay.Add("Tultiin lisaaTaso()-aliohjelmaan");
111            PhysicsObject taso = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
112            taso.Color = Color.Green;
113            taso.IsVisible = false;
114            //taso.X = x;
115            //taso.Y = y;
116            //Add(taso);
117            return taso;
118        }
119        PhysicsObject lisaaPiikit() 
120        {
121            PhysicsObject piikit = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
122            piikit.Color = Color.Blue;
123            piikit.IsVisible = false;
124            //piikit.X = x;
125            //piikit.Y = y;
126            AddCollisionHandler(piikit, KasittelePiikkienTormays);
127            //Add(piikit);
128            return piikit;
129        }
130
131        PhysicsObject lisaaReuna()
132        {
133            PhysicsObject reuna = PhysicsObject.CreateStaticObject(40, 32);
134            reuna.Shape = Shapes.Rectangle;
135            reuna.IsVisible = false;
136            AddCollisionHandler(reuna, KasitteleReunanTormays);
137            return reuna;
138        }
139        void KasitteleReunanTormays(PhysicsObject reuna, PhysicsObject kukaTormaa)
140        {
141            if (kukaTormaa.Tag.ToString() == "pelaaja") 
142            {
143                kenttaNro = kenttaNro + 1;
144                seuraavaKentta();
145            }
146           
147        }
148
149        PhysicsObject lisaaPelaaja()
150        {
151            pelaaja1 = new PlatformCharacter(28, 48);
152            pelaaja1.Mass = 4.0;
153            Image[] tekstuurit = LoadImages("Pelihahmo1", "Pelihahmo2", "Pelihahmo3","Pelihahmo4");
154
155            Animation kavely = new Animation(tekstuurit);
156            kavely.FPS = 7.0;
157
158            pelaaja1.Tag = "pelaaja";
159            pelaaja1.LeftWalkingAnimation = kavely;
160            pelaaja1.RightWalkingAnimation = Animation.Mirror(kavely);
161            pelaaja1.LeftIdleAnimation = new Animation(LoadImage ("Pelihahmo1" ));
162            pelaaja1.RightIdleAnimation = new Animation(Image.Mirror(LoadImage("Pelihahmo1")));
163            return pelaaja1;
164        }
165
166        void lisaaNappaimet()
167        {
168            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
169
170           if (kenttaNro == 0)
171            {
172                Keyboard.Listen(Key.N, ButtonState.Pressed, PoisValikosta, "Poistu valikosta pelaamaan");
173            }
174            else if (kenttaNro >= 1) 
175            {
176                Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
177               
178                Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
179                Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
180                Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
181                lisaaGamePadNappaimet(ControllerOne);
182            }
183        }
184        /// <summary>
185        /// lisää peliin
186        /// </summary>
187        /// <param name="controller"></param>
188        void lisaaGamePadNappaimet(GamePad controller)
189        {
190            controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
191            if (kenttaNro == 0)
192            {
193                controller.Listen(Button.Start, ButtonState.Pressed, PoisValikosta, "Poistuu valikosta");
194            }
195            else if (kenttaNro >= 1)
196            {
197                controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
198                controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
199                controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
200            }
201        }
202        /// <summary>
203        /// liikuttaa pelihahmoa
204        /// </summary>
205        /// <param name="hahmo"></param>
206        /// <param name="nopeus"></param>
207        void liikuta(PlatformCharacter hahmo, double nopeus)
208        {
209            hahmo.Walk(nopeus);
210        }
211        /// <summary>
212        /// antaa pelaajan hypätä
213        /// </summary>
214        /// <param name="hahmo"></param>
215        /// <param name="voima"></param>
216        void hyppaa(PlatformCharacter hahmo, double voima)
217        {
218            hahmo.Jump(voima);
219        }
220        /// <summary>
221        /// Lisää maalin, johon pelaajan täytyy päästä.
222        /// </summary>
223        /// <returns></returns>
224        PhysicsObject lisaaMaali()
225        {
226            PhysicsObject maali = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
227            maali.Color = Color.Gray;
228            maali.IsVisible = false;
229            AddCollisionHandler(maali, KasitteleMaaliinTulo);
230            return maali;
231        }
232        /// <summary>
233        /// lisää tynnyrin kentälle, kun pelaaja on tarpeeksi lähellä tynnyrin aloitus paikkaa.
234        /// </summary>
235        /// <param name="sender"></param>
236        void lisaaTynnyri(Timer sender)
237        {
238            tynnyri = new PhysicsObject(100, 100);
239            tynnyri.Shape = Shapes.Circle;
240            tynnyri.Mass = 4.0;
241
242            if (pelaaja1.X > 425.0)
243            {
244                tynnyri.X = 500.0;
245                tynnyri.Y = 500.0;
246
247                tynnyri.Image = LoadImage("tynnyri");
248                AddCollisionHandler(tynnyri, KasitteleTynnyrinTormays);
249                //  Image[] tekstuurit = LoadImages("tynnyri", "tynnyri2", "tynnyri3", "tynnyri4");
250
251                //    Animation pyoriminen = new Animation(tekstuurit);
252                //  pyoriminen.FPS = 7.0;
253                /*
254                            tynnyri.Tag = "tynnyri";
255                            tynnyri.LeftWalkingAnimation = pyoriminen;
256                            tynnyri.RightWalkingAnimation = Animation.Mirror(pyoriminen);
257                            tynnyri.LeftIdleAnimation = new Animation(LoadImage("tynnyri"));
258                            tynnyri.RightIdleAnimation = new Animation(Image.Mirror(LoadImage("tynnyri")));*/
259
260                Add(tynnyri);
261
262                sender.Stop();
263            }
264        }
265        /// <summary>
266        /// Käsittelee pelaajan maalin tulon, eli kun pelaaja tulee maaliin, niin peli lopetetaan.
267        /// </summary>
268        /// <param name="maali"></param>
269        /// <param name="pelaaja1"></param>
270        void KasitteleMaaliinTulo(PhysicsObject maali, PhysicsObject pelaaja1)
271        {
272            kenttaNro = kenttaNro + 1;
273            seuraavaKentta();
274        }
275        /// <summary>
276        /// Käsittelee pelaajan törmäyksen piikkien kanssa eli kun pelaaja putoaa piikeihin, niin peli alkaa alusta.
277        /// </summary>
278        /// <param name="piikit"></param>
279        /// <param name="kukaTormaa"></param>
280        void KasittelePiikkienTormays(PhysicsObject piikit, PhysicsObject kukaTormaa)
281        {
282            if (kukaTormaa == pelaaja1)
283            {
284                kenttaNro = 1;
285                seuraavaKentta();
286                pelaaja1.X = -500;
287                pelaaja1.Y = Level.Bottom + 1000;
288            }
289        }
290        /// <summary>
291        /// Käsittelee pelaajan törmayksen tynnyrin kanssa eli kun tynnyri putoaa pelaajan päälle niin peli aloitetaan alusta.
292        /// </summary>
293        /// <param name="tynnyri"></param>
294        /// <param name="kukaTormaa"></param>
295        void KasitteleTynnyrinTormays(PhysicsObject tynnyri, PhysicsObject kukaTormaa)
296        {
297            if (kukaTormaa == pelaaja1)
298            {
299                kenttaNro = 1;
300                seuraavaKentta();
301                pelaaja1.X = -500;
302                pelaaja1.Y = Level.Bottom + 1000;
303            }
304        }
305        /// <summary>
306        /// Luo valikon, josta voi valita, mitä tehdään.
307        /// </summary>
308        void LuoValikko()
309        {
310            Level.CreateBorders();
311
312            Level.Background.Image = LoadImage("Päävalikko");
313            Level.Background.Size = new Vector(1240, 1024);
314
315            lisaaNappaimet();
316
317    //        Keyboard.Listen(Key.N, ButtonState.Pressed, LuoKoti, "Poistu valikosta pelaamaan");
318        }
319        /// <summary>
320        /// Luo kentän "Koti"
321        /// </summary>
322        void LuoKoti()
323        {
324            //Level.Background = new Background(new Vector(1240, 1024)).Image = LoadImage("Koti");
325            //Background tausta = new Background(new Vector(1240, 1024));
326            //tausta.Image = LoadImage("Koti");
327            //Add(tausta);
328            Level.CreateBorders();
329           
330            Level.Background.Image = LoadImage("Koti");
331            Level.Background.Size = new Vector(1240, 1024);
332
333            var merkit = new Dictionary<char, ObjectCreator>();
334            merkit['x'] = lisaaTaso;
335            merkit['i'] = lisaaPiikit;
336            merkit['p'] = lisaaPelaaja;
337            merkit['|'] = lisaaReuna;
338            char[,] ruudut = Tiles.ReadFromFile("kentta1.txt");
339            Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
340
341
342            //  lisaaMaali();
343
344        }
345
346        /// <summary>
347        /// Luo kallion, jossa tynnyri putoaa pelaajan päähän.
348        /// </summary>
349        void LuoKallio()
350        {
351
352            Timer ajastin = new Timer();
353            ajastin.Interval = 0.5;
354            ajastin.Trigger += lisaaTynnyri;
355            Add(ajastin);
356
357            ajastin.Start();
358
359            Level.Background.Image = LoadImage("Kallio");
360            Level.Background.Size = new Vector(1240, 1024);
361            Level.CreateBorders();
362
363            var merkit = new Dictionary<char, ObjectCreator>();
364            merkit ['x'] = lisaaTaso;
365            merkit ['i'] = lisaaPiikit;
366            merkit ['p'] = lisaaPelaaja;
367            merkit ['|'] = lisaaReuna;
368            char[,] ruudut = Tiles.ReadFromFile("kallio.txt");
369            Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
370        }
371        /// <summary>
372        /// Luo pelin viimeisen paikan, "Kaupan".
373        /// </summary>
374        void LuoKauppa()
375        {
376            Level.Background.Image = LoadImage("Kauppa");
377            Level.Background.Size = new Vector(1240, 1024);
378            Level.CreateBorders();
379
380            var merkit = new Dictionary<char, ObjectCreator>();
381            merkit['x'] = lisaaTaso;
382            merkit['i'] = lisaaPiikit;
383            merkit['p'] = lisaaPelaaja;
384            merkit['|'] = lisaaReuna;
385            merkit['m'] = lisaaMaali;
386            char[,] ruudut = Tiles.ReadFromFile("kauppa.txt");
387            Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
388        }
389        /// <summary>
390        /// Luo lopputekstin.
391        /// </summary>
392        void LuoLoppu()
393        {
394            Level.Background.Image = LoadImage("LoppuTeksti");
395            Level.Background.Size = new Vector(1240, 1024);
396            Level.CreateBorders();
397        }
398        /// <summary>
399        /// Aliohjelma, jolla poistutaan valikosta peliä pelaamaan.
400        /// </summary>
401        void PoisValikosta()
402        {
403            kenttaNro = kenttaNro + 1;
404            seuraavaKentta();
405        }
406           
407    }
408}
Note: See TracBrowser for help on using the repository browser.