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

Revision 4976, 9.6 KB checked in by juonoljo, 8 years ago (diff)

laatikot laatikoi laatikkoja

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