source: 2013/27/OttoW/Stickman jump/Stickman jump/Stickman jump/Stickman_jump.cs @ 4434

Revision 4434, 9.7 KB checked in by otweijo, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Nappi : PhysicsObject
10{
11    public char MitkaTuhoaa { get; set; }
12    public Nappi(double leveys, double korkeus)
13        : base(leveys, korkeus)
14    {
15
16    }
17}
18
19public class Stickman_jump : PhysicsGame
20{
21    const double nopeus = 200;
22    const double hyppyNopeus = 750;
23    const int RUUDUN_KOKO = 40;
24
25    PlatformCharacter pelaaja1;
26
27    Image nappiKuva = LoadImage("nappi");
28    Image[] pelaajanKuva = LoadImages("Pelihahmo");
29    Image[] kavelykuvat = LoadImages("Pelihahmo", "Pelihahmokävelee1");
30    Image piikitKuva = LoadImage("piikit");
31    Image maaliKuva = LoadImage("lippu");
32    Image vihukuva = LoadImage("pahis");
33    Image ufoKuva = LoadImage("ufo");
34    Image oviKuva = LoadImage("ovi");
35    SoundEffect maaliAani = LoadSoundEffect("maali");
36    int kenttaNro = 1;
37
38
39    public override void Begin()
40    {
41        AlkuValikko();
42    }
43
44    void AloitaPeli()
45    {
46        SeuraavaKentta();
47    }   
48       
49    void SeuraavaKentta()
50    {
51        ClearAll();
52        Gravity = new Vector(0, -1000);
53        if (kenttaNro > 3) Exit();
54        else LuoKentta("kentta" + kenttaNro);
55
56        LisaaNappaimet();
57        Camera.Follow(pelaaja1);
58        Camera.ZoomFactor = 1.0; // Level.Width / 1400.0; ;
59        Camera.StayInLevel = true;
60    }
61
62
63    void AlkuValikko()
64    {
65        MultiSelectWindow alkuValikko = new MultiSelectWindow("Stickman Jump!", "Aloita peli", "Lopeta");
66        Add(alkuValikko);
67
68        alkuValikko.AddItemHandler(0, AloitaPeli);
69        //alkuValikko.AddItemHandler(1, ParhaatPisteet);
70        alkuValikko.AddItemHandler(1, Exit);
71    }
72
73
74   
75    void LuoKentta(string kentanNimi)
76    {
77        TileMap kentta = TileMap.FromLevelAsset(kentanNimi);
78        kentta.SetTileMethod('#', LisaaTaso);
79        kentta.SetTileMethod('*', LisaaPiikit);
80        kentta.SetTileMethod('N', LisaaPelaaja);
81        kentta.SetTileMethod('M', LisaaMaali);
82        kentta.SetTileMethod('V', LisaaVihu);
83        kentta.SetTileMethod('U', LisaaUfo);
84        kentta.SetTileMethod('B', LisaaNappi, 'O');
85        kentta.SetTileMethod('O', LisaaOvi, 'O');
86        kentta.SetTileMethod('b', LisaaNappi, 'o');
87        kentta.SetTileMethod('o', LisaaOvi, 'o');
88        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
89        Level.CreateBorders();
90        Level.Background.CreateGradient(Color.Blue, Color.White);
91    }
92
93    void LisaaTaso(Vector paikka, double leveys, double korkeus)
94    {
95        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
96        taso.Position = paikka;
97        taso.Color = Color.Brown;
98        Add(taso);
99    }
100    void LisaaVihu(Vector paikka, double leveys, double korkeus)
101    {
102        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
103        vihu.Position = paikka;
104        vihu.Image = vihukuva;
105        vihu.Tag = "vihu";
106       
107        Add(vihu);
108
109        PlatformWandererBrain vihuAivot = new PlatformWandererBrain();
110        vihuAivot.Speed = 100;
111
112        vihu.Brain = vihuAivot;
113
114
115    }
116    void LisaaUfo(Vector paikka, double leveys, double korkeus)
117    {
118        Vihollinen ufo = new Vihollinen(leveys / 1 * 5, korkeus * 1.5, 3);
119        ufo.Elamat.LowerLimit += delegate { RajaytaJaTuhoa(ufo); };
120        ufo.Shape = Shape.FromImage(ufoKuva);
121        ufo.Position = paikka;
122        ufo.MakeStatic();
123
124        ufo.Image = ufoKuva;
125        ufo.Tag = "ufo";
126        ufo.IgnoresGravity = true;
127       
128        Timer ajastin = new Timer();
129        Vector[] kohteet = { new Vector(-100, 0), new Vector(100, 0) };
130        ajastin.Timeout += delegate { LiikutaOliotaKahteenPaikkaan(ufo, kohteet); };
131        ajastin.Interval = 2;
132        ajastin.Start();
133        ufo.Velocity = kohteet[0];
134        Add(ufo);
135
136
137    }
138
139    void RajaytaJaTuhoa(PhysicsObject obj)
140    {
141        Explosion rajahdys = new Explosion(50);
142        rajahdys.Position = obj.Position;
143
144        Add(rajahdys);
145        obj.Destroy();
146    }
147
148
149    void LiikutaOliotaKahteenPaikkaan(PhysicsObject olio, Vector[] kohteet)
150    {
151        if (olio.Velocity == kohteet[0])
152            olio.Velocity = kohteet[1];
153        else olio.Velocity = kohteet[0];
154
155
156    }
157
158
159    void LisaaNappi(Vector paikka, double leveys, double korkeus, char mitkaTuhoaa)
160    {
161        Nappi nappi = new Nappi(leveys, korkeus);
162        nappi.MakeStatic();
163        nappi.MitkaTuhoaa = mitkaTuhoaa;
164        nappi.IgnoresCollisionResponse = true;
165        nappi.Position = paikka;
166        nappi.Image = nappiKuva;
167        nappi.Tag = "nappi";
168        Add(nappi);
169    }
170
171    void LisaaOvi(Vector paikka, double leveys, double korkeus, char omaMerkki)
172    {
173        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
174        ovi.IgnoresCollisionResponse = false;
175        ovi.Position = paikka;
176        ovi.Image = oviKuva;
177        ovi.Tag = omaMerkki.ToString();
178        Add(ovi);
179    }
180
181    void LisaaPiikit(Vector paikka, double leveys, double korkeus)
182    {
183        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
184        tahti.Shape = Shape.FromImage(piikitKuva);
185        tahti.IgnoresCollisionResponse = true;
186        tahti.Position = paikka;
187        tahti.Image = piikitKuva;
188        tahti.Tag = "piikit";
189        Add(tahti);
190    }
191
192    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
193    {
194        pelaaja1 = new PlatformCharacter(leveys, korkeus*1.8);
195        pelaaja1.Position = paikka;
196        pelaaja1.Mass = 4.0;
197        pelaaja1.Image = pelaajanKuva[0];
198        pelaaja1.AnimIdle = new Animation(pelaajanKuva);
199        pelaaja1.AnimWalk = new Animation(kavelykuvat);
200        pelaaja1.AnimWalk.FPS = 5;
201        pelaaja1.Weapon = new AssaultRifle(70, 20);
202        pelaaja1.Weapon.InfiniteAmmo = true;
203        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
204        AddCollisionHandler(pelaaja1, "piikit", TormaaPiikkeihin);
205        AddCollisionHandler(pelaaja1, "maali", PaaseeMaaliin);
206        AddCollisionHandler(pelaaja1, "vihu", TormaaVihuun);
207        AddCollisionHandler(pelaaja1, "ufo", TormaaUfoon);
208        AddCollisionHandler<PhysicsObject, Nappi>(pelaaja1, PainaaNappia);
209        Add(pelaaja1);
210    }
211
212    void PaaseeMaaliin(PhysicsObject obj, PhysicsObject toinen)
213    {
214        kenttaNro++;
215        SeuraavaKentta();
216    }
217    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
218    {
219        ammus.Destroy();
220        if (kohde.Tag.Equals("vihu"))
221        {
222            kohde.Destroy();
223           
224        }
225        if (kohde.Tag.Equals("ufo"))
226        {
227            ((Vihollinen)kohde).Elamat.Value--;
228
229        }
230
231    }
232
233    void LisaaMaali(Vector paikka, double leveys, double korkeus)
234    {
235        PhysicsObject maali = new PhysicsObject(leveys, korkeus);
236        maali.Position = paikka;
237        maali.Image = maaliKuva;
238        maali.Tag = "maali";
239        Add(maali);
240    }
241    void TormaaVihuun(PhysicsObject hahmo, PhysicsObject vihu)
242    {
243       pelaaja1.Destroy();
244       MessageDisplay.Add("Örkki söi sinut!");
245    }
246    void TormaaUfoon(PhysicsObject hahmo, PhysicsObject ufo)
247    {
248         pelaaja1.Destroy();
249         MessageDisplay.Add("Ufot tuhosivat sinut!");
250
251    }
252
253
254    void LisaaNappaimet()
255    {
256        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
257        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
258        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
259
260        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
261        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
262        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
263        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, "Aloittaa pelin uudestaan");
264
265
266        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
267
268        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
269        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
270        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
271
272        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
273    }
274    void AmmuAseella(PlatformCharacter pelaaja)
275    {
276        PhysicsObject ammus = pelaaja.Weapon.Shoot();
277
278         if(ammus != null)
279         {
280             ammus.Size *= 1;
281             ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
282             
283         }
284    } 
285
286    void Liikuta(PlatformCharacter hahmo, double nopeus)
287    {
288        hahmo.Walk(nopeus);
289    }
290
291    void Hyppaa(PlatformCharacter hahmo, double nopeus)
292    {
293        hahmo.Jump(nopeus);
294    }
295
296    void TormaaPiikkeihin(PhysicsObject hahmo, PhysicsObject piikit)
297    {
298        maaliAani.Play();
299        MessageDisplay.Add("Törmäsit piikkiin!");
300        pelaaja1.Destroy();
301    }
302    void PainaaNappia(PhysicsObject Hahmo, Nappi nappi)
303    {
304        GetObjectsWithTag(nappi.MitkaTuhoaa.ToString()).ForEach(n => n.Destroy());
305    }
306}
307
308
309public class Vihollinen : PhysicsObject
310{
311    IntMeter elamat;
312    public IntMeter Elamat { get { return elamat; } }
313
314
315    public Vihollinen(double leveys, double korkeus, int elamia)
316        : base (leveys, korkeus)
317    {
318        elamat = new IntMeter(elamia, 0, elamia);
319   
320
321    }
322
323
324}
325
326
Note: See TracBrowser for help on using the repository browser.