source: 2015/30/EmilL/KariO/KariO/KariO/KariO.cs @ 7027

Revision 7027, 15.5 KB checked in by raemvele, 7 years ago (diff)

Peli valmis

Line 
1using System;
2using System.Linq;
3using System.Collections.Generic;
4using Jypeli;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Jypeli.Effects;
8using Jypeli.Widgets;
9
10/// @author Emil Lehmuskoski
11/// @version 1.0
12/// <summary>
13/// Apple Rush
14/// </summary>
15public class AppleRush : PhysicsGame
16{
17    const double nopeus = 200;
18    const double hyppyNopeus = 500;
19    const int RUUDUN_KOKO = 40;
20
21    Font Fontti = LoadFont("SpriteFont1");
22
23    int kenttänumero = 1;
24
25   List< Vector> Hyppypaikka =new List<Vector> ();
26
27    PlatformCharacter pelaaja1;
28    PlatformCharacter pelaaja2;
29    Image pelaajanKuva = LoadImage("Hyvis");
30    Image tahtiKuva = LoadImage("Euronjuusto");
31    Image VihollisenKuva = LoadImage("AndroidPahis");
32    Image PiikkiKuva = LoadImage("Piikki");
33    Image RuohoKuva = LoadImage("Ruoho");
34    Image KiviKuva = LoadImage("Kivi");
35    Image taustaKuva = LoadImage("Taustakuva");
36    Image WindowsKuva = LoadImage("Windows");
37    Image HaamuKuva = LoadImage("Haamu");
38    Image RäjähdysKuva = LoadImage("Räjähdys");
39    Image taustaKuva2 = LoadImage("Taustakuva2");
40    SoundEffect maaliAani = LoadSoundEffect("KeräysÄäni");
41    SoundEffect RäjähdysÄäni = LoadSoundEffect("Explosion31");
42    IntMeter pisteLaskuri;
43
44    public override void Begin()
45    {
46        SmoothTextures = false;
47        LisaaAlkuvalikko();
48    }
49
50    void Aloitapeli()
51    {
52        ClearAll();
53
54        if (kenttänumero == 5)
55        {
56            VoittoRuutu();
57            return;
58        }
59
60        Gravity = new Vector(0, -1000);
61        LuoPistelaskuri();
62
63        LuoKentta();
64        LisaaNappaimet();
65        MediaPlayer.Play("tausta biisi");
66        Level.Background.Image = taustaKuva;
67        Level.Background.FitToLevel();
68
69        Camera.Follow(pelaaja1);
70        Camera.ZoomFactor = 4.0;
71        //Camera.StayInLevel = true;
72    }
73
74    void VoittoRuutu()
75    {
76        Label Teksti = new Label("VICTORY");
77        Add(Teksti);
78        Teksti.Font = Fontti;
79        Level.Background.Image = taustaKuva2;
80        Teksti.TextColor = Color.Ultramarine;
81        Teksti.TextScale = new Vector(4, 4);
82        Level.Background.Width = Screen.Height;
83        Level.Background.Height = Screen.Height;
84        //Level.Background.FitToLevel();
85
86        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
87    }
88
89    void LuoKentta()
90    {
91        Hyppypaikka.Clear();
92        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
93        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Kenttä"+kenttänumero);
94
95        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
96        ruudut.SetTileMethod(Color.FromHexCode("002AFF"), LisaaPelaaja1);
97        ruudut.SetTileMethod(Color.FromHexCode("8330FF"), LisaaPelaaja2);
98        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), LisaaTaso);
99        ruudut.SetTileMethod(Color.FromHexCode("FFAD21"), LisaaHamppari);
100        ruudut.SetTileMethod(Color.FromHexCode("FF0000"), LisaaVihollinen);
101        ruudut.SetTileMethod(Color.FromHexCode("7F0000"), LisaaPiikki);
102        ruudut.SetTileMethod(Color.FromHexCode("808080"), LisaaLinna);
103        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), LisaaRuoho);
104        ruudut.SetTileMethod(Color.FromHexCode("7F0037"), LisaaKivi);
105        ruudut.SetTileMethod(Color.FromHexCode("FF7FB4"), LisaaWindows);
106        ruudut.SetTileMethod(Color.FromHexCode("FF05D9"), LisaaHyppypaikka);
107        ruudut.SetTileMethod(Color.FromHexCode("FF5000"), LisaaHaamu);
108        //3. Execute luo kentän
109        //   Parametreina leveys ja korkeus
110        ruudut.Execute(20, 20);
111        Level.CreateBorders();
112    }
113
114    void LisaaTaso(Vector paikka, double leveys, double korkeus)
115    {
116        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
117        taso.Position = paikka;
118        taso.Color = Color.Green;
119        Add(taso);
120    }
121
122    void LisaaHamppari(Vector paikka, double leveys, double korkeus)
123    {
124        PhysicsObject Euronjuusto = PhysicsObject.CreateStaticObject(leveys, korkeus);
125        Euronjuusto.IgnoresCollisionResponse = true;
126        Euronjuusto.Position = paikka;
127        Euronjuusto.Image = tahtiKuva;
128        Euronjuusto.Tag = "Euronjuusto";
129        Add(Euronjuusto);
130        pisteLaskuri.MaxValue++;
131    }
132
133    PlatformCharacter LisaaPelaaja(Vector paikka, double leveys, double korkeus)
134    {
135        PlatformCharacter pelaaja = new PlatformCharacter(leveys, korkeus);
136        pelaaja.Position = paikka;
137        pelaaja.Mass = 50.0;
138        pelaaja.Tag = "pelaaja";
139        pelaaja.Image = pelaajanKuva;
140        AddCollisionHandler(pelaaja, "Euronjuusto", TormaaJuustohampurilaiseen);
141        Add(pelaaja);
142        AddCollisionHandler(pelaaja, "Vihollinen", PelaajaTormasi);
143        AddCollisionHandler(pelaaja, "Maali", TörmääMaaliin);
144        return pelaaja;
145    }
146
147    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
148    {
149        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus);
150    }
151    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
152    {
153        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus);
154    }
155
156    void LisaaNappaimet()
157    {
158        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
159        Keyboard.Listen(Key.Escape, ButtonState.Pressed, LisaaLopetusvalikko, "Lopeta peli");
160
161        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
162        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
163        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
164
165        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
166        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
167        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
168
169        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
170
171        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
172        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
173        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
174
175    }
176
177    void Liikuta(PlatformCharacter hahmo, double nopeus)
178    {
179        hahmo.Walk(nopeus);
180    }
181
182    void Hyppaa(PlatformCharacter hahmo, double nopeus)
183    {
184        hahmo.Jump(nopeus);
185    }
186
187    void TormaaJuustohampurilaiseen(PhysicsObject hahmo, PhysicsObject tahti)
188    {
189        maaliAani.Play();
190        MessageDisplay.Add("You collected cheeseburher! Nice Job!");
191        tahti.Destroy();
192        pisteLaskuri.Value += 1;
193    }
194    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
195    {
196        PlatformCharacter Vihollinen = new PlatformCharacter(leveys-5, korkeus-5);
197        Vihollinen.Position = paikka;
198        Vihollinen.Mass = 4.0;
199        Vihollinen.Image = VihollisenKuva;
200        Add(Vihollinen);
201        Vihollinen.Tag = "Vihollinen";
202
203        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
204        tasoAivot.Speed = 50;
205
206        Vihollinen.Brain = tasoAivot;
207
208    }
209    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
210    {
211        PhysicsObject Piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
212        Piikki.Position = paikka;
213        Piikki.Image = PiikkiKuva;
214        Add(Piikki);
215        Piikki.Tag = "Vihollinen";
216
217    }
218    void LisaaLinna(Vector paikka, double leveys, double korkeus)
219    {
220        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
221        taso.Position = paikka;
222        taso.Color = Color.Gray;
223        Add(taso);
224        taso.Tag = "Maali";
225    }
226    void PelaajaTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
227    {
228        MessageDisplay.Add("You died :(");
229        Explosion Räjähdys = new Explosion(100);
230        Räjähdys.Position = kohde.Position;
231        Add(Räjähdys);
232        tormaaja.Destroy();
233        kohde.Destroy();
234
235        Timer.SingleShot(2, Aloitapeli);
236    }
237     void LisaaRuoho(Vector paikka, double leveys, double korkeus)
238    {
239        PhysicsObject Ruoho = PhysicsObject.CreateStaticObject(leveys, korkeus);
240        Ruoho.Position = paikka;
241        Ruoho.Image = RuohoKuva;
242        Add(Ruoho);
243
244   }
245     void TörmääMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
246     {
247         if (pisteLaskuri.Value == pisteLaskuri.MaxValue)
248         {
249             kenttänumero++;
250             Aloitapeli();
251         }
252
253     }
254     void LisaaKivi(Vector paikka, double leveys, double korkeus)
255     {
256         PhysicsObject Kivi = PhysicsObject.CreateStaticObject(leveys, korkeus);
257         Kivi.Position = paikka;
258         Kivi.Image = KiviKuva;
259         Add(Kivi);
260
261     }
262     void LuoPistelaskuri()
263     {
264         pisteLaskuri = new IntMeter(0,0,0);
265
266         Label pisteNaytto = new Label();
267         pisteNaytto.X = Screen.Right  -100;
268         pisteNaytto.Y = Screen.Top - 100;
269         pisteNaytto.TextColor = Color.Red;
270         
271         pisteNaytto.BindTo(pisteLaskuri);
272         Add(pisteNaytto);
273     }
274     void LisaaWindows(Vector paikka, double leveys, double korkeus)
275     {
276         PlatformCharacter Windows = new PlatformCharacter(leveys, korkeus);
277         Windows.Position = paikka;
278         Windows.Mass = 4.0;
279         Windows.Image = WindowsKuva;
280         Add(Windows);
281         Windows.Tag = "Windows";
282         Windows.Weapon = new AssaultRifle(30, 10);
283         Windows.Weapon.InfiniteAmmo = true;
284         Windows.Weapon.FireRate = 0.1;
285         Windows.Weapon.ProjectileCollision = AmmusOsui;
286
287         IntMeter Elämät = new IntMeter(4, 0, 4);
288         ProgressBar elamaPalkki = new ProgressBar(20, 5);
289         elamaPalkki.Y = 20;
290         elamaPalkki.BindTo(Elämät);
291         Windows.Add(elamaPalkki);
292
293         AddCollisionHandler(Windows, "pelaaja", delegate(PhysicsObject W, PhysicsObject pelaaja)
294         {
295             double etäisyys = double.MaxValue;
296             Vector lähin = Vector.Zero;
297             foreach (Vector p in Hyppypaikka)
298             {
299                 double e = Vector.Distance(pelaaja.Position, p);
300                 if (e < etäisyys)
301                 {
302                     lähin = p;
303                     etäisyys = e;
304                 }
305             }
306             pelaaja.Position = lähin;
307             Elämät.Value--;
308         });
309
310         Timer ajastin = new Timer();
311         ajastin.Interval = 0.01;
312         ajastin.Timeout += delegate
313         {
314             AmmuAseella(Windows);
315         };
316         ajastin.Start();
317         
318         Elämät.LowerLimit += delegate
319         {
320             Windows.Destroy();
321             ajastin.Stop();
322         };
323     }
324
325     void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
326     {
327         ammus.Destroy();
328     }
329
330     void AmmuAseella(PlatformCharacter Boss)
331     {
332         PlatformCharacter kohde = pelaaja1;
333         if (Vector.Distance(Boss.Position, pelaaja2.Position) < Vector.Distance(Boss.Position, pelaaja1.Position))
334         {
335             kohde = pelaaja2;
336         }
337
338         Boss.Weapon.AbsoluteAngle = (kohde.Position - Boss.Position).Angle;
339         PhysicsObject ammus = Boss.Weapon.Shoot();
340
341         if (ammus != null)
342         {
343             ammus.Velocity *= 0.2;
344             ammus.Size *= 1;
345             //ammus.Width *= 2;
346             ammus.Image = null;
347             ammus.Color = Color.Blue;
348             ammus.Tag = "Vihollinen";
349             ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
350         }
351     }
352     void LisaaHyppypaikka(Vector paikka, double leveys, double korkeus)
353     {
354         Hyppypaikka.Add (paikka);
355     }
356     void LisaaHaamu(Vector paikka, double leveys, double korkeus)
357     {
358         PlatformCharacter Vihollinen = new PlatformCharacter(leveys*6, korkeus*6);
359         Vihollinen.Position = paikka;
360         Vihollinen.Y += korkeus*2;
361         Vihollinen.Mass = 4.0;
362         Vihollinen.Image = HaamuKuva;
363         Vihollinen.CollisionIgnoreGroup = 1;
364         Add(Vihollinen);
365
366         IntMeter Elämät = new IntMeter(1, 0, 10);
367         ProgressBar elamaPalkki = new ProgressBar(40, 10);
368         elamaPalkki.Y = 80;
369         elamaPalkki.BindTo(Elämät);
370         Vihollinen.Add(elamaPalkki);
371
372         Timer ajastin = new Timer();
373         ajastin.Interval = 1.5;
374         ajastin.Timeout += delegate
375         {
376             PhysicsObject Ammus = new PhysicsObject(30, 30);
377             Ammus.Position = Vihollinen.Position;
378             Ammus.Bottom = Vihollinen.Bottom;
379             Ammus.Shape = Shape.Circle;
380             Ammus.CollisionIgnoreGroup = 1;
381             Ammus.KineticFriction = 0;
382             Ammus.StaticFriction = 0;
383             Ammus.Hit(new Vector(-500, 0));
384             Ammus.LifetimeLeft = TimeSpan.FromSeconds(3);
385             Add(Ammus);
386             Ammus.Tag = "Vihollinen";
387         };
388         ajastin.Start();
389
390         AddCollisionHandler(Vihollinen, "pelaaja", delegate(PhysicsObject W, PhysicsObject pelaaja)
391         {
392             Elämät.Value--;
393             if (Elämät.Value > 0)
394             {
395                 double etäisyys = double.MaxValue;
396                 Vector lähin = Vector.Zero;
397                 foreach (Vector p in Hyppypaikka)
398                 {
399                     double e = Vector.Distance(pelaaja.Position, p);
400                     if (e < etäisyys)
401                     {
402                         lähin = p;
403                         etäisyys = e;
404                     }
405                 }
406                 pelaaja.Position = lähin;
407             }
408         });
409
410         Elämät.LowerLimit += delegate
411         {
412             Vihollinen.Destroy();
413             ajastin.Stop();
414
415             ExplosionSystem rajahdys = new ExplosionSystem(RäjähdysKuva, 1000);
416             Add(rajahdys);
417             rajahdys.AddEffect(Vihollinen.X, Vihollinen.Y, 200);
418             RäjähdysÄäni.Play();
419         };
420     }
421     void LisaaAlkuvalikko()
422     {
423         ClearAll();
424         MultiSelectWindow alkuValikko = new MultiSelectWindow("Apple Rush", "Start Game", "Help", "Exit");
425         Add(alkuValikko);
426         alkuValikko.AddItemHandler(0, Aloitapeli);
427         alkuValikko.AddItemHandler(1, Help);
428         alkuValikko.AddItemHandler(2, Exit);
429     }
430
431     void LisaaLopetusvalikko()
432     {
433         MultiSelectWindow LopetusValikko = new MultiSelectWindow("Restart?", "Yes", "No");
434         Add(LopetusValikko);
435         LopetusValikko.AddItemHandler(0, LisaaAlkuvalikko);
436     }
437    void Help()
438    {
439        Label Teksti = new Label("Player1 Moves with arrow keys and Player2 with A,W and D \n\nCollect every cheeseburger on the map to move foward on maps! \n\nIf you touch an Android you will die\n\nHave fun!");
440        Add(Teksti);
441        Add(Teksti);
442        Teksti.Font = Fontti;
443        Teksti.TextColor = Color.Aquamarine;
444        Teksti.TextScale = new Vector(1, 1);
445        Level.Background.Color = Color.Black;
446        //Label Aputeksti
447        Keyboard.Listen(Key.Escape, ButtonState.Pressed, LisaaAlkuvalikko, null);
448    }
449}
Note: See TracBrowser for help on using the repository browser.