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

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