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

Revision 1767, 8.6 KB checked in by ookantol, 10 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 = 500;
12    const double hyppyNopeus = 2000;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    IntMeter laskuri;
18
19    List<Label> Valikonkohdat;
20
21    Image pelaajanKuva = LoadImage("Buddy");
22    Image kelloKuva = LoadImage("kello");
23    Image kukkaKuva = LoadImage("kukka");
24    Image haamu1Kuva = LoadImage("haamu1");
25    //Image taustaKuva = LoadImage("tahdet");
26    //Vector aloituspiste;
27
28    public override void Begin()
29    {
30        aloitusvalikko();
31    }
32
33    void luoKentta()
34    {
35        TileMap kentta = TileMap.FromFile("kentta1.txt");
36        kentta['-'] = lisaaTaso;
37        kentta['_'] = lisaaTaso2;
38        kentta['+'] = lisaaKello;
39        kentta['Y'] = lisaaKukka;
40        kentta['B'] = lisaaPelaaja;
41        kentta['1'] = lisaaHaamu1;
42        kentta['2'] = lisaaHaamu2;
43        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
44        Level.CreateBorders();
45        //Level.Background.Image = taustaKuva;
46        //Level.Background.FitToLevel();
47        Level.Background.CreateStars();
48
49    }
50
51    PhysicsObject lisaaTaso()
52    {
53        PhysicsObject taso = PhysicsObject.CreateStaticObject(3 * RUUDUN_KOKO, RUUDUN_KOKO);
54        taso.Image = LoadImage("pilvi");
55        return taso;
56    }
57
58    PhysicsObject lisaaTaso2()
59    {
60        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(3 * RUUDUN_KOKO, RUUDUN_KOKO);
61        taso2.Image = LoadImage("ruoho");
62        return taso2;
63    }
64
65    PhysicsObject lisaaKello()
66    {
67        PhysicsObject kello = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
68        kello.Image = kelloKuva;
69        kello.CollisionIgnoreGroup = 1;
70        kello.Angle = RandomGen.NextAngle();
71        kello.Tag = "kello";
72        return kello;
73    }
74
75    PhysicsObject lisaaKukka()
76    {
77        PhysicsObject kukka = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
78        kukka.Image = kukkaKuva;
79        kukka.Tag = "kukka";
80        return kukka;
81    }
82
83    PlatformCharacter lisaaPelaaja()
84    {
85        pelaaja1 = new PlatformCharacter(30, 40);
86        pelaaja1.Mass = 6.0;
87        pelaaja1.Image = pelaajanKuva;
88        AddCollisionHandler(pelaaja1, osuKelloon);
89        AddCollisionHandler(pelaaja1, osuHaamuun);
90        AddCollisionHandler(pelaaja1, osuKukkaan);
91
92        return pelaaja1;
93    }
94   
95    PhysicsObject lisaaHaamu1()
96    {
97        PhysicsObject haamu1 = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO);
98        haamu1.Image = LoadImage("haamu3");
99        haamu1.Tag = "haamu";
100        haamu1.CanRotate = false;
101        haamu1.CollisionIgnoreGroup = 1;
102        //haamu3.IgnoresGravity = true;
103        Timer asetaAivot = new Timer();
104        asetaAivot.Tag = haamu1;
105        asetaAivot.Trigger += asetaHaamulleAivot;
106        asetaAivot.Interval = 1.5;
107        asetaAivot.Start();
108        return haamu1;
109    }
110
111    PhysicsObject lisaaHaamu2()
112    {
113        PhysicsObject haamu2 = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO);
114        haamu2.Image = LoadImage("haamu4");
115        haamu2.Tag = "haamu";
116        haamu2.CanRotate = false;
117        haamu2.CollisionIgnoreGroup = 1;
118        //haamu4.IgnoresGravity = true;
119        Timer asetaAivot = new Timer();
120        asetaAivot.Tag = haamu2;
121        asetaAivot.Trigger += asetaHaamulleAivot;
122        asetaAivot.Interval = 2.0;
123        asetaAivot.Start();
124        return haamu2;
125    }
126
127    void lisaaNappaimet()
128    {
129        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
130        Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, "Päävalikkoon");
131
132        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
133        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
134        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
135        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
136        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
137        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
138
139        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
140    }
141
142    void liikuta(PlatformCharacter hahmo, double nopeus)
143    {
144        hahmo.Walk(nopeus);
145    }
146
147    void hyppaa(PlatformCharacter hahmo, double nopeus)
148    {
149        hahmo.Jump(nopeus);
150    }
151
152    IntMeter elamat()
153    {
154        laskuri = new IntMeter(3);
155        Label naytto = new Label(70, 70);
156        naytto.Text = "Elämät 3";
157        naytto.Size = new Vector(60, 60);
158        naytto.X = Screen.Left + 60;
159        naytto.Y = Screen.Top - 50;
160        naytto.TextColor = Color.White;       
161        naytto.BindTo(laskuri);
162        Add(naytto);
163        return laskuri;
164
165         
166    }
167
168
169    void osuKelloon(PhysicsObject hahmo, PhysicsObject kohde)
170    {
171        if (kohde.Tag.ToString() == "kello")
172        {
173            kohde.Destroy();
174        }
175
176    }
177
178    void osuHaamuun(PhysicsObject hahmo, PhysicsObject kohde)
179    {
180        if (kohde.Tag.ToString() == "haamu")
181        {
182            if (kohde.Top < pelaaja1.Position.Y)
183                kohde.Destroy();
184            else
185            {
186                laskuri.Value--;
187                Vector lento = hahmo.Position - kohde.Position;
188                hahmo.Hit(1000*lento);
189            }
190
191               if ( laskuri.Value == 0)
192            {
193                hahmo.Destroy();
194                Label naytto = new Label(70, - 70);
195                naytto.TextColor = Color.White;
196                naytto.Text = "Hävisit.";
197
198                Add(naytto);
199
200            }
201        }
202       
203    }
204 
205    void osuKukkaan (PhysicsObject pelaaja1, PhysicsObject kohde)
206    {
207        if (kohde.Tag.ToString() == "kukka")
208        {
209            Label apua = new Label(70, - 70);
210            apua.TextColor = Color.White;
211            apua.Text = "Auta";
212            Add(apua);
213        }
214    }
215
216    void aloitusvalikko()
217    {
218        ClearAll();
219        Valikonkohdat = new List<Label>();
220        Level.Background.CreateGradient (Color.Orange, Color.White);
221
222        Label kohta1 = new Label("Aloita peli");
223        kohta1.Position = new Vector(0, 50);
224        Valikonkohdat.Add(kohta1);
225
226        Label kohta2 = new Label("Lopeta");
227        kohta2.Position = new Vector(0, -40);
228        Valikonkohdat.Add(kohta2);
229
230        //Label kohta3 = new Label("");
231        //kohta3.Position = new Vector(0, 50);
232        //Valikonkohdat.Add(kohta3);
233
234
235
236
237        foreach (Label Valikonkohta in Valikonkohdat)
238            Add(Valikonkohta);
239
240        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Aloita, null);
241        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
242
243        Mouse.IsCursorVisible = true;
244        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
245
246        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, null);
247        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Aloita, null);
248
249    }
250
251    void ValikossaLiikkuminen(AnalogState hiirenTila)
252    {
253        foreach (Label kohta in Valikonkohdat)
254        {
255            if (Mouse.IsCursorOn(kohta))
256            {
257                kohta.TextColor = Color.White;
258            }
259            else
260            {
261                kohta.TextColor = Color.Black;
262            }
263        }
264
265    }
266
267    void Lopeta()
268    {
269        Exit();
270    }
271
272    void Aloita()
273    {
274
275        ClearAll();
276        Gravity = new Vector(0, -1000);
277
278        luoKentta();
279        lisaaNappaimet();
280        elamat();
281
282        Camera.Follow(pelaaja1);
283        Camera.ZoomFactor = 2.0;
284        Camera.StayInLevel = true;
285   
286   
287    }
288
289
290    void asetaHaamulleAivot(Timer sender)
291    {
292        PathFollowerBrain aivot = new PathFollowerBrain(150);
293        aivot.Path = new List<Vector>() { 
294            new Vector((sender.Tag as PhysicsObject).Position.X - 100, (sender.Tag as PhysicsObject).Position.Y),
295            new Vector((sender.Tag as PhysicsObject).Position.X, (sender.Tag as PhysicsObject).Position.Y)};
296        aivot.Owner = (sender.Tag as PhysicsObject);
297        aivot.Loop = true;
298        aivot.Speed = 150;
299        aivot.Active = true;
300        sender.Stop();
301    }
302
303}
Note: See TracBrowser for help on using the repository browser.