source: 2010/23/laemkaup/Tasohyppelypeli/Peli.cs @ 731

Revision 731, 9.8 KB checked in by laemkaup, 12 years ago (diff)

tein pelin melkein valmiiksi

Line 
1
2using System;
3using Jypeli;
4using Jypeli.ScreenObjects;
5using Jypeli.Assets;
6using System.Collections.Generic;
7
8
9namespace Tasohyppelypeli
10{
11
12    class Tasohyppely : PhysicsGame
13    {
14        const int ruudunLeveys = 30;
15        const int ruudunKorkeus = 30;
16
17
18
19        const double nopeus = 200;
20        const double hyppyVoima = 4000;
21
22
23        ValueDisplay pisteNaytto;
24        List<PhysicsObject> porkkanat;
25        PlatformCharacter pelaaja1;
26
27        int kenttaNro; // monesko kenttä on menossa
28
29        Timer ajastin;
30        IntMeter pistelaskuri;
31        ValueDisplay aikaNaytto;
32        IntMeter aikalaskuri;
33
34        protected override void Begin()
35        {
36           
37            kenttaNro = 0;
38            Level.Width = 1500;
39            Level.Height = 1000;
40            // Zoomataan lähemmäksi
41            Camera.ZoomFactor = 2.0;
42
43            Camera.StayInLevel = true;
44
45            porkkanat = new List<PhysicsObject>();
46
47            seuraavaKentta();
48           
49        }
50        void laskuriYlarajassa(int arvo)
51        {
52            MessageDisplay.TextColor = Color.Black;
53            MessageDisplay.Add(" Onnea! Voitit hammaspeikot!");
54        }
55        void seuraavaKentta()
56        {
57            ClearAll();
58           
59
60            //kenttaNro += 1; // lisätään kenttänumeroa yhdellä
61            //MessageDisplay.Add("Kenttä " + kenttaNro);
62
63            // Asetetaan painovoima
64            Gravity = new Vector(0, -1000);
65
66            luoKentta();
67            lisaaNappaimet();
68            lisaaLaskurit();
69            teeAjastin();
70            Camera.Follow(pelaaja1);
71        }
72
73        private void lisaaLaskurit()
74        {
75            pistelaskuri = new IntMeter(0);
76            pisteNaytto = new ValueDisplay();
77            pisteNaytto.Text = "Porkkanoita: ";
78            pisteNaytto.X = Screen.Right - 200;
79            pisteNaytto.Y = Screen.Top - 20;
80            pisteNaytto.ValueColor = Color.Green;
81            pisteNaytto.TextColor = Color.Green;
82            pisteNaytto.BindTo(pistelaskuri);
83            Add(pisteNaytto);
84            pistelaskuri.MaxValue = 20;
85            pistelaskuri.UpperLimit += laskuriYlarajassa;
86
87        }
88
89       void teeAjastin()
90    {
91        aikalaskuri = new IntMeter(0);
92        aikaNaytto = new ValueDisplay();
93        aikaNaytto.Text = "Sekunteja mennyt: ";
94        aikaNaytto.X = Screen.Right - 200;
95        aikaNaytto.Y = Screen.Top - 60;
96        aikaNaytto.ValueColor = Color.Green;
97        aikaNaytto.TextColor = Color.Green;
98        aikaNaytto.BindTo(aikalaskuri);
99        Add(aikaNaytto);
100       
101       
102     ajastin = new Timer();
103     ajastin.Interval = 1;
104     ajastin.Trigger += lisaaSekunteja;
105     Add( ajastin );
106     ajastin.Start();
107
108    }
109       void lisaaSekunteja(Timer Sender)
110       {
111           aikalaskuri.Value++;
112       }
113        void luoKentta()
114        {
115            var merkit = new Dictionary<char, ObjectCreator>();
116            merkit['x'] = LuoPalikka;
117            merkit['p'] = LuoPorkkana;
118            merkit['k'] = LuoKarkki;
119
120            char[,] ruudut = Tiles.ReadFromFile("kenttä.txt");
121            MessageDisplay.Add("Kerää kaikki porkkanat");
122
123
124            Level.Background.CreateGradient(Color.Pink, Color.SkyBlue);
125
126            /*
127            lisaaTaso(-200, -350, 100);
128            lisaaTaso(0, -200, 150);
129            lisaaTaso(50, 120, 50);
130            lisaaTaso(-60, 0, 150);
131            lisaaTaso(200, -150, 150);
132            lisaaTaso(280, 160, 200);
133            lisaaTaso(-400, -600, 100);
134            lisaaTaso(600, 230, 100);
135            lisaaTaso(-450, -200, 100);
136            lisaaTaso(-720, -130, 180);
137            lisaaTaso(-440, 0, 110);
138            lisaaTaso(600, 90, 120);
139            lisaaTaso(-110, 230, 100);
140            lisaaTaso(-220, 400, 100);
141            lisaaTaso(700, -600, 100);
142            lisaaTaso(-700, 160, 100);
143            lisaaTaso(600, -200, 100);
144            */
145            Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
146            //lisaaMaali();
147            lisaaPelaajat();
148            Level.CreateBorders();
149
150        }
151        void lisaaTaso(double x, double y, double koko)
152        {
153            PhysicsObject taso2 = PhysicsObject.CreateStaticObject(koko, 30);
154            taso2.Color = Color.Yellow;
155            taso2.X = x;
156            taso2.Y = y;
157            Add(taso2);
158        }
159
160
161        PhysicsObject LuoPalikka()
162        {
163            PhysicsObject palikka = PhysicsObject.CreateStaticObject(30.0, 30.0);
164            palikka.Shape = Shapes.Rectangle;
165            palikka.Color = Color.Yellow;
166            return palikka;
167
168
169        }
170        PhysicsObject LuoPorkkana()
171        {
172            PhysicsObject porkkana = PhysicsObject.CreateStaticObject(30.0, 30.0);
173            porkkana.Image = LoadImage("porkkana");
174            porkkana.Tag = "porkkana";
175            porkkanat.Add(porkkana);
176
177            return porkkana;
178
179        }
180        PhysicsObject LuoKarkki()
181        {
182            PhysicsObject karkki = PhysicsObject.CreateStaticObject(30.0, 30.0);
183            karkki.Image = LoadImage("karkki");
184            karkki.Tag = "karkki";
185
186            return karkki;
187        }
188
189
190
191
192
193
194        void lisaaPelaajat()
195        {
196            pelaaja1 = new PlatformCharacter(70, 70);
197            pelaaja1.Mass = 4.0;
198            pelaaja1.Image = LoadImage("Sammakko2");
199            pelaaja1.X = 0;
200            pelaaja1.Y = Level.Bottom + 120;
201
202            AddCollisionHandler(pelaaja1, pelaajaOsui);
203
204            Add(pelaaja1);
205        }
206
207        void lisaaMaali()
208        {
209            PhysicsObject maali = PhysicsObject.CreateStaticObject(50, 50, Shapes.Circle);
210            maali.Tag = "maali";
211            maali.IgnoresCollisionResponse = true;
212            maali.X = 30;
213            maali.Y = -60;
214            maali.Image = LoadImage("tahti");
215            Add(maali);
216        }
217
218        void lisaaNappaimet()
219        {
220            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
221            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
222
223            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
224            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
225            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
226            Keyboard.Listen(Key.Enter, ButtonState.Pressed, seuraavaKentta, "Aloita alusta");
227
228            lisaaGamePadNappaimet(ControllerOne);
229        }
230
231        void lisaaGamePadNappaimet(GamePad controller)
232        {
233            controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
234
235            controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
236            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
237            controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
238        }
239
240        void liikuta(PlatformCharacter hahmo, double nopeus)
241        {
242            hahmo.Walk(nopeus);
243        }
244
245        void hyppaa(PlatformCharacter hahmo, double voima)
246        {
247            hahmo.Jump(voima);
248        }
249
250        void pelaajaOsui(PhysicsObject collidingObject, PhysicsObject otherObject)
251        {
252            if (otherObject.Tag.ToString() == "maali")
253            {
254                this.PlaySound("maali");
255                int edellisenKentanPisteet = pistelaskuri.Value;
256                seuraavaKentta();
257                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
258            }
259            if (otherObject.Tag.ToString() == "porkkana")
260            {
261                pistelaskuri.Value++; // ++ tarkoittaa että arvoa lisätään yhdellä
262                porkkanat.Remove(otherObject);
263                otherObject.Destroy();
264                if (porkkanat.Count == 0) 
265                {
266                    ajastin.Stop();
267                }
268            }
269            if (otherObject.Tag.ToString() == "karkki")
270            {
271                otherObject.Destroy();
272                LuoHammaspeikko();
273            }
274        }
275
276        void LuoHammaspeikko()
277        {
278            PhysicsObject hammaspeikko = new PhysicsObject(180, 180, Shapes.Circle);
279            RandomMoverBrain LiikehtivatAivot = new RandomMoverBrain();
280            LiikehtivatAivot.Active = true;
281            LiikehtivatAivot.ChangeMovementSeconds = 3;
282            hammaspeikko.IgnoresGravity  = true;
283            hammaspeikko.Brain = LiikehtivatAivot;
284            hammaspeikko.Image = LoadImage("hammaspeikko");
285            hammaspeikko.Tag = "hammaspeikko";
286            hammaspeikko.Position = new Vector(RandomGen.NextDouble(Level.Left, Level.Right),
287                                               RandomGen.NextDouble(Level.Bottom, Level.Top));
288
289            // TODO : miten hammaspeikot liikkumaan ?           
290
291            AddCollisionHandler(hammaspeikko, osuttiinHammaspeikkoon);
292            Add(hammaspeikko);
293        }
294
295        void osuttiinHammaspeikkoon(PhysicsObject peikko, PhysicsObject kukaOsui)
296        {
297            if (kukaOsui is PlatformCharacter)
298            {
299                Explosion rajahdys = new Explosion(1000);
300                rajahdys.Position = pelaaja1.Position;
301
302                rajahdys.Speed = 500.0;
303                rajahdys.Force = 10000;
304                rajahdys.ShockwaveColor = Color.Red;
305                Add(rajahdys); 
306                MessageDisplay.Add("Osuit hammaspeikkoon, hävisit pelin!");
307                pelaaja1.Destroy();
308            }
309       
310        } 
311    }
312   
313}
Note: See TracBrowser for help on using the repository browser.