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

Revision 5008, 10.8 KB checked in by juonoljo, 6 years ago (diff)

uuuz kenttä

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