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

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