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

Revision 6989, 13.5 KB checked in by raemvele, 5 years ago (diff)

Kaikkee

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