source: 2013/30/ViljamiV/kill_everypody_GAME/kill_everypody_GAME/kill_everypody_GAME/kill_everypody_GAME.cs @ 5545

Revision 5545, 12.1 KB checked in by koannak, 6 years 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 kill_everypody_GAME : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    bool voikoPelaajaAmpua = true;
17    Image DragonJonnenKuva = LoadImage("DragonJonne");
18    Image VihunKuva = LoadImage("Vihu");
19    Image[] seisomisanimaatio = LoadImages("Trollface");
20    Image[] kävelykuvat = LoadImages("Trollface", "Trollface2");
21    Image[] hyokkausanimaatio = LoadImages("Trollfaceampuu");
22
23    Image esKuva = LoadImage("es");
24    Image ammusKuva = LoadImage("Panos");
25    Timer lataaEnergiaaAjastin = new Timer();
26    DoubleMeter energia;
27    DoubleMeter elamat;
28    IntMeter esLaskuri;
29    Vector? maaliAlue;
30
31    SoundEffect laaserAani = LoadSoundEffect("maali");
32    SoundEffect aseAani = LoadSoundEffect("laser");
33
34    int nykyinenKentta = 3;
35
36
37    public override void Begin()
38    {
39        //SetWindowSize(1024, 768, false);
40        MediaPlayer.Play("perusmusa");
41        MediaPlayer.IsRepeating = true;
42        AloitaKentta(nykyinenKentta);
43    }
44
45
46    void AloitaKentta(int kentanNro)
47    {
48        ClearAll();
49        Gravity = new Vector(0, -1000);
50
51        LisaaLaskuri();
52        LuoKentta("kentta" + kentanNro);
53        LisaaNappaimet();
54
55        LisaaEnergiaPalkki();
56        LisaaElamaPalkki();
57
58        lataaEnergiaaAjastin = new Timer();
59        lataaEnergiaaAjastin.Interval = 0.2;
60        lataaEnergiaaAjastin.Timeout += delegate { energia.Value += 1; };
61        lataaEnergiaaAjastin.Start();
62
63        Camera.Follow(pelaaja1);
64        Camera.ZoomFactor = 1.0;
65        Camera.StayInLevel = true;
66
67        nykyinenKentta = kentanNro;
68    }
69
70    void SeuraavaKentta()
71    {
72        if (nykyinenKentta < 4)
73        {
74            AloitaKentta(nykyinenKentta + 1);
75        }
76        else
77        {
78            VoititPelin();
79        }
80    }
81
82    void VoititPelin()
83    {
84        ClearAll();
85        Label teksti = new Label("Voitit pelin");
86        Add(teksti);
87
88        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
89    }
90
91    void LisaaEnergiaPalkki()
92    {
93        energia = new DoubleMeter(100, 0, 100);
94        energia.LowerLimit += delegate { voikoPelaajaAmpua = false; };
95        energia.AddTrigger(20, TriggerDirection.Up, delegate(double d) { voikoPelaajaAmpua = true; });
96        ProgressBar energiaPalkki = new ProgressBar(200, 35);
97        energiaPalkki.Position = new Vector(Screen.Right - 150, Screen.Top - 50);
98        energiaPalkki.Color = Color.Blue;
99        energiaPalkki.BarColor = Color.Violet;
100        energiaPalkki.BindTo(energia);
101        Add(energiaPalkki);
102
103    }
104    void LisaaElamaPalkki()
105    {
106        elamat = new DoubleMeter(10, 0, 10);
107        elamat.LowerLimit += delegate { ClearAll(); AloitaKentta(nykyinenKentta); };
108
109        ProgressBar ElamaPalkki = new ProgressBar(200, 35);
110        ElamaPalkki.Position = new Vector(Screen.Right - 150, Screen.Top - 10);
111        ElamaPalkki.Color = Color.Blue;
112        ElamaPalkki.BarColor = Color.Red;
113        ElamaPalkki.BindTo(elamat);
114        Add(ElamaPalkki);
115    }
116
117    void LuoKentta(string kentanNimi)
118    {
119        if (nykyinenKentta == 4) MediaPlayer.Play("dungeonboss");
120
121        TileMap kentta = TileMap.FromLevelAsset(kentanNimi);
122        kentta.SetTileMethod('#', LisaaTaso);
123        kentta.SetTileMethod('M', LisaaMaali);
124        kentta.SetTileMethod('O', LisaaDragonJonne);
125        kentta.SetTileMethod('*', LisaaTahti);
126        kentta.SetTileMethod('N', LisaaPelaaja);
127        kentta.SetTileMethod('V', LisaaVihu);
128
129        maaliAlue = null;
130
131        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
132        Level.CreateBorders();
133        Level.Background.Image = LoadImage("Tausta");
134        Level.Background.FitToLevel();
135    }
136
137
138    void LisaaMaali(Vector paikka, double leveys, double korkeys)
139    {
140        maaliAlue = paikka;
141
142    }
143
144
145    void LisaaDragonJonne(Vector paikka, double leveys, double korkeys)
146    {
147
148        DragonJonne DragonJonne = new DragonJonne(leveys * 6.9, korkeys * 6.5, 80);
149        //DragonJonne.IgnoresCollisionResponse = true;
150        DragonJonne.Restitution = 10.0;
151        DragonJonne.IgnoresGravity = true;
152        DragonJonne.Position = paikka;
153        DragonJonne.Mass = 50.0;
154        //vihu.Color = Color.Red;
155        DragonJonne.Image = DragonJonnenKuva;
156        DragonJonne.Tag = "DragonJonne";
157        DragonJonne.Shape = Shape.Circle;
158        Add(DragonJonne);
159
160
161        if (maaliAlue != null)
162        {
163            DragonJonne.MoveTo((Vector)maaliAlue, nopeus - 50, JonneVoittaa);
164        }
165        else
166        {
167            Timer ajastin = new Timer();
168            ajastin.Interval = 2.0;
169            ajastin.Timeout += delegate
170            {
171                DragonJonne.Hit(RandomGen.NextVector(20000.0, 30000.0));
172
173            };
174            ajastin.Start();
175
176            DragonJonne.Elamat.LowerLimit += VoititPelin;
177        }
178
179        GameObject palkinPaikka = new GameObject(50, 50);
180        palkinPaikka.Position = new Vector(0, 150);
181        palkinPaikka.IsVisible = false;
182        //Add(palkinPaikka);
183        DragonJonne.Add(palkinPaikka);
184
185        ProgressBar DragonJonnenElamat = new ProgressBar(70, 30);
186        DragonJonnenElamat.IsVisible = true;
187        DragonJonnenElamat.BindTo(DragonJonne.Elamat);
188        palkinPaikka.Add(DragonJonnenElamat);
189
190
191
192    }
193
194
195    void JonneVoittaa()
196    {
197
198        MessageDisplay.Add("JONNE WON!"); pelaaja1.Destroy();
199    }
200
201
202
203
204    void LisaaVihu(Vector paikka, double leveys, double korkeus)
205    {
206
207        Vihu vihu = new Vihu(leveys * 1.5, korkeus * 1.5, 5);
208        vihu.Position = paikka;
209        //vihu.Color = Color.Red;
210        vihu.Image = VihunKuva;
211        vihu.MirrorImage();
212        vihu.Tag = "Vihu";
213        Add(vihu);
214
215        PlatformWandererBrain Aivot = new PlatformWandererBrain();
216        Aivot.Speed = nopeus - 50;
217        vihu.Brain = Aivot;
218
219        GameObject palkinPaikka = new GameObject(50, 50);
220        palkinPaikka.Position = new Vector(0, 50);
221        palkinPaikka.IsVisible = false;
222        //Add(palkinPaikka);
223        vihu.Add(palkinPaikka);
224
225        ProgressBar vihunElamat = new ProgressBar(70, 30);
226        vihunElamat.IsVisible = true;
227        vihunElamat.BindTo(vihu.Elamat);
228        palkinPaikka.Add(vihunElamat);
229
230
231    }
232    void LisaaLaskuri()
233    {
234        esLaskuri = new IntMeter(0, 0, 6);
235        esLaskuri.UpperLimit += SeuraavaKentta;
236
237        Label pisteNaytto = new Label();
238        pisteNaytto.Left = Screen.Left + 50;
239        pisteNaytto.Top = Screen.Top - 50;
240        pisteNaytto.TextColor = Color.White;
241        pisteNaytto.Color = Color.Black;
242
243        pisteNaytto.BindTo(esLaskuri);
244        Add(pisteNaytto);
245    }
246
247    void LisaaTaso(Vector paikka, double leveys, double korkeus)
248    {
249        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
250        taso.Position = paikka;
251        taso.Color = Color.Green;
252        Add(taso);
253    }
254
255    void LisaaTahti(Vector paikka, double leveys, double korkeus)
256    {
257        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
258        tahti.IgnoresCollisionResponse = true;
259        tahti.Position = paikka;
260        tahti.Image = esKuva;
261        tahti.Tag = "es";
262        Add(tahti);
263    }
264
265    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
266    {
267        pelaaja1 = new PlatformCharacter(leveys, korkeus);
268        pelaaja1.Position = paikka;
269        pelaaja1.Mass = 4.0;
270        pelaaja1.AnimWalk = new Animation(kävelykuvat);
271        pelaaja1.AnimIdle = new Animation(seisomisanimaatio);
272        AddCollisionHandler(pelaaja1, "es", TormaaTahteen);
273        AddCollisionHandler(pelaaja1, "Vihu", TormaaVihuun);
274        AddCollisionHandler(pelaaja1, "DragonJonne", TormaaVihuun);
275
276        //pelaaja1 on PlatformCharacter-tyyppinen
277        pelaaja1.Weapon = new AssaultRifle(30, 10);
278        pelaaja1.Weapon.AttackSound = null;
279
280        //Ammusten määrä aluksi:
281        pelaaja1.Weapon.Ammo.Value = 5000;
282        pelaaja1.Weapon.FireRate = 5000;
283        pelaaja1.Weapon.IsVisible = false;
284        //Mitä tapahtuu kun ammus osuu johonkin?
285        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
286
287        Add(pelaaja1);
288    }
289
290    void TormaaVihuun(PhysicsObject pelaaja, PhysicsObject vihu)
291    {
292        elamat.Value -= 3;
293    }
294
295
296    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
297    {
298        ammus.Destroy();
299
300        if (kohde is Vihu)
301        {
302            ((Vihu)kohde).Elamat.Value -= 0.2;
303        }
304
305        if (kohde is DragonJonne)
306        {
307            ((DragonJonne)kohde).Elamat.Value -= 0.2;
308        }
309    }
310
311
312    void AmmuAseella(PlatformCharacter pelaaja)
313    {
314        if (!voikoPelaajaAmpua) return;
315        PhysicsObject ammus = pelaaja.Weapon.Shoot();
316        pelaaja1.PlayAnimation(new Animation(hyokkausanimaatio));
317        energia.Value--;
318
319        if (ammus != null)
320        {
321            ammus.Width *= 2;
322            ammus.Image = ammusKuva;
323            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.0);
324        }
325    }
326
327    void AloitaPeli()
328    {
329        nykyinenKentta--;
330        SeuraavaKentta();
331    }
332
333
334
335    void LisaaNappaimet()
336    {
337        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
338        Keyboard.Listen(Key.Space, ButtonState.Pressed, delegate { if(voikoPelaajaAmpua) aseAani.Play(0.3, 0.0, 0.0); }, null);
339        Keyboard.Listen(Key.Space, ButtonState.Released, delegate { aseAani.Stop(); }, null);
340        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
341        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
342
343        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
344        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
345        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
346        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, "Aloittaa pelin uudelleen");
347        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
348
349        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
350        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
351        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
352
353        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
354    }
355
356    void Liikuta(PlatformCharacter hahmo, double nopeus)
357    {
358        if (maaliAlue != null)
359        {
360            if (hahmo.Position.X >= maaliAlue.Value.X)
361            {
362                SeuraavaKentta();
363            }
364        }
365        hahmo.Walk(nopeus);
366    }
367
368    void Hyppaa(PlatformCharacter hahmo, double nopeus)
369    {
370        hahmo.Jump(nopeus);
371    }
372
373    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
374    {
375        MessageDisplay.Add("Keräsit es energia juoman!");
376        esLaskuri.AddValue(1);
377        tahti.Destroy();
378    }
379
380
381}
382
383public class Vihu : PlatformCharacter
384{
385    DoubleMeter elamat;
386    public DoubleMeter Elamat { get { return elamat; } }
387    public Vihu(double leveys, double korkeus, int elamia)
388        : base(leveys, korkeus)
389    {
390        elamat = new DoubleMeter(elamia, 0, elamia);
391        elamat.LowerLimit += delegate { this.Destroy(); };
392    }
393
394
395
396
397}
398
399public class DragonJonne : PhysicsObject
400{
401    DoubleMeter elamat;
402    public DoubleMeter Elamat { get { return elamat; } }
403    public DragonJonne(double leveys, double korkeus, int elamia)
404        : base(leveys, korkeus)
405    {
406        elamat = new DoubleMeter(elamia, 0, elamia);
407        elamat.LowerLimit += delegate { this.Destroy(); };
408    }
409
410
411
412
413}
Note: See TracBrowser for help on using the repository browser.