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

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