source: 2010/23/lavevake/Rise of darkness/Peli.cs @ 703

Revision 703, 11.4 KB checked in by lavevake, 12 years ago (diff)

Tein Rise of darknessia eteenpäin, kenttä tuli valmiiksi.

Line 
1using System.Collections.Generic;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6
7namespace Rise_of_darkness //  Lauri Kemppi 2010. All rights reserved.
8{
9    class Tasohyppely : PhysicsGame
10    {
11        const double nopeus = 200;
12        const double hyppyVoima = 4000;
13
14        IntMeter pisteLaskuri;
15        ValueDisplay pisteNaytto;
16        Timer laskuri;
17
18        const double virtaMaara = 5000;
19
20        bool voikoHirvioitaSyoda = false;
21
22        DoubleMeter virtaLaskuri;
23        ValueDisplay virtaNaytto;
24        BarGauge virtaNayttoBar;
25
26        PlatformCharacter pelaaja1;
27        PlatformCharacter Hirvio;
28        PhysicsObject Virta;
29        PhysicsObject Extra;
30        PhysicsObject Raha;
31
32        int kenttaNro; // monesko kenttä on menossa
33
34
35        protected override void Begin()
36        {
37            kenttaNro = 0;
38            Level.Width = 2000;
39            Level.Height = 1000;
40
41            // Luodaan pistelaskuri
42            pisteLaskuri = new IntMeter(0);
43
44            // luodaan pistelaskunäyttö
45            pisteNaytto = new ValueDisplay();
46            pisteNaytto.Text = "Pisteitä: ";
47            pisteNaytto.X = Screen.RightSafe - 250;
48            pisteNaytto.Y = Screen.TopSafe - 50;
49            pisteNaytto.BindTo(pisteLaskuri);
50            pisteNaytto.TextColor = Color.Yellow;
51            pisteNaytto.ValueColor = Color.Red;
52            Add(pisteNaytto);    // lisätään peliin
53
54            // Zoomataan lähemmäksi
55            Camera.ZoomFactor = 2.0;
56
57            Camera.StayInLevel = true;
58
59            seuraavaKentta();
60            MessageDisplay.Add("Pääse koneelle ennen kuin energia loppuu!");
61        }
62
63        void vahennaVirtaa(Timer t)
64        {
65            virtaLaskuri.Value -= 2;
66        }
67
68        void seuraavaKentta()
69        {
70            ClearAll();
71            pisteLaskuri.Reset();
72            Add(pisteNaytto);
73
74            kenttaNro += 1; // lisätään kenttänumeroa yhdellä
75            MessageDisplay.Add("Kenttä " + kenttaNro);
76
77            // Asetetaan painovoima
78            Gravity = new Vector(0, -1000);
79
80            luoKentta();
81            lisaaNappaimet();
82            Camera.Follow(pelaaja1);
83            LuoNaytot();
84            laskuri = new Timer();
85            laskuri.Interval = 0.001;
86            laskuri.Trigger += vahennaVirtaa;
87            Add(laskuri);
88            laskuri.Start();
89        }
90
91        void luoKentta()
92        {
93            Level.CreateBorders();
94            Level.Background.CreateGradient(Color.Black, Color.SkyBlue);
95
96            var merkit = new Dictionary<char, ObjectCreator>();
97            merkit['='] = lisaaTaso;
98            merkit['X'] = Pelaaja1;
99            merkit['0'] = LuoHirvio;
100            merkit['V'] = LuoVirta;
101            merkit['A'] = lisaaMaali;
102            merkit['E'] = LuoExtra;
103            merkit['R'] = LuoRaha;
104
105            const int ruudunLeveys = 50;
106            const int ruudunKorkeus = 50;
107
108            char[,] ruudut = Tiles.ReadFromFile("Text.txt");
109            Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
110
111            lisaaMaali();
112        }
113
114        PhysicsObject lisaaTaso()
115        {
116            PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30);
117            taso.Color = Color.Black;
118
119            Add(taso);
120            return taso;
121        }
122
123        PhysicsObject lisaaMaali()
124        {
125            PhysicsObject maali = PhysicsObject.CreateStaticObject(50, 50, Shapes.Circle);
126            maali.Tag = "maali";
127            maali.IgnoresCollisionResponse = true;
128            maali.Image = LoadImage("Kone 2");
129            return maali;
130        }
131
132        void lisaaNappaimet()
133        {
134            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
135            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
136
137            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", -nopeus);
138            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", nopeus);
139            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", hyppyVoima);
140
141            lisaaGamePadNappaimet(ControllerOne);
142        }
143
144        void lisaaGamePadNappaimet(GamePad controller)
145        {
146            controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
147
148            controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", -nopeus);
149            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", nopeus);
150            controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", hyppyVoima);
151        }
152
153        void liikuta(double nopeus)
154        {
155            pelaaja1.Walk(nopeus);
156        }
157
158        void hyppaa(double voima)
159        {
160            pelaaja1.Jump(voima);
161        }
162
163        void osuiMaaliin(PhysicsObject collidingObject, PhysicsObject otherObject)
164        {
165            if (otherObject.Tag.ToString() == "maali")
166            {
167                this.PlaySound("maali");
168                int edellisenKentanPisteet = pisteLaskuri.Value;
169                seuraavaKentta();
170                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
171            }
172        }
173
174        void lopetaPeli(Timer sender)
175        {
176            TextDisplay lopetus = new TextDisplay();
177            lopetus.Position = Screen.Center;
178            lopetus.TextColor = Color.Red;
179            Add(lopetus);
180            lopetus.Text = "Game over.\n"+
181            "Jos haluat aloittaa alusta, paina enter. Jos taas haluat lopettaa, paina Esc.";
182
183            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
184            Keyboard.Listen(Key.Enter, ButtonState.Pressed,AloitaAlusta,null);
185           
186        }
187
188        void KasitteleTormays(PhysicsObject pelaaja1, PhysicsObject toinen)
189        {
190            if (toinen.Tag.ToString() == "H")
191            {
192                if (voikoHirvioitaSyoda == true)
193                {
194                    toinen.Destroy();
195                    MessageDisplay.Add("Tuhosit hirviön!");
196                    pisteLaskuri.Value +=1;
197                }
198                else
199                {
200
201                    Timer lopetus = new Timer();
202                    lopetus.Interval = 0.01;
203                    lopetus.Trigger += new Timer.TriggerHandler(lopetaPeli);
204                    Add(lopetus);
205                    lopetus.Enabled = true;
206                }
207            }
208
209            else if (toinen.Tag.ToString() == "V")
210            {
211                virtaLaskuri.Value += 1500;
212                MessageDisplay.Add("Sait lisää virtaa taskulamppuusi.");
213                toinen.Destroy();
214                pisteLaskuri.Value += 1;
215            }
216            else if (toinen.Tag.ToString() == "E")
217            {
218                voikoHirvioitaSyoda = true;
219
220               
221
222                MessageDisplay.Add("Voit nyt syödä hirviöitä kymmenen sekunnin ajan!");
223
224                Timer syonti = new Timer();
225                syonti.Interval = 10;
226                syonti.Trigger += ajastin;
227                Add(syonti);
228                syonti.Start();
229               
230                toinen.Destroy();
231               
232            pisteLaskuri.Value += 1;
233            }
234        else if (toinen.Tag.ToString() == "R")
235            {
236                MessageDisplay.Add("Poimit rahan!");
237                pisteLaskuri.Value +=1;
238                toinen.Destroy();
239        }       
240        }
241
242        void LuoNaytot()
243        {
244            // viestinäytön väri valkoiseksi, jotta näkyy
245            MessageDisplay.TextColor = Color.White;
246
247            // polttoainelaskuri ja näytöt
248            virtaLaskuri = new DoubleMeter(virtaMaara);
249            virtaLaskuri.MaxValue = virtaMaara;
250            virtaLaskuri.LowerAlertValue = 750;
251            virtaLaskuri.DefaultValue = virtaMaara;
252            virtaLaskuri.LowerAlertValue = 1500;
253            virtaLaskuri.LowerAlert += virtaUhkaaLoppua;
254            virtaLaskuri.LowerLimit += virtaLoppui;
255
256            virtaNayttoBar = new BarGauge();
257            virtaNayttoBar.HorizontalOrigin = HorizontalAlignment.Left;
258            virtaNayttoBar.VerticalOrigin = VerticalAlignment.Top;
259            virtaNayttoBar.ValueColor = Color.Green;
260            virtaNayttoBar.Max = virtaMaara;
261            virtaNayttoBar.X = Screen.RightSafe - 20;
262            virtaNayttoBar.Y = Screen.TopSafe - 20;
263            virtaNayttoBar.Width = 30;
264            virtaNayttoBar.Height = 200;
265            virtaNayttoBar.BindTo(virtaLaskuri);
266            Add(virtaNayttoBar);
267
268            virtaNaytto = new ValueDisplay();
269            virtaNaytto.HorizontalOrigin = HorizontalAlignment.Left;
270            virtaNaytto.VerticalOrigin = VerticalAlignment.Top;
271            virtaNaytto.TextColor = Color.Wheat;
272            virtaNaytto.ValueColor = Color.Wheat;
273            virtaNaytto.X = Screen.RightSafe - 330;
274            virtaNaytto.Y = Screen.TopSafe;
275            virtaNaytto.BindTo(virtaLaskuri);
276            virtaNaytto.Text = "Virtaa jäljellä: ";
277            Add(virtaNaytto);
278        }
279
280        void virtaUhkaaLoppua(double maara)
281        {
282            virtaNaytto.ValueColor = Color.Red;
283            virtaNayttoBar.ValueColor = Color.Red;
284            MessageDisplay.Add("Varoitus: virta alkaa olla vähissä!");
285        }
286
287        void virtaLoppui(double polttoAineMaara)
288        {
289
290            Timer lopetus = new Timer();
291            lopetus.Interval = 0.01;
292            lopetus.Trigger += new Timer.TriggerHandler(lopetaPeli);
293            Add(lopetus);
294            lopetus.Enabled = true;
295        }
296
297        PhysicsObject Pelaaja1()
298        {
299            pelaaja1 = new PlatformCharacter(40, 40);
300            pelaaja1.Mass = 4.0;
301            pelaaja1.Image = LoadImage("Ukko 2");
302
303            AddCollisionHandler(pelaaja1, osuiMaaliin);
304
305            AddCollisionHandler(pelaaja1, KasitteleTormays);
306
307            return pelaaja1;
308        }
309
310        PhysicsObject LuoHirvio()
311        {
312            Hirvio = new PlatformCharacter(80, 80);
313            Hirvio.Mass = 4.0;
314            Hirvio.Image = LoadImage("hirviö");
315
316            Hirvio.Tag = "H";
317
318            return Hirvio;
319
320        }
321
322        PhysicsObject LuoVirta()
323        {
324
325            Virta = new PhysicsObject(40, 40);
326            Virta.Mass = 4.0;
327            Virta.Image = LoadImage("Virta");
328
329            Virta.Tag = "V";
330
331            return Virta;
332        }
333
334        PhysicsObject LuoExtra()
335        {
336            Extra = new PhysicsObject(40, 40);
337            Extra.Mass = 4.0;
338            Extra.Image = LoadImage("Extra");
339
340            Extra.Tag = "E";
341
342            return Extra;
343        }
344
345        PhysicsObject LuoRaha()
346        {
347            Raha = new PhysicsObject(40,40);
348            Raha.Mass = 4.0;
349            Raha.Image = LoadImage("Raha");
350
351            Raha.Tag = "R";
352
353            return Raha;
354        }
355       
356        void ajastin(Timer sender)
357        {
358            MessageDisplay.Add("Et voi enää syödä hirviöitä.");
359            voikoHirvioitaSyoda = false;
360            sender.Stop();
361        }
362
363        void AloitaAlusta()
364        {
365            seuraavaKentta();
366        }
367    }
368}
Note: See TracBrowser for help on using the repository browser.