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

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