source: 2010/23/vipaerpo/Chavos world/Peli.cs @ 758

Revision 758, 8.6 KB checked in by vipaerpo, 11 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6using System.Collections.Generic;
7
8namespace Chavos_world
9{
10    /// <summary>
11    /// Tekijä: Vili P.
12    /// Päivämäärä kun aloitin pelin tekemisen, ja kun sain valmiiksi: 07.06 - 11.06
13    /// Pelin juoni:Chavon vanhemmat ovat vankilassa, koska heillä ei ollut rahaa maksaa veroja,
14    ///             Joten Chavo alkaa etsiä rahoja omengradin maasta, vapauttaakseen vanhempansa vankilasta
15    /// </summary>
16    class Tasohyppely : PhysicsGame
17    {
18        const double nopeus = 200;
19        const double hyppyVoima = 4000;
20
21        IntMeter RahaLaskuri;
22        int paljonTarvitaanKolikoita;
23        ValueDisplay pisteNaytto;
24
25        PlatformCharacter pelaaja1;
26
27        int kenttaNro; // monesko kenttä on menossa
28
29        const int ruudunLeveys = 80;
30        const int ruudunKorkeus = 80;
31
32
33        protected override void Begin()
34        {
35            kenttaNro = 0;
36            Level.Width = 1000;
37            Level.Height = 500;
38
39
40           
41            // Luodaan pistelaskuri
42            RahaLaskuri = new IntMeter(0);
43
44            // luodaan pistelaskunäyttö
45            pisteNaytto = new ValueDisplay();
46            pisteNaytto.Text = "Rahoja : ";
47            pisteNaytto.TextColor = Color.Black;
48
49            pisteNaytto.X = Screen.RightSafe - 250;
50            pisteNaytto.Y = Screen.TopSafe - 50;
51            pisteNaytto.BindTo(RahaLaskuri);
52
53           
54            Add(pisteNaytto);    // lisätään peliin
55           
56           
57            // Zoomataan lähemmäksi
58            Camera.ZoomFactor = 2.0;
59
60            Camera.StayInLevel = true;
61
62            seuraavaKentta();
63            MessageDisplay.Add("kerää tarpeeksi rahaa päästäksesi seuraavaan tasoon!");
64        }
65
66        void seuraavaKentta()
67        {
68            ClearAll();
69            Add(pisteNaytto);
70            RahaLaskuri.Reset();
71
72            // Toistaiseksi vain yksi kenttä
73            kenttaNro += 1; // lisätään kenttänumeroa yhdellä
74            MessageDisplay.Add("Kenttä " + kenttaNro);
75
76            // Asetetaan painovoima
77            Gravity = new Vector(0, -1000);
78
79            luoKentta();
80            lisaaNappaimet();
81            Camera.Follow(pelaaja1);
82        }
83
84        void luoKentta()
85        {
86            paljonTarvitaanKolikoita = 0;
87            //Level.CreateBorders(0.5, true);
88            var merkit = new Dictionary<char, ObjectCreator>();
89            merkit['1'] = luoPelaaja;
90            merkit['x'] = LuoPalikka;
91            merkit['o'] = LisaaRaha;
92            merkit['v'] = lisaaVartija;
93            merkit['a'] = lisaaassassin;
94            //merkit['p'] = luopiikit;
95
96            if (kenttaNro == 1) {
97                char[,] ruudut = Tiles.ReadFromFile("kenttä 1.txt");
98                Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
99            }
100            else if (kenttaNro == 2) {
101                char[,] ruudut = Tiles.ReadFromFile("chavos world kenttä 2.txt");
102                Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
103            }
104
105            else if (kenttaNro == 3)
106            {
107                char[,] ruudut = Tiles.ReadFromFile("chavos world kenttä 3.txt");
108                Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
109            }
110        }
111       
112        PhysicsObject lisaaassassin ()
113        {
114
115            PhysicsObject assassin = PhysicsObject.CreateStaticObject(150, 90);
116            assassin.Image = LoadImage ("assassin omena");
117            AddCollisionHandler (assassin, osuiVartijaan);
118
119            return assassin;
120
121        }
122
123       
124        PhysicsObject LuoPalikka()       
125        {
126            PhysicsObject palikka = PhysicsObject.CreateStaticObject(ruudunLeveys, ruudunKorkeus);
127            palikka.Shape = Shapes.Rectangle;
128            palikka.Color = Color.Gray;
129            return palikka;
130        }     
131 
132        PhysicsObject lisaaVartija()
133        {
134            PhysicsObject vartija = PhysicsObject.CreateStaticObject(150, 90);
135            vartija.Image = LoadImage("omena vartija (nuijia)");
136            AddCollisionHandler(vartija, osuiVartijaan);
137            return vartija;
138        }
139
140        void osuiVartijaan(PhysicsObject tormaaja, PhysicsObject kohde)
141        {
142            // Tässä tormaaja on vartija
143            AloitaTasoAlusta();
144            MessageDisplay.Add("sinä kuolit, joudut aloittamaan alusta");
145        }
146
147        void lisaaTaso(double x, double y)
148        {
149            PhysicsObject taso = PhysicsObject.CreateStaticObject(30, 50);
150            taso.Color = Color.Gray;
151            taso.X = x;
152            taso.Y = y;
153            Add(taso);
154        }
155
156        PhysicsObject luoPelaaja()
157        {
158            pelaaja1 = new PlatformCharacter(40, 79);
159            pelaaja1.Mass = 4.0;
160            pelaaja1.Image = LoadImage("chavo");
161            pelaaja1.X = 0;
162            pelaaja1.Y = Level.Bottom + 200;
163
164            AddCollisionHandler(pelaaja1, osuiMaaliin);
165
166            return pelaaja1;
167        }
168
169        void AloitaTasoAlusta()
170        {
171            kenttaNro--;
172            seuraavaKentta();
173        }
174
175        PhysicsObject LisaaRaha()
176        {
177            PhysicsObject raha = PhysicsObject.CreateStaticObject(20, 20, Shapes.Circle);
178            raha.Image = LoadImage("raha");
179            raha.IgnoresCollisionResponse = true; // Hahmo ei "tökkää" kun se osuu rahaan
180            paljonTarvitaanKolikoita++;
181            AddCollisionHandler(raha, rahaanOsuttiin);
182            return raha;
183        }
184
185        /// <summary>
186        /// Tämä aliohjelma tapahtuu, mikäli jokin osuu rahaan.
187        /// Tarkistetaan, jos törmääjä on pelaaja, niin sitten
188        /// lisätään pisteitä.
189        /// </summary>
190        /// <param name="raha"></param>
191        /// <param name="tormaaja"></param>
192        void rahaanOsuttiin(PhysicsObject raha, PhysicsObject tormaaja)
193        {
194            if (tormaaja is PlatformCharacter)
195            {
196                RahaLaskuri.Value = RahaLaskuri.Value + 1;
197                raha.Destroy();
198                MessageDisplay.Add("Raha kerätty");
199                if (RahaLaskuri.Value >= paljonTarvitaanKolikoita ) 
200                {
201                    seuraavaKentta();
202                } 
203            }
204        }
205
206        void lisaaMaali()
207        {
208            PhysicsObject maali = PhysicsObject.CreateStaticObject(50, 50, Shapes.Circle);
209            maali.Tag = "maali";
210            maali.IgnoresCollisionResponse = true;
211            maali.X = 30;
212            maali.Y = -60;
213            maali.Image = LoadImage("raha");
214            Add(maali);
215        }
216
217        void lisaaNappaimet()
218        {
219            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
220            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
221
222            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
223            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
224            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
225
226            lisaaGamePadNappaimet(ControllerOne);
227        }
228
229        void lisaaGamePadNappaimet(GamePad controller)
230        {
231            controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
232
233            controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
234            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
235            controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
236        }
237
238        void liikuta(PlatformCharacter hahmo, double nopeus)
239        {
240            hahmo.Walk(nopeus);
241        }
242
243        void hyppaa(PlatformCharacter hahmo, double voima)
244        {
245            hahmo.Jump(voima);
246        }
247
248        void osuiMaaliin(PhysicsObject collidingObject, PhysicsObject otherObject)
249        {
250            if (otherObject.Tag.ToString() == "maali")
251            {
252                this.PlaySound("maali");
253                int edellisenKentanPisteet = RahaLaskuri.Value;
254                seuraavaKentta();
255                MessageDisplay.Add("hyvä! Pääsit tämän kentän läpi! " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
256            }
257        }
258    }
259}
Note: See TracBrowser for help on using the repository browser.