source: 2015/26/SanteriP/gunmayhem/gunmayhem/gunmayhem/gunmayhem.cs @ 6465

Revision 6465, 10.8 KB checked in by sapaloka, 5 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
9class Pelaaja : PlatformCharacter2
10{
11    public bool lento { get; set; }
12
13    public Pelaaja(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16        lento = false;
17    }
18}
19
20public class gunmayhem : PhysicsGame
21{
22    //const double nopeus = 250;
23    const double hyppyNopeus = 800;
24    const int RUUDUN_KOKO = 40;
25
26    Pelaaja pelaaja1;
27    Pelaaja pelaaja2;
28    IntMeter pisteLaskuri1;
29    IntMeter pisteLaskuri2;
30
31    Vector alkupaikka1;
32    Vector alkupaikka2;
33
34    Image asekuva = LoadImage("ase");
35    Image pelaajanKuva = LoadImage("pelaaja");
36    Image pelaajanKuva2 = LoadImage("pelaaja2");
37    Image tahtiKuva = LoadImage("tahti");
38    Image ruohokuva = LoadImage("ruoho");
39    Image pommikuva = LoadImage("tramppa");
40    Image pilvikuva = LoadImage("pilvi");
41    Image tiilikuva = LoadImage("tiili3");
42    Image arkkukuva = LoadImage("arkku");
43    SoundEffect maaliAani = LoadSoundEffect("maali");
44    SoundEffect aseaani = LoadSoundEffect("aseaani");
45    SoundEffect pomppuaani = LoadSoundEffect("pomppuaani");
46    SoundEffect kranaattiaani = LoadSoundEffect("kranaattiaani");
47    SoundEffect arkkuaani = LoadSoundEffect("arkkuaani");
48
49    public override void Begin()
50    {
51        SmoothTextures = false;
52        Gravity = new Vector(0, -1000);
53
54        LuoKentta();
55        LisaaNappaimet();
56
57        pisteLaskuri1 = LuoPistelaskuri(Screen.Right - 100);
58        pisteLaskuri2 = LuoPistelaskuri(Screen.Left + 100);
59
60        Camera.Follow(pelaaja1, pelaaja2);
61        Camera.ZoomFactor = 1.2;
62        //Camera.StayInLevel = true;
63    }
64
65
66
67    IntMeter LuoPistelaskuri(double x)
68    {
69        IntMeter pisteLaskuri = new IntMeter(0);
70
71        Label pisteNaytto = new Label();
72        pisteNaytto.X = x;
73        pisteNaytto.Y = Screen.Top - 100;
74        pisteNaytto.TextColor = Color.Black;
75        pisteNaytto.Color = Color.White;
76
77        pisteNaytto.BindTo(pisteLaskuri);
78        Add(pisteNaytto);
79        return pisteLaskuri;
80    }
81
82    void LuoKentta()
83    {
84        TileMap kentta = TileMap.FromLevelAsset("kentta1");
85        kentta.SetTileMethod('#', LisaaTaso);
86        kentta.SetTileMethod('*', LisaaTahti);
87        kentta.SetTileMethod('N', LisaaPelaaja1);
88        kentta.SetTileMethod('E', LisaaPelaaja2);
89        kentta.SetTileMethod('%', LisaaPommi);
90        kentta.SetTileMethod('"', Lisaapohja);
91        kentta.SetTileMethod('/', lisaapilvi);
92        kentta.SetTileMethod('!', Lisaaarkku);
93        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
94        Level.Background.CreateGradient(Color.Gray, Color.Blue);
95    }
96
97    void LisaaTaso(Vector paikka, double leveys, double korkeus)
98    {
99        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
100        taso.Position = paikka;
101        taso.Image = tiilikuva;
102        Add(taso);
103    }
104
105    void lisaapilvi(Vector paikka, double leveys, double korkeus)
106    {
107        PhysicsObject pilvi = PhysicsObject.CreateStaticObject(leveys * 4, korkeus);
108        pilvi.Position = paikka;
109        pilvi.Image = pilvikuva;
110        Add(pilvi);
111    }
112
113    void Lisaapohja(Vector paikka, double leveys, double korkeus)
114    {
115        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
116        taso.Position = paikka;
117        taso.IsVisible = false;
118        taso.Tag = "pohja";
119        Add(taso);
120    }
121
122    void LisaaPommi(Vector paikka, double leveys, double korkeus)
123    {
124        PhysicsObject pommi = PhysicsObject.CreateStaticObject(leveys, korkeus);
125        pommi.Position = paikka;
126        pommi.Image = pommikuva;
127        Add(pommi);
128        pommi.Tag = "pommi";
129    }
130
131    void LisaaTahti(Vector paikka, double leveys, double korkeus)
132    {
133        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
134        tahti.IgnoresCollisionResponse = true;
135        tahti.Position = paikka;
136        tahti.Image = tahtiKuva;
137        tahti.Tag = "tahti";
138        Add(tahti);
139    }
140    void Tiputapommi(PlatformCharacter2 kuka)
141    {
142        PhysicsObject pommi = new PhysicsObject(LoadImage("pommi"));
143        Add(pommi);
144
145        if (kuka.FacingDirection == Direction.Right)
146        {
147            pommi.Position = kuka.Position + Vector.FromLengthAndAngle(10, Angle.FromDegrees(0));
148            pommi.Hit(Vector.FromLengthAndAngle(700, Angle.FromDegrees(45)));
149        }
150        else
151        {
152            pommi.Position = kuka.Position + Vector.FromLengthAndAngle(10, Angle.FromDegrees(180));
153            pommi.Hit(Vector.FromLengthAndAngle(700, Angle.FromDegrees(135)));
154        }
155
156        Timer ajastin = new Timer();
157        ajastin.Interval = 2.0;
158        ajastin.Timeout += delegate
159        {
160            Explosion räjähdys = new Explosion(10);
161            räjähdys.Force = 2000;
162            räjähdys.Speed = 5000;
163            räjähdys.Position = pommi.Position;
164            Add(räjähdys);
165            räjähdys.Sound = kranaattiaani;
166            pommi.Destroy();
167        };
168        ajastin.Start(1);
169    }
170
171    Pelaaja LisaaPelaaja(Vector paikka, double leveys, double korkeus, Image kuva)
172    {
173        Pelaaja pelaaja = new Pelaaja(pelaajanKuva.Width * 1.4, pelaajanKuva.Height * 1.4);
174        pelaaja.Position = paikka;
175        pelaaja.Mass = 10.0;
176        pelaaja.Image = kuva;
177        pelaaja.Tag = "pelaaja";
178        pelaaja.Shape = Shape.FromImage(pelaajanKuva);
179        pelaaja.Weapon = new AssaultRifle(30, 10);
180        pelaaja.Weapon.Image = asekuva;
181        pelaaja.Weapon.Ammo.Value = 1000;
182        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
183
184        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
185        AddCollisionHandler(pelaaja, "pommi", Tormaapommiin);
186        AddCollisionHandler(pelaaja, "pohja", Tormaapohjaan);
187        AddCollisionHandler(pelaaja, "arkku", tormaaarkkuun);
188        Add(pelaaja);
189        return pelaaja;
190    }
191
192    void AmmuAseella(PlatformCharacter2 pelaaja)
193    {
194        PhysicsObject ammus = pelaaja.Weapon.Shoot();
195
196        if (ammus != null)
197        {
198            aseaani.Play();
199            //ammus.Size *= 3;
200            //ammus.Image = ...
201            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
202        }
203    }
204
205    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
206    {
207        ammus.Destroy();
208
209        if (kohde.Tag.Equals("pelaaja"))
210        {
211            //kohde.Velocity = ammus.Velocity*20;
212            kohde.Velocity = ammus.Velocity * 1;
213        }
214    }
215
216    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
217    {
218        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus, pelaajanKuva);
219        alkupaikka1 = paikka;
220    }
221
222    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
223    {
224        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus, pelaajanKuva2);
225        alkupaikka2 = paikka;
226    }
227
228    void LisaaNappaimet()
229    {
230        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
231        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
232
233        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2,-1);
234        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2,1);
235        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
236        Keyboard.Listen(Key.Enter, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2);
237        Keyboard.Listen(Key.Down, ButtonState.Pressed, Tiputapommi, "Tiputa pommi", pelaaja2);
238
239        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1,-1);
240        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1,1);
241        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
242        Keyboard.Listen(Key.LeftShift, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
243        Keyboard.Listen(Key.S, ButtonState.Pressed, Tiputapommi, "Tiputa pommi", pelaaja1);
244
245        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
246
247        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1,-1);
248        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1,1);
249        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
250
251        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
252    }
253
254    void Liikuta(Pelaaja hahmo,int suunta)
255    {
256        //hahmo.Walk(nopeus);
257        hahmo.Walk(new Vector(suunta, 0).Angle.MainDirection);
258    }
259   
260    void Hyppaa(Pelaaja hahmo, double nopeus)
261    {
262        if (hahmo.lento)
263        {
264            hahmo.ForceJump(nopeus);
265        }
266        else
267        {
268            hahmo.Jump(nopeus);
269        }
270    }
271
272    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
273    {
274        maaliAani.Play();
275        MessageDisplay.Add("Keräsit tähden!");
276        tahti.Destroy();
277    }
278
279    void Tormaapommiin(PhysicsObject hahmo, PhysicsObject pommi)
280    {
281        Explosion räjähdys = new Explosion(200);
282        räjähdys.Position = pommi.Position + new Vector(0, 10);
283        räjähdys.Sound = null;
284        Add(räjähdys);
285        pomppuaani.Play();
286    }
287
288    void Tormaapohjaan(PhysicsObject hahmo, PhysicsObject pohja)
289    {
290        pelaaja1.Position = alkupaikka1;
291        pelaaja2.Position = alkupaikka2;
292
293        if (hahmo == pelaaja2 && hahmo.Tag.Equals("pelaaja"))
294        {
295            hahmo.Tag = "pelaaja_ei_pisteita";
296            pisteLaskuri2.Value += 1;
297            Timer.SingleShot(1, delegate { hahmo.Tag = "pelaaja"; });
298        }
299        if (hahmo == pelaaja1 && hahmo.Tag.Equals("pelaaja"))
300        {
301            hahmo.Tag = "pelaaja_ei_pisteita";
302            pisteLaskuri1.Value += 1;
303            Timer.SingleShot(1, delegate { hahmo.Tag = "pelaaja"; });
304        }
305    }
306
307    void Lisaaarkku(Vector paikka, double leveys, double korkeus)
308    {
309        PhysicsObject arkku = PhysicsObject.CreateStaticObject(leveys, korkeus);
310        arkku.Position = paikka;
311        arkku.Image = arkkukuva;
312        arkku.IgnoresCollisionResponse = true;
313        Add(arkku);
314
315        arkku.Tag = "arkku";
316    }
317
318    void tormaaarkkuun(PhysicsObject pelaaja, PhysicsObject arkku)
319    {
320        arkku.Destroy();
321        ((Pelaaja)pelaaja).lento = true;
322        arkkuaani.Play();
323        Timer.SingleShot(15, delegate
324        {
325            ((Pelaaja)pelaaja).lento = false;
326        });
327
328        Timer.SingleShot(20, delegate
329        {
330            Lisaaarkku(arkku.Position, RUUDUN_KOKO, RUUDUN_KOKO);
331        });
332
333    }
334}
Note: See TracBrowser for help on using the repository browser.