source: 2017/30/HugoE/HanniAndHoo/HanniAndHoo/HanniAndHoo/HanniAndHoo.cs @ 9855

Revision 9855, 11.4 KB checked in by lukrmoil, 13 months 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 HanniAndHoo : PhysicsGame
10{
11    Image HanninKuva = LoadImage("Hanni");
12    Image HoonKuva = LoadImage("Hoo");
13    Image taustis = LoadImage("pilvimaa");
14    Image taustis2 = LoadImage("avaruus");
15    bool peliOhi = false;
16     
17    PlasmaCannon HanninAse;
18    Cannon HoonAse;
19   
20    SoundEffect hyppyAani = LoadSoundEffect("jump");
21 
22    PeliUkko Hanni;
23    PeliUkko Hoo;
24
25    public override void Begin()
26    {
27        SmoothTextures = false;
28        AlkuValikko();
29        IsFullScreen = true;
30    }
31
32    void LuoPelaajat()
33    {
34        Hanni = new PeliUkko(90.0, 90.0);       
35        Hanni.X = Level.Left + 100.0;
36        Hanni.Y = 0.0;
37        Hanni.Color = Color.Blue;
38        Hanni.Image = HanninKuva;
39        Hanni.CanRotate = false;
40        Hanni.Tag = "pelaaja";
41        Add(Hanni);
42        Hanni.Ohjain = ControllerOne;
43        HanninAse = new PlasmaCannon(60, 20);       
44        HanninAse.ProjectileCollision = AmmusOsui;
45        HanninAse.Power.DefaultValue = 7500;
46        HanninAse.Power.Value = HanninAse.Power.DefaultValue;
47        HanninAse.X += 50;
48        HanninAse.CanHitOwner = false;
49        Hanni.Weapon = HanninAse;
50        Hoo = new PeliUkko(100.0, 100.0);
51        Hoo.Tag = "pelaaja2";
52        Hoo.X = Level.Right - 100.0;
53        Hoo.Y = 0.0;
54        Hoo.Color = Color.Red;
55        Hoo.Image = HoonKuva;
56        Hoo.CanRotate = false;
57        Add(Hoo);
58        Hoo.Ohjain = ControllerTwo;
59        HoonAse = new Cannon(90, 30);
60        HoonAse.ProjectileCollision = Ammus2Osui;
61        HoonAse.X += 80;
62        Hoo.Weapon = HoonAse;
63        HoonAse.CanHitOwner = false;
64        HoonAse.Power.DefaultValue = 32500;
65        HoonAse.Power.Value = HoonAse.Power.DefaultValue;
66        AddCollisionHandler(Hanni, "AlaReuna", ResattaaHyppyLaskuri);
67        AddCollisionHandler(Hanni, "taso", ResattaaHyppyLaskuri);
68
69        AddCollisionHandler(Hanni, "sivureuna", KimpoaReunasta);
70        AddCollisionHandler(Hoo, "sivureuna", KimpoaReunasta);
71        AddCollisionHandler(Hoo, "Alareuna", ResattaaHyppyLaskuri);
72        AddCollisionHandler(Hanni, Hoo, ResattaaHyppyLaskuri);
73        AddCollisionHandler(Hoo, Hanni, Tormaa);
74        Hoo.Elamalaskuri.LowerLimit +=LoppuValikko;
75        Hanni.Elamalaskuri.LowerLimit += LoppuValikko;       
76    }
77
78    void KimpoaReunasta(PhysicsObject tormaaja, PhysicsObject kohde)
79    {
80        PeliUkko aija = (PeliUkko)tormaaja;
81        aija.Hit(-tormaaja.Position);
82        aija.Ohjain.DisableAll();
83        Timer.SingleShot(0.3, delegate { PalautaOhjain(aija.Ohjain); });
84    }
85
86    private void PalautaOhjain(Controller ohjain)
87    {
88        if (peliOhi) return;
89        ohjain.EnableAll();
90        ClearControls();
91        LuoNappaimet();
92    }
93
94    void AlkuValikko()
95    {       
96        MediaPlayer.Play("taustamusiikki");
97        MediaPlayer.IsRepeating = true;
98        MultiSelectWindow alkuValikko = new MultiSelectWindow("Hanni vs. Hoo",
99        "Valitse kenttä", "Lopeta"); 
100        Level.Background.Color = Color.Black;
101        Add(alkuValikko);
102        alkuValikko.AddItemHandler(0, Kenttävalikko);
103        alkuValikko.AddItemHandler(1, Exit);
104
105
106    }
107    void LoppuValikko()
108    {
109        peliOhi = true;
110        MediaPlayer.Stop();
111        MultiSelectWindow loppuValikko = new MultiSelectWindow("Loppuvalikko",
112        "Pelaa uudestaan", "Lopeta");
113        Level.Background.Color = Color.Black;
114        Add(loppuValikko);
115        loppuValikko.AddItemHandler(0, Kenttävalikko);
116        loppuValikko.AddItemHandler(1, Exit);
117    }
118
119
120
121    void Kenttävalikko()
122    {
123        MultiSelectWindow Kenttävalikko = new MultiSelectWindow("Kenttävalikko", "Pilvimaa", "Avaruus");
124        Add(Kenttävalikko);
125        Kenttävalikko.AddItemHandler(0, Pilvimaa);
126        Kenttävalikko.AddItemHandler(1, Avaruus);               
127    }
128
129    void Avaruus()
130    {
131        ClearAll();
132        PhysicsObject AlaReuna = PhysicsObject.CreateStaticObject(Screen.Width, 80);
133        AlaReuna.Y = Screen.Bottom + 40;
134        AlaReuna.Tag = "AlaReuna";
135        AlaReuna.Color = Color.Black;
136        Add(AlaReuna);
137        Level.Background.Image = taustis2;
138        LuoKentta();
139        LuoPelaajat();
140        LuoNappaimet();
141        LuoTaso(Level.Left + 400.0, 0, true);
142        LuoTaso(Level.Right - 400.0, 0, true);
143        MediaPlayer.Stop();
144        MediaPlayer.Volume = 0.2;
145        MediaPlayer.Play("taistelumusaehdokas2");
146        MediaPlayer.IsRepeating = true;
147    }
148
149    void Pilvimaa()
150    {
151        ClearAll();
152        PhysicsObject AlaReuna = PhysicsObject.CreateStaticObject(Screen.Width, 80);
153        AlaReuna.Y = Screen.Bottom + 40;
154        AlaReuna.Tag = "AlaReuna";
155        AlaReuna.Color = Color.DarkBrown;
156        Add(AlaReuna);
157        Level.Background.Image = taustis;
158        LuoKentta();
159        LuoPelaajat();
160        LuoNappaimet();
161        LuoTaso(0.0, 300);
162        LuoTaso(Level.Left + 400.0, -50);
163        LuoTaso(Level.Right - 400.0, -50);
164        MediaPlayer.Stop();
165        MediaPlayer.Volume = 0.4;
166        MediaPlayer.Play("HanniVSHooGO");
167        MediaPlayer.IsRepeating = true;
168    }
169
170   
171    void Tormaa(PhysicsObject Tormaaja, PhysicsObject Kohde)
172    {
173        if (!Kohde.Tag.Equals("pelaaja")) return;     
174        PeliUkko pu = (PeliUkko)Kohde;
175        pu.Elamalaskuri.AddValue(-2);
176        PeliUkko pu2 = (PeliUkko)Tormaaja;
177        pu2.Elamalaskuri.AddValue(5);
178       
179    }
180
181    void AmmusOsui(PhysicsObject Ammus, PhysicsObject Kohde)
182    {
183        Ammus.Destroy();
184        if (!Kohde.Tag.Equals("pelaaja2")) return;
185        PeliUkko pu = (PeliUkko)Kohde;
186       
187        pu.Elamalaskuri.AddValue(-7);
188        if (Ammus.Tag.Equals("PelaajanAmmus"))
189        {
190           Hanni.Elamalaskuri.AddValue(4);
191        }
192       
193
194    }
195    void Ammus2Osui(PhysicsObject Ammus2, PhysicsObject Kohde2)
196    {     
197        Ammus2.Destroy();
198        if (!Kohde2.Tag.Equals("pelaaja")) return;
199        PeliUkko pu = (PeliUkko)Kohde2;
200        pu.Elamalaskuri.AddValue(-9);
201    }
202
203    void LuoNappaimet()
204    {
205        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppy, null, Hanni, 1250.0);
206        Keyboard.Listen(Key.D, ButtonState.Down, Kavely, null, Hanni, 650.0);
207        Keyboard.Listen(Key.A, ButtonState.Down, Kavely, null, Hanni, -650.0);
208       
209        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppy, null, Hoo, 2100.0);
210        Keyboard.Listen(Key.Right, ButtonState.Down, Kavely, null, Hoo, 350.0);
211        Keyboard.Listen(Key.Left, ButtonState.Down, Kavely, null, Hoo, -350.0);
212
213        Keyboard.Listen(Key.S, ButtonState.Pressed, AmmuAseella, "Ammu", HanninAse);
214        Keyboard.Listen(Key.Down, ButtonState.Pressed, AmmuAseella2, "Ammu2", HoonAse);
215        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
216   
217        ControllerOne.Listen(Button.RightTrigger, ButtonState.Pressed, AmmuAseella, "Ammu", HanninAse);
218        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Pressed, AmmuAseella2, "Ammu", HoonAse);
219
220        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppy, null, Hanni, 1350.0);
221        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Kavely, null, Hanni, 650.0);
222        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Kavely, null, Hanni, -650.0);
223
224        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppy, null, Hoo, 2100.0);     
225        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Kavely, null, Hoo, 300.0);
226        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Kavely, null, Hoo, -300.0);
227
228    }
229    void LuoTaso(double x, double y, bool heiluu = false)
230    {
231        Image Taso = LoadImage("platform");
232        PhysicsObject taso = PhysicsObject.CreateStaticObject(275, 20);
233        taso.X = x;
234        taso.Y = y;
235        Add(taso);     
236        taso.Image = Taso;
237        taso.Tag = "taso";
238       
239        taso.MakeOneWay();
240        if (heiluu) taso.Oscillate(new Vector(0, 18), 68, 0.20);
241
242    }
243    void LuoKentta()
244    {
245        peliOhi = false;
246        Level.Width = Screen.Width;
247        Level.Height = Screen.Height;
248        Level.Background.ScaleToLevelByWidth();
249        Gravity = new Vector(0.0, -1750.0);       
250        PhysicsObject OikeaReuna = Level.CreateRightBorder(1.0, true);
251        OikeaReuna.Tag = "OikeaReuna";
252        OikeaReuna.Tag = "sivureuna";
253        PhysicsObject VasenReuna = Level.CreateLeftBorder(1.0, true);
254        VasenReuna.Tag = "VasenReuna";
255        VasenReuna.Tag = "sivureuna";
256        PhysicsObject YlaReuna = Level.CreateTopBorder(0.0, true);
257        YlaReuna.Tag = "YlaReuna";
258
259    }
260
261
262
263    void Kavely(PeliUkko tyyppi, double liikkumisenMaara)
264    {
265
266        tyyppi.Walk(liikkumisenMaara);
267
268    }
269    void Hyppy(PeliUkko tyyppi, double hypynMaara)
270    {
271        if (tyyppi.Tag.Equals("pelaaja"))
272        {           
273            if (tyyppi.HyppyLaskuri.Value == tyyppi.HyppyLaskuri.MaxValue)
274            {
275               
276                return;               
277            }
278
279            tyyppi.ForceJump(hypynMaara);
280            hyppyAani.Play();
281        }
282        else
283        {           
284            bool onnistuikoHyppy = tyyppi.Jump(hypynMaara);
285            if (onnistuikoHyppy)
286            {
287                hyppyAani.Play();
288            }
289        }                     
290        tyyppi.HyppyLaskuri.AddValue(1);
291     
292    }
293
294    void ResattaaHyppyLaskuri(PhysicsObject tyyppi, PhysicsObject lattia)
295    {
296        if (lattia.Y > tyyppi.Y)
297       
298        {
299            return;
300        }
301        (tyyppi as PeliUkko).HyppyLaskuri.Value = 0;
302    }
303
304 
305    void AmmuAseella(PlasmaCannon HanninAse)
306    {
307        PhysicsObject Ammus = HanninAse.Shoot();
308        HanninAse.FireRate = 3;
309        if (Ammus != null)
310        {
311            Ammus.Size *= 3.5;
312            Ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
313            Ammus.Tag = "PelaajanAmmus";
314            Ammus.CollisionIgnoreGroup = 7;
315        }
316    }
317
318    void AmmuAseella2(Cannon HoonAse)
319    {
320        PhysicsObject Ammus2 = HoonAse.Shoot();       
321        HoonAse.FireRate = 2;
322        if (Ammus2 != null)
323       
324        {
325            Ammus2.Size *= 4.5;
326            Ammus2.MaximumLifetime = TimeSpan.FromSeconds(1.0);
327            Ammus2.Tag = "Pelaajan2Ammus";
328            Ammus2.CollisionIgnoreGroup = 8;
329        } 
330
331    }
332
333    class PeliUkko : PlatformCharacter
334    {
335        public IntMeter Elamalaskuri = new IntMeter(100, 0, 100);
336        public IntMeter HyppyLaskuri = new IntMeter(0, 0, 2);
337        public Controller Ohjain;       
338        public PeliUkko(double leveys, double korkeus)
339        : base(leveys, korkeus)
340        {
341            Elamalaskuri.LowerLimit += delegate { this.Destroy(); Explosion rajahdys = new Explosion(100);
342            rajahdys.Position = this.Position;
343            Game.Add (rajahdys);
344            };       
345            ProgressBar elamaPalkki = new ProgressBar(50, 20);
346            elamaPalkki.Color = Color.Gray;
347            elamaPalkki.X = 0.0;
348            elamaPalkki.Y = korkeus / 2.0 + korkeus / 4;
349            elamaPalkki.BindTo(Elamalaskuri);
350            Add(elamaPalkki);
351        }       
352    }   
353           
354}
355
356
357
358
359
Note: See TracBrowser for help on using the repository browser.