source: 2016/27/PaavoH/UltimateAdventure/UltimateAdventure/UltimateAdventure/UltimateAdventure/UltimateAdventure.cs @ 8434

Revision 8434, 11.4 KB checked in by tesatapa, 2 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 UltimateAdventure : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    bool saapiiskata = true;
16    bool saapommittaa = true;
17    DoubleMeter aani = new DoubleMeter(0, 0, 1);
18
19    PlatformCharacter pelaaja1;
20    IntMeter elamaLaskuri;
21
22    Image pelaajanKuva = LoadImage("norsu");
23    Image tahtiKuva = LoadImage("tahti");
24    Image Bpimage = LoadImage("stoneplatform");
25    Image silmamobimage = LoadImage("silmamob");
26    Image veripartikkeli = LoadImage("veripartikkeli");
27    Image playerhealth = LoadImage("playerhealth");
28    Image Bomb = LoadImage("bomb");
29    Image Arrow = LoadImage("Arrow");
30
31    SoundEffect maaliAani = LoadSoundEffect("maali");
32    Animation Ruoskanimaatio;
33
34    double aanenvoimakkuus = 0.1;
35
36    public override void Begin()
37    {
38        Ruoskanimaatio = LoadAnimation("ruoska");
39        LuoAlkuValikko();
40
41
42    }
43
44    void LuoAlkuValikko()
45    {
46        ClearAll();
47        MultiSelectWindow alkuValikko = new MultiSelectWindow("UltimateAdventure", "Aloita peli", "Options", "Lopeta");
48
49        alkuValikko.AddItemHandler(0, AloitaPeli);
50        alkuValikko.AddItemHandler(1, Options);
51        alkuValikko.AddItemHandler(2, Exit);
52
53        Add(alkuValikko);
54    }
55
56    void AloitaPeli()
57    {
58        ClearAll();
59        SmoothTextures = false;
60        Gravity = new Vector(0, -1000);
61
62        LuoKentta();
63        LisaaNappaimet();
64        LuoElamaLaskuri();
65        Camera.Follow(pelaaja1);
66        Camera.ZoomFactor = 2.8;
67        Camera.StayInLevel = true;
68    }
69    void Options()
70    {
71        Mouse.IsCursorVisible = true;
72        Slider liukusaadin = LuoSlider();
73        Add(liukusaadin);
74        TeeBackNappain();
75    }
76
77    Slider LuoSlider()
78    {
79
80        aani.Changed += MuutaAanenvoimakuutta;
81
82        Slider liukusaadin = new Slider(200, 20);
83        liukusaadin.BindTo(aani);
84
85        liukusaadin.X = 0;
86        liukusaadin.Y = 0;
87
88        liukusaadin.Color = Color.GreenYellow;
89        liukusaadin.Knob.Image = tahtiKuva;
90        liukusaadin.Track.Color = Color.Black;
91        liukusaadin.BorderColor = Color.LightBlue;
92
93        return liukusaadin;
94
95    }
96    void TeeBackNappain()
97    {
98        PushButton BackNappain = new PushButton("Back");
99        BackNappain.Y = -120;
100        BackNappain.Clicked += LuoAlkuValikko;
101
102        Add(BackNappain);
103    }
104
105
106    void MuutaAanenvoimakuutta(double vanhaArvo, double uusiArvo)
107    {
108        aanenvoimakkuus = uusiArvo;
109        MessageDisplay.Add(aanenvoimakkuus.ToString());
110    }
111
112    void LuoKentta()
113    {
114        TileMap kentta = TileMap.FromLevelAsset("kentta1");
115        kentta.SetTileMethod('#', LisaaTaso);
116        kentta.SetTileMethod('&', LisaaBp);
117        kentta.SetTileMethod('*', LisaaHealt);
118        kentta.SetTileMethod('o', LisaaPelaaja);
119        kentta.SetTileMethod('0', LisaaSilmamob);
120        kentta.SetTileMethod('5', LisaaSnakemob);
121        kentta.SetTileMethod('>', LisaaAT);
122        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
123        Level.CreateBorders();
124        Level.Background.CreateGradient(Color.SkyBlue, Color.SkyBlue);
125    }
126
127    void LisaaTaso(Vector paikka, double leveys, double korkeus)
128    {
129        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
130        taso.Position = paikka;
131        taso.Color = RandomGen.NextColor();
132        Add(taso);
133    }
134
135    void LisaaAT(Vector paikka, double leveys, double korkeus)
136    {
137        PhysicsObject AT = PhysicsObject.CreateStaticObject(leveys, korkeus);
138        AT.Position = paikka;
139        AT.Color = Color.YellowGreen;
140        Add(AT);
141
142
143        Timer ajastin = new Timer();
144        ajastin.Interval = 0.1;
145        ajastin.Timeout += delegate
146        {
147            if (pelaaja1.X > AT.X && Math.Abs(pelaaja1.Y - AT.Y) < 20)
148            {
149                PhysicsObject nuoli = new PhysicsObject(30, 5);
150                nuoli.Position = AT.Position;
151                nuoli.Velocity = new Vector(3000, 0);
152                Add(nuoli);
153                nuoli.Image = Arrow;
154                nuoli.Tag = "nuoli";
155                //AddCollisionHandler(nuoli, CollisionHandler.DestroyObject);
156                ajastin.Stop();
157            }
158        };
159        ajastin.Start();
160    }
161
162
163
164
165    void LisaaHealt(Vector paikka, double leveys, double korkeus)
166    {
167        PhysicsObject healt = PhysicsObject.CreateStaticObject(leveys, korkeus);
168        healt.IgnoresCollisionResponse = true;
169        healt.Position = paikka;
170        healt.Image = tahtiKuva;
171        healt.Tag = "healt";
172        Add(healt);
173    }
174
175    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
176    {
177        pelaaja1 = new PlatformCharacter(leveys, korkeus);
178        pelaaja1.Position = paikka;
179        pelaaja1.Mass = 4.0;
180        pelaaja1.Image = pelaajanKuva;
181        pelaaja1.Tag = "pelaaja";
182        AddCollisionHandler(pelaaja1, "healt", TormaaHealtiin);
183        AddCollisionHandler(pelaaja1, "silmamob", TormaaSilmaMobiin);
184        AddCollisionHandler(pelaaja1, "snake", TormaaSnakeen);
185        AddCollisionHandler(pelaaja1, "nuoli", TormaaNuoleen);
186        Add(pelaaja1);
187    }
188    void LisaaBp(Vector paikka, double leveys, double korkeus)
189    {
190        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
191        taso.Position = paikka;
192        taso.Image = Bpimage;
193        Add(taso);
194    }
195
196    void LisaaMob(Vector paikka, double leveys, double korkeus, double massa, string tag, Brain aivo)
197    {
198        PlatformCharacter silmamob = new PlatformCharacter(leveys, korkeus);
199        silmamob.Position = paikka;
200        silmamob.Mass = massa;
201        silmamob.Image = silmamobimage;
202        Add(silmamob);
203        silmamob.Tag = tag;
204        silmamob.Brain = aivo;
205    }
206
207    void LisaaSilmamob(Vector paikka, double leveys, double korkeus)
208    {
209        PlatformWandererBrain aivot = new PlatformWandererBrain();
210        aivot.Speed = 100;
211
212        LisaaMob(paikka, leveys, korkeus, 2.0, "silmamob", aivot);
213    }
214
215    void LisaaSnakemob(Vector paikka, double leveys, double korkeus)
216    {
217        PlatformWandererBrain aivot = new PlatformWandererBrain();
218        aivot.Speed = 100;
219
220        LisaaMob(paikka, leveys, korkeus, 3.0, "snake", aivot);
221    }
222
223    void LisaaNappaimet()
224    {
225        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
226        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
227
228        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
229        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
230        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
231
232        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Lyo, "Pelaaja Lyö", pelaaja1);
233        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, HeitaPommi, "Pelaaja heittää pommin", pelaaja1);
234
235        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
236
237        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.");
238        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
239        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, HeitaPommi, "Pelaaja heittää pommin", pelaaja1);
240        ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, Lyo, "Pelaaja Lyö", pelaaja1);
241    }
242
243    void LiikutaPelaajaa(AnalogState tatinTila)
244    { 
245        Vector tatinAsento = tatinTila.StateVector;
246        pelaaja1.Walk(tatinAsento.X * 200);
247    }
248    void Lyo(PlatformCharacter hahmo)
249    {
250        if (saapiiskata == false)
251            return;
252
253        saapiiskata = false;
254
255        PhysicsObject temp = new PhysicsObject(50, 20);
256        //temp.IsVisible = false;
257        temp.IgnoresGravity = true;
258        temp.IgnoresCollisionResponse = true;
259        temp.Destroyed += delegate { saapiiskata = true; };
260        Add(temp);
261        temp.Animation = new Animation(Ruoskanimaatio);
262        temp.Animation.Start();
263
264        AddCollisionHandler(temp, "silmamob", CollisionHandler.DestroyTarget);
265        AddCollisionHandler(temp, "snake", CollisionHandler.DestroyTarget);
266
267        Timer.SingleShot(1, temp.Destroy);
268
269        Timer ajastin = new Timer();
270        ajastin.Interval = 0.01;
271        ajastin.Timeout += delegate
272        {
273            if (hahmo.FacingDirection == Direction.Left)
274            {
275                temp.TextureWrapSize = new Vector(-1, 1);
276                temp.Position = new Vector((hahmo.Position.X - (hahmo.Width / 2) - (temp.Width * .35)), hahmo.Position.Y);
277            }
278            else
279            {
280                temp.TextureWrapSize = new Vector(1, 1);
281                temp.Position = new Vector((hahmo.Position.X + (hahmo.Width / 2) + (temp.Width * .35)), hahmo.Position.Y);
282            }
283        };
284        ajastin.Start();
285    }
286    void HeitaPommi(PlatformCharacter hahmo)
287    { 
288        if (saapommittaa == false)
289            return;
290
291        saapommittaa = false;
292
293        Grenade Pommi = new Grenade(10.0);
294        hahmo.Throw(Pommi, Angle.FromDegrees(30), 10000);
295        Pommi.Image = Bomb;
296
297        Timer.SingleShot(.2, delegate { saapommittaa = true; });
298    }
299
300    void Liikuta(PlatformCharacter hahmo, double nopeus)
301    {
302        hahmo.Walk(nopeus);
303    }
304
305    void Hyppaa(PlatformCharacter hahmo, double nopeus)
306    {
307        hahmo.Jump(nopeus);
308    }
309
310    void TormaaHealtiin(PhysicsObject hahmo, PhysicsObject healt)
311    {
312        maaliAani.Play(aanenvoimakkuus, 0.0, 0.0);
313        healt.Destroy();
314        elamaLaskuri.Value += 5;
315    }
316    void LuoElamaLaskuri()
317    {
318        elamaLaskuri = new IntMeter(10);
319        elamaLaskuri.MaxValue = 99;
320        elamaLaskuri.LowerLimit += ElamaLoppui;
321
322        Label ElamaKuva = new Label(playerhealth);
323        ElamaKuva.Size = new Vector(80, 80);
324        Add(ElamaKuva);
325
326        Label pisteNaytto = new Label();
327        pisteNaytto.X = Screen.Left + 100;
328        pisteNaytto.Y = Screen.Top - 100;
329        pisteNaytto.TextColor = Color.Black;
330        pisteNaytto.Color = Color.Red;
331        pisteNaytto.BindTo(elamaLaskuri);
332        Add(pisteNaytto);
333
334        ElamaKuva.X = pisteNaytto.X;
335        ElamaKuva.Y = pisteNaytto.Y;
336
337
338
339    }
340
341    void ElamaLoppui()
342    {
343        pelaaja1.Destroy();
344        ExplosionSystem rajahdys = new ExplosionSystem(veripartikkeli, 100);
345        Add(rajahdys);
346        rajahdys.MaxScale = 1.0;
347        rajahdys.MaxVelocity = 20.0;
348        rajahdys.MinLifetime = 2.0;
349        int pMaara = 50;
350        Timer.SingleShot(3.0, ConfirmExit);
351
352
353
354        rajahdys.AddEffect(pelaaja1.X, pelaaja1.Y, pMaara);
355        //rajahdys.X = pelaaja1.X;
356        //rajahdys.Y = pelaaja1.Y;
357    }
358    void TormaaSilmaMobiin(PhysicsObject hahmo, PhysicsObject silmamob)
359    {
360        elamaLaskuri.Value -= 1;
361    }
362
363    void TormaaSnakeen(PhysicsObject hahmo, PhysicsObject silmamob)
364    {
365        elamaLaskuri.Value -= 1;
366    }
367    void TormaaNuoleen(PhysicsObject hahmo, PhysicsObject nuoli)
368    {
369        elamaLaskuri.Value -= 2;
370
371    }
372
373}
Note: See TracBrowser for help on using the repository browser.