source: 2014/24/JuhoJ/ShotgunJoe/ShotgunJoe/ShotgunJoe/ShotgunJoe.cs @ 5027

Revision 5027, 11.0 KB checked in by juonoljo, 7 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 ShotgunJoe : PhysicsGame
10{
11   
12   
13
14    // TODO panoslaskuri näkyviin
15    // TODO elämät täyteen kenttien välissä
16    // TODO voittamattomuus
17    const double nopeus = 200;
18    const double hyppyNopeus = 550;
19    const int RUUDUN_KOKO = 40;
20
21    bool onKuolematon = false;
22
23    int kenttanumero = 1;
24    PlatformCharacter pelaaja1 = new PlatformCharacter(40 , 40 );
25    PlasmaCannon pelaajan1Ase;
26   
27
28    DoubleMeter elamalaskuri;
29
30
31    Image pelaajanKuva = LoadImage("shutter");
32    Image tahtiKuva = LoadImage("kolikko");
33    Image piikkikuva = LoadImage("Piikki");
34    SoundEffect maaliAani = LoadSoundEffect("maali");
35    Image ruohokuva = LoadImage("Ruoho");
36    Image multakuva = LoadImage("multa");
37    Image asekuva = LoadImage("haulikko");
38    Image panoskuva = LoadImage("ammus");
39    Image vihukuva = LoadImage("Vihu");
40    Image näkymätönkuva = LoadImage("näkymätön");
41    Image tynnyrikuva = LoadImage("tynnyri");
42    Image laatikkokuva = LoadImage("laatikko");
43    SoundEffect haulikkoaani = LoadSoundEffect("haulikkoaani");
44    Image kivikuva = LoadImage("kivi");
45    Image maalikuva = LoadImage("Untitled");
46
47
48    public override void Begin()
49    {
50        SmoothTextures = false;
51        SeuraavaKentta();
52    }
53
54
55    void SeuraavaKentta()
56    {
57        ClearAll();
58
59        if (kenttanumero == 1)
60        {
61            LuoKentta("kentta1");
62        }
63        else if (kenttanumero == 2)
64        {
65            LuoKentta("kentta2");
66        }
67
68        LisaaNappaimet();
69        LuoElamaLaskuri();
70
71        RandomUusiLaatikko();
72
73        Timer ajastin = new Timer();
74        ajastin.Interval = 2.0;
75        ajastin.Timeout += RandomUusiLaatikko;
76        ajastin.Start();
77
78        Camera.Follow(pelaaja1);
79        Camera.ZoomFactor = 4.2;
80       
81       
82        Camera.StayInLevel = true;
83
84        pelaaja1.Weapon = new PlasmaCannon(30, 10);
85        pelaaja1.Weapon.Image = asekuva;
86        pelaaja1.Weapon.Ammo.Value = 100;
87        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
88
89        pelaaja1.Weapon.FireRate = 1.0;
90
91        Gravity = new Vector(0, -1000);
92    }
93
94   void LisaaMaali(Vector paikka, double leveys, double korkeus)
95    {
96       PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
97       maali.Position = paikka;
98       maali.Tag = "maali";
99       maali.Image = maalikuva;
100       Add(maali);
101    }
102
103   void TormasiMaaliin(PhysicsObject pelaaja1, PhysicsObject maali)
104   {
105       kenttanumero++;
106       SeuraavaKentta();
107   }
108
109    void LuoKentta(string pelimaailma)
110    {
111        TileMap kentta = TileMap.FromLevelAsset(pelimaailma);
112        kentta.SetTileMethod('#', LisaaMulta);
113        kentta.SetTileMethod('*', LisaaTahti);
114        kentta.SetTileMethod('J', LisaaPelaaja);
115        kentta.SetTileMethod('P', LisaaPiikki);
116        kentta.SetTileMethod('R', LisaaRuoho);
117        kentta.SetTileMethod('V', LisaaVihu);
118        kentta.SetTileMethod('N', LisaaNakymaton);
119        kentta.SetTileMethod('T', LisaaTynnyri);
120        kentta.SetTileMethod('B', LisaaKivi);
121        kentta.SetTileMethod('M',LisaaMaali);
122        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
123        Level.CreateBorders();
124        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
125    }
126
127    void LisaaKivi(Vector paikka, double leveys, double korkeus)
128    {
129        LisaaPalikka(paikka, leveys, korkeus, "kivi", kivikuva, 0);
130    }
131
132
133
134    void LisaaMulta(Vector paikka, double leveys, double korkeus)
135    {
136        LisaaPalikka(paikka, leveys, korkeus, "maa", multakuva,0);
137    }
138    void LisaaRuoho(Vector paikka, Double leveys, Double korkeus)
139    {
140        LisaaPalikka(paikka, leveys, korkeus, "ruoho", ruohokuva,0);
141    }
142
143    void LisaaPalikka(Vector paikka, Double leveys, Double korkeus,string tagi,Image kuva, int ignoregroup)
144    {
145        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
146        taso.Position = paikka;
147        taso.Image = kuva;
148        taso.IgnoresExplosions = true;
149        if (ignoregroup > 0)
150        {
151            taso.CollisionIgnoreGroup = ignoregroup;
152        }
153        Add(taso);
154    }
155
156    void LisaaTahti(Vector paikka, double leveys, double korkeus)
157    {
158        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
159        tahti.IgnoresCollisionResponse = true;
160        tahti.Position = paikka;
161        tahti.Image = tahtiKuva;
162        tahti.Tag = "kolikko";
163        Add(tahti);
164    }
165
166    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
167    {
168        pelaaja1.Position = paikka;
169        pelaaja1.Mass = 4.0;
170        pelaaja1.Image = pelaajanKuva;
171        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
172        AddCollisionHandler(pelaaja1, "piikki", TormaaPiikkiin);
173        AddCollisionHandler(pelaaja1, "maali", TormasiMaaliin);
174       
175        AddCollisionHandler(pelaaja1, "vihu", TormaaVihuun);
176        Add(pelaaja1);
177    }
178
179    void LisaaNappaimet()
180    {
181        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
182        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
183
184        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
185        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
186        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
187
188        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
189
190        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
191        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
192        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
193        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
194
195        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
196    }
197
198    void Liikuta(PlatformCharacter hahmo, double nopeus)
199    {
200        hahmo.Walk(nopeus);
201    }
202
203    void Hyppaa(PlatformCharacter hahmo, double nopeus)
204    {
205        hahmo.Jump(nopeus);
206    }
207
208    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
209    {
210        maaliAani.Play();
211        MessageDisplay.Add("Keräsit tähden!");
212        tahti.Destroy();
213    }
214
215    void LisaaPiikki(Vector paikka, Double leveys, Double korkeus)
216    {
217        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
218        piikki.Tag = "piikki";
219        piikki.Position = paikka;
220        piikki.Image = piikkikuva;
221        Add(piikki);
222
223    }
224
225   
226
227    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
228    {
229
230        if (kohde.Tag == "tynnyri")
231        {
232            Explosion rajahdys = new Explosion(45);
233            rajahdys.Position = kohde.Position;
234            rajahdys.UseShockWave = true;
235            rajahdys.AddShockwaveHandler("vihu", PaineaaltoOsuu);
236            Add(rajahdys);
237            kohde.Destroy();
238        }
239
240
241
242        if (kohde.Tag == "vihu")
243        { // if tag tee räjähdys
244            kohde.Destroy();
245        }
246        if (kohde.Tag =="laatikko")
247       {
248         ((Laatikko)kohde).spawnausajstin.Stop();
249         ((Laatikko)kohde).VahennaEnergiaa(1);
250             
251      }
252        ammus.Destroy();
253    }
254
255    void PaineaaltoOsuu(IPhysicsObject olio, Vector shokki)
256    {
257        olio.Destroy();
258    }
259
260    void AmmuAseella(PlatformCharacter pelaaja)
261    {
262        PhysicsObject ammus = pelaaja.Weapon.Shoot();
263       
264        if (ammus != null)
265        {
266            haulikkoaani.Play();
267            //ammus.Size *= 3;
268            ammus.Image = panoskuva;
269            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.0);
270           
271        }
272    }
273
274    void LisaaVihu(Vector paikka, Double leveys, Double korkeus)
275    {
276        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
277        vihu.Position = paikka;
278        vihu.Tag = "vihu";
279        vihu.Image = vihukuva;
280        AddCollisionHandler(vihu, "piikki", CollisionHandler.DestroyObject);
281        Add(vihu);
282
283        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
284        seuraajanAivot.DistanceFar = 100;
285       // seuraajanAivot.DistanceClose = 200;
286        vihu.CollisionIgnoreGroup = 2;
287        vihu.Brain = seuraajanAivot;
288        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
289        tasoAivot.Speed = 50;
290        seuraajanAivot.FarBrain = tasoAivot;
291       
292       
293    }
294
295    void LisaaNakymaton(Vector paikka, Double leveys, Double korkeus)
296    {
297        LisaaPalikka(paikka, leveys, korkeus, "näkymätön", näkymätönkuva,2);
298    }
299
300    void LuoElamaLaskuri()
301    {
302        elamalaskuri = new DoubleMeter(3, 0, 3);
303        // elämä nyt,minimi,max
304        elamalaskuri.LowerLimit += ElamaLoppui;
305
306        ProgressBar elamaPalkki = new ProgressBar(150, 20);
307        elamaPalkki.X = Screen.Left + 150;
308        elamaPalkki.Y = Screen.Top - 20;
309        elamaPalkki.BindTo(elamalaskuri);
310        elamaPalkki.Color = Color.Transparent;
311        elamaPalkki.BarColor = Color.Red;
312        elamaPalkki.BorderColor = Color.Black;
313        Add(elamaPalkki);
314    }
315
316   public void ElamaLoppui()
317    {
318        MessageDisplay.Add("Huudat elämäsi puolesta kun sisälmyksesi valuvat maahan!");
319        pelaaja1.Destroy();
320    }
321
322    void TormaaPiikkiin(PhysicsObject hahmo, PhysicsObject piikki)
323    {
324        elamalaskuri.Value -= 3;
325    }
326
327    void TormaaVihuun(PhysicsObject hahmo, PhysicsObject vihu)
328    {
329        if (!onKuolematon)
330        {
331            elamalaskuri.Value -= 1;
332            onKuolematon = true;
333            Timer.SingleShot(0.5, delegate { onKuolematon = false; });
334        }
335       
336
337    }
338
339    void VihuTormaa()
340    {
341
342    }
343
344
345    void LisaaTynnyri(Vector paikka, Double leveys, Double korkeus)
346    {
347        PhysicsObject tynnyri = PhysicsObject.CreateStaticObject(leveys, korkeus);
348        tynnyri.Tag = "tynnyri";
349        tynnyri.Position = paikka;
350        tynnyri.Image = tynnyrikuva;
351        tynnyri.CollisionIgnoreGroup = 2;
352        Add(tynnyri);
353    }
354    void RandomUusiLaatikko()
355    {
356        Double Y = Level.Top - 25;
357        Double X = RandomGen.NextDouble(Level.Left, Level.Right);
358        Laatikko laatikko = new Laatikko(50, 50);
359        laatikko.Position = new Vector(X, Y);
360        laatikko.Tag = "laatikko";
361        laatikko.Image = laatikkokuva;
362        laatikko.CollisionIgnoreGroup = 2;
363        laatikko.spawnausajstin.Timeout += delegate { 
364            LisaaVihu((laatikko.Position + new Vector(0, laatikko.Height/2.0 + RUUDUN_KOKO/2.0)), RUUDUN_KOKO, RUUDUN_KOKO); 
365        };
366       
367        Add(laatikko);
368    }
369
370   
371   
372
373
374   
375
376}
Note: See TracBrowser for help on using the repository browser.