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

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