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

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