source: 2011/23/ookantol/Haamuongelma/Haamuongelma/Peli.cs @ 1808

Revision 1808, 11.0 KB checked in by ookantol, 9 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11    const double nopeus = 300;
12    const double hyppyNopeus = 1000;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    IntMeter laskuri;
18    IntMeter laskuri2;
19
20    Label naytto2;
21
22    List<Label> Valikonkohdat;
23
24    Image pelaajanKuva = LoadImage("Buddy");
25    Image kelloKuva = LoadImage("kello");
26    Image kukkaKuva = LoadImage("kukka");
27    Image haamu1Kuva = LoadImage("haamu3");
28    Image haamu2Kuva = LoadImage("haamu4");
29
30    public override void Begin()
31    {
32        aloitusvalikko();
33    }
34
35    void luoKentta()
36    {
37        TileMap kentta = TileMap.FromFile("kentta1.txt");
38        kentta['-'] = lisaaTaso;
39        kentta['_'] = lisaaTaso2;
40        kentta['+'] = lisaaKello;
41        kentta['Y'] = lisaaKukka;
42        kentta['B'] = lisaaPelaaja;
43        kentta['1'] = lisaaHaamu1;
44        kentta['2'] = lisaaHaamu2;
45        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
46        Level.CreateBorders(1.0, true);
47        Level.Background.CreateStars();
48    }
49
50
51
52    PhysicsObject lisaaTaso()
53    {
54        PhysicsObject taso = PhysicsObject.CreateStaticObject(3 * RUUDUN_KOKO, RUUDUN_KOKO);
55        taso.Image = LoadImage("pilvi");
56        return taso;
57    }
58
59    PhysicsObject lisaaTaso2()
60    {
61        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(3 * RUUDUN_KOKO, RUUDUN_KOKO);
62        taso2.Image = LoadImage("ruoho");
63        return taso2;
64    }
65
66    PhysicsObject lisaaKello()
67    {
68        PhysicsObject kello = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
69        kello.Image = kelloKuva;
70        kello.CollisionIgnoreGroup = 1;
71        kello.Angle = RandomGen.NextAngle();
72        kello.Tag = "kello";
73        return kello;
74    }
75
76    PhysicsObject lisaaKukka()
77    {
78        PhysicsObject kukka = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
79        kukka.Image = kukkaKuva;
80        kukka.IgnoresCollisionResponse = true;
81        kukka.Tag = "kukka";
82        return kukka;
83    }
84
85    PlatformCharacter lisaaPelaaja()
86    {
87        pelaaja1 = new PlatformCharacter(30, 40);
88        pelaaja1.Mass = 6.0;
89        pelaaja1.Image = pelaajanKuva;
90        AddCollisionHandler(pelaaja1, osuKelloon);
91        AddCollisionHandler(pelaaja1, osuHaamuun);
92        AddCollisionHandler(pelaaja1, osuKukkaan);
93
94        return pelaaja1;
95    }
96   
97    PhysicsObject lisaaHaamu1()
98    {
99        PhysicsObject haamu1 = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO);
100        haamu1.Image = LoadImage("haamu3");
101        haamu1.Tag = "haamu";
102        haamu1.CanRotate = false;
103        haamu1.CollisionIgnoreGroup = 1;
104        haamu1.IgnoresGravity = true;
105        Timer asetaAivot = new Timer();
106        asetaAivot.Tag = haamu1;
107        asetaAivot.Trigger += asetaHaamulleAivot;
108        asetaAivot.Interval = 1.5;
109        asetaAivot.Start();
110        return haamu1;
111    }
112
113    PhysicsObject lisaaHaamu2()
114    {
115        PhysicsObject haamu2 = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO);
116        haamu2.Image = LoadImage("haamu4");
117        haamu2.Tag = "haamu";
118        haamu2.CanRotate = false;
119        haamu2.CollisionIgnoreGroup = 1;
120        haamu2.IgnoresGravity = true;
121        Timer asetaAivot = new Timer();
122        asetaAivot.Tag = haamu2;
123        asetaAivot.Trigger += asetaHaamulleAivot;
124        asetaAivot.Interval = 2.0;
125        asetaAivot.Start();
126        return haamu2;
127    }
128
129    void lisaaNappaimet()
130    {
131        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
132        Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, "Päävalikkoon");
133
134        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
135        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
136        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
137        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
138        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
139        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
140
141        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
142    }
143
144    void liikuta(PlatformCharacter hahmo, double nopeus)
145    {
146        hahmo.Walk(nopeus);
147    }
148
149    void hyppaa(PlatformCharacter hahmo, double nopeus)
150    {
151        hahmo.Jump(nopeus);
152    }
153
154
155
156    IntMeter elamat()
157    {
158        laskuri = new IntMeter(5);
159        Label naytto = new Label(140, 70);
160        naytto.Title = "Lives left ";
161        naytto.Size = new Vector(140, 60);
162        naytto.X = Screen.Left + 90;
163        naytto.Y = Screen.Top - 80;
164        naytto.TextColor = Color.White;       
165        naytto.BindTo(laskuri);
166        Add(naytto);
167        return laskuri;
168
169    }
170
171    IntMeter kerattavat()
172    {
173        laskuri2 = new IntMeter(0);
174        laskuri2.MaxValue = 35;
175        laskuri2.Changed += new Meter<int>.OnChangeHandler(laskuri2_Changed);
176        laskuri2.UpperLimit += laskuriYlarajassa;
177        naytto2 = new Label(400, 70);
178        naytto2.Text = "Ghosts & clocks destroyed " + laskuri2.Value.ToString() + " / " + laskuri2.MaxValue.ToString();
179        naytto2.Size = new Vector(400, 70);
180        naytto2.X = Screen.Left + 190;
181        naytto2.Y = Screen.Top - 50;
182        naytto2.TextColor = Color.White;
183        Add(naytto2);
184        return laskuri;
185
186    }
187
188    void laskuri2_Changed(int oldValue, int newValue)
189    {
190        naytto2.Text = "Ghosts & clocks destroyed " + laskuri2.Value.ToString() + " / " + laskuri2.MaxValue.ToString();
191    }
192
193    void laskuriYlarajassa(int arvo)
194    { 
195        Label Win = new Label ("Mission done!");
196        Win.Position = new Vector(10, 0);
197        Win.TextColor = RandomGen.NextColor();
198        Add(Win);
199        Timer.SingleShot(3.0, aloitusvalikko);
200    }
201
202
203
204
205    void osuKelloon(PhysicsObject hahmo, PhysicsObject kohde)
206    {
207        if (kohde.Tag.ToString() == "kello")
208        {
209            kohde.Destroy();
210            laskuri2.Value += 1;
211        }
212
213    }
214
215    void osuHaamuun(PhysicsObject hahmo, PhysicsObject kohde)
216    {
217        if (kohde.Tag.ToString() == "haamu")
218        {
219            if (kohde.Top < pelaaja1.Position.Y)
220            {
221                kohde.Destroy();
222                laskuri2.Value += 1;
223            }
224            else
225            {
226                laskuri.Value--;
227                Vector lento = hahmo.Position - kohde.Position;
228                hahmo.Hit(1000*lento);
229            }
230
231               if ( laskuri.Value == 0)
232            {
233                hahmo.Destroy();
234                Label naytto = new Label(700, - 600);
235                naytto.TextColor = RandomGen.NextColor();
236                naytto.Text = "Game Over";
237
238                Add(naytto);
239
240            }
241        }
242       
243    }
244 
245    void osuKukkaan (PhysicsObject pelaaja1, PhysicsObject kohde)
246    {
247        if (kohde.Tag.ToString() == "kukka")
248        {
249            Label apua = new Label(600, - 800);
250            apua.X = Screen.Left + 700;
251            apua.Y = Screen.Top - 700;
252            apua.TextColor = Color.White;
253            apua.Text = "Help us by destroying those ghosts and clocks.";
254            Timer.SingleShot(1.0, apua.Destroy);
255            Add(apua);
256        }
257    }
258
259
260
261
262    void aloitusvalikko()
263    {
264        ClearAll();
265        Valikonkohdat = new List<Label>();
266        Level.Background.CreateGradient (Color.Orange, Color.White);
267
268        Label kohta1 = new Label("Start Game");
269        kohta1.Position = new Vector(0, 50);
270        Valikonkohdat.Add(kohta1);
271
272        Label kohta2 = new Label("Exit");
273        kohta2.Position = new Vector(0, -40);
274        Valikonkohdat.Add(kohta2);
275
276
277        foreach (Label Valikonkohta in Valikonkohdat)
278            Add(Valikonkohta);
279
280        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Start, null);
281        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
282
283        Mouse.IsCursorVisible = true;
284        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
285
286        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, null);
287
288    }
289
290    void ValikossaLiikkuminen(AnalogState hiirenTila)
291    {
292        foreach (Label kohta in Valikonkohdat)
293        {
294            if (Mouse.IsCursorOn(kohta))
295            {
296                kohta.TextColor = Color.Orange;
297            }
298            else
299            {
300                kohta.TextColor = Color.White;
301            }
302        }
303
304    }
305
306    void Lopeta()
307    {
308        Exit();
309    }
310
311    void Start()
312    {
313        ClearAll();
314        Valikonkohdat = new List<Label>();
315        Level.BackgroundColor = Color.Black;
316
317        Label kohta3 = new Label("Just a normal day. Buddy was on his way home, when he   met couple mean ghosts. Or not just an couple, lots of    them. He tried to avoid them, but then he met dying    flowers, which were dying because of the ghosts. To    help them, Buddy must destroy all ghosts and clocks,                              that have appeared...");
318        kohta3.Size = new Vector(600, 130);
319        kohta3.SizeMode = TextSizeMode.Wrapped;
320        kohta3.Position = new Vector(0, 100);
321        kohta3.TextColor = Color.White;
322        Valikonkohdat.Add(kohta3);
323
324        Label kohta4 = new Label("Start");
325        kohta4.Position = new Vector(0, -40);
326        kohta4.TextColor = Color.Orange;
327        Valikonkohdat.Add(kohta4);
328
329        foreach (Label Valikonkohta in Valikonkohdat)
330            Add(Valikonkohta);
331
332        Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, Aloita, null);
333        Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, null);
334        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Aloita, null);
335
336        Mouse.IsCursorVisible = true;
337    }   
338
339
340    void Aloita()
341    {
342
343        ClearAll();
344        Gravity = new Vector(0, -1000);
345
346        luoKentta();
347        lisaaNappaimet();
348        elamat();
349        kerattavat();
350
351        Camera.Follow(pelaaja1);
352        Camera.ZoomFactor =2.0;
353        //Camera.ZoomToLevel();
354        Camera.StayInLevel = true;
355   
356   
357    }
358
359
360    void asetaHaamulleAivot(Timer sender)
361    {
362        PathFollowerBrain aivot = new PathFollowerBrain(150);
363        aivot.Path = new List<Vector>() { 
364            new Vector((sender.Tag as PhysicsObject).Position.X - 100, (sender.Tag as PhysicsObject).Position.Y),
365            new Vector((sender.Tag as PhysicsObject).Position.X, (sender.Tag as PhysicsObject).Position.Y)};
366        aivot.Owner = (sender.Tag as PhysicsObject);
367        aivot.Loop = true;
368        aivot.Speed = 150;
369        aivot.Active = true;
370        sender.Stop();
371    }
372
373
374}
Note: See TracBrowser for help on using the repository browser.