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

Revision 5521, 12.1 KB checked in by koannak, 5 years ago (diff)

kk

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
124        kentta.SetTileMethod('M', LisaaMaali);
125        kentta.SetTileMethod('O', LisaaDragonJonne);
126        kentta.SetTileMethod('*', LisaaTahti);
127        kentta.SetTileMethod('N', LisaaPelaaja);
128        kentta.SetTileMethod('V', LisaaVihu);
129
130        maaliAlue = null;
131
132        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
133        Level.CreateBorders();
134        Level.Background.Image = LoadImage("Tausta");
135        Level.Background.FitToLevel();
136    }
137
138
139    void LisaaMaali(Vector paikka, double leveys, double korkeys)
140    {
141        maaliAlue = paikka;
142
143    }
144
145
146    void LisaaDragonJonne(Vector paikka, double leveys, double korkeys)
147    {
148
149        DragonJonne DragonJonne = new DragonJonne(leveys * 6.9, korkeys * 6.5, 80);
150        //DragonJonne.IgnoresCollisionResponse = true;
151        DragonJonne.Restitution = 10.0;
152        DragonJonne.IgnoresGravity = true;
153        DragonJonne.Position = paikka;
154        DragonJonne.Mass = 50.0;
155        //vihu.Color = Color.Red;
156        DragonJonne.Image = DragonJonnenKuva;
157        DragonJonne.Tag = "DragonJonne";
158        DragonJonne.Shape = Shape.Circle;
159        Add(DragonJonne);
160
161
162        if (maaliAlue != null)
163        {
164            DragonJonne.MoveTo((Vector)maaliAlue, nopeus - 50, JonneVoittaa);
165        }
166        else
167        {
168            Timer ajastin = new Timer();
169            ajastin.Interval = 2.0;
170            ajastin.Timeout += delegate
171            {
172                DragonJonne.Hit(RandomGen.NextVector(20000.0, 30000.0));
173
174            };
175            ajastin.Start();
176
177            DragonJonne.Elamat.LowerLimit += VoititPelin;
178        }
179
180        GameObject palkinPaikka = new GameObject(50, 50);
181        palkinPaikka.Position = new Vector(0, 150);
182        palkinPaikka.IsVisible = false;
183        //Add(palkinPaikka);
184        DragonJonne.Add(palkinPaikka);
185
186        ProgressBar DragonJonnenElamat = new ProgressBar(70, 30);
187        DragonJonnenElamat.IsVisible = true;
188        DragonJonnenElamat.BindTo(DragonJonne.Elamat);
189        palkinPaikka.Add(DragonJonnenElamat);
190
191
192
193    }
194
195
196    void JonneVoittaa()
197    {
198
199        MessageDisplay.Add("JONNE WON!"); pelaaja1.Destroy();
200    }
201
202
203
204
205    void LisaaVihu(Vector paikka, double leveys, double korkeus)
206    {
207
208        Vihu vihu = new Vihu(leveys * 1.5, korkeus * 1.5, 5);
209        vihu.Position = paikka;
210        //vihu.Color = Color.Red;
211        vihu.Image = VihunKuva;
212        vihu.MirrorImage();
213        vihu.Tag = "Vihu";
214        Add(vihu);
215
216        PlatformWandererBrain Aivot = new PlatformWandererBrain();
217        Aivot.Speed = nopeus - 50;
218        vihu.Brain = Aivot;
219
220        GameObject palkinPaikka = new GameObject(50, 50);
221        palkinPaikka.Position = new Vector(0, 50);
222        palkinPaikka.IsVisible = false;
223        //Add(palkinPaikka);
224        vihu.Add(palkinPaikka);
225
226        ProgressBar vihunElamat = new ProgressBar(70, 30);
227        vihunElamat.IsVisible = true;
228        vihunElamat.BindTo(vihu.Elamat);
229        palkinPaikka.Add(vihunElamat);
230
231
232    }
233    void LisaaLaskuri()
234    {
235        esLaskuri = new IntMeter(0, 0, 6);
236        esLaskuri.UpperLimit += SeuraavaKentta;
237
238        Label pisteNaytto = new Label();
239        pisteNaytto.Left = Screen.Left + 50;
240        pisteNaytto.Top = Screen.Top - 50;
241        pisteNaytto.TextColor = Color.White;
242        pisteNaytto.Color = Color.Black;
243
244        pisteNaytto.BindTo(esLaskuri);
245        Add(pisteNaytto);
246    }
247
248    void LisaaTaso(Vector paikka, double leveys, double korkeus)
249    {
250        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
251        taso.Position = paikka;
252        taso.Color = Color.Green;
253        Add(taso);
254    }
255
256    void LisaaTahti(Vector paikka, double leveys, double korkeus)
257    {
258        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
259        tahti.IgnoresCollisionResponse = true;
260        tahti.Position = paikka;
261        tahti.Image = esKuva;
262        tahti.Tag = "es";
263        Add(tahti);
264    }
265
266    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
267    {
268        pelaaja1 = new PlatformCharacter(leveys, korkeus);
269        pelaaja1.Position = paikka;
270        pelaaja1.Mass = 4.0;
271        pelaaja1.AnimWalk = new Animation(kävelykuvat);
272        pelaaja1.AnimIdle = new Animation(seisomisanimaatio);
273        AddCollisionHandler(pelaaja1, "es", TormaaTahteen);
274        AddCollisionHandler(pelaaja1, "Vihu", TormaaVihuun);
275        AddCollisionHandler(pelaaja1, "DragonJonne", TormaaVihuun);
276
277        //pelaaja1 on PlatformCharacter-tyyppinen
278        pelaaja1.Weapon = new AssaultRifle(30, 10);
279        pelaaja1.Weapon.AttackSound = null;
280
281        //Ammusten määrä aluksi:
282        pelaaja1.Weapon.Ammo.Value = 5000;
283        pelaaja1.Weapon.FireRate = 5000;
284        pelaaja1.Weapon.IsVisible = false;
285        //Mitä tapahtuu kun ammus osuu johonkin?
286        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
287
288        Add(pelaaja1);
289    }
290
291    void TormaaVihuun(PhysicsObject pelaaja, PhysicsObject vihu)
292    {
293        elamat.Value -= 3;
294    }
295
296
297    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
298    {
299        ammus.Destroy();
300
301        if (kohde is Vihu)
302        {
303            ((Vihu)kohde).Elamat.Value -= 0.2;
304        }
305
306        if (kohde is DragonJonne)
307        {
308            ((DragonJonne)kohde).Elamat.Value -= 0.2;
309        }
310    }
311
312
313    void AmmuAseella(PlatformCharacter pelaaja)
314    {
315        if (!voikoPelaajaAmpua) return;
316        PhysicsObject ammus = pelaaja.Weapon.Shoot();
317        pelaaja1.PlayAnimation(new Animation(hyokkausanimaatio));
318        energia.Value--;
319
320        if (ammus != null)
321        {
322            ammus.Width *= 2;
323            ammus.Image = ammusKuva;
324            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.0);
325        }
326    }
327
328    void AloitaPeli()
329    {
330        nykyinenKentta--;
331        SeuraavaKentta();
332    }
333
334
335
336    void LisaaNappaimet()
337    {
338        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
339        Keyboard.Listen(Key.Space, ButtonState.Pressed, delegate { if(voikoPelaajaAmpua) aseAani.Play(0.3, 0.0, 0.0); }, null);
340        Keyboard.Listen(Key.Space, ButtonState.Released, delegate { aseAani.Stop(); }, null);
341        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
342        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
343
344        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
345        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
346        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
347        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, "Aloittaa pelin uudelleen");
348        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
349
350        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
351        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
352        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
353
354        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
355    }
356
357    void Liikuta(PlatformCharacter hahmo, double nopeus)
358    {
359        if (maaliAlue != null)
360        {
361            if (hahmo.Position.X >= maaliAlue.Value.X)
362            {
363                SeuraavaKentta();
364            }
365        }
366        hahmo.Walk(nopeus);
367    }
368
369    void Hyppaa(PlatformCharacter hahmo, double nopeus)
370    {
371        hahmo.Jump(nopeus);
372    }
373
374    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
375    {
376        MessageDisplay.Add("Keräsit es energia juoman!");
377        esLaskuri.AddValue(1);
378        tahti.Destroy();
379    }
380
381
382}
383
384public class Vihu : PlatformCharacter
385{
386    DoubleMeter elamat;
387    public DoubleMeter Elamat { get { return elamat; } }
388    public Vihu(double leveys, double korkeus, int elamia)
389        : base(leveys, korkeus)
390    {
391        elamat = new DoubleMeter(elamia, 0, elamia);
392        elamat.LowerLimit += delegate { this.Destroy(); };
393    }
394
395
396
397
398}
399
400public class DragonJonne : PhysicsObject
401{
402    DoubleMeter elamat;
403    public DoubleMeter Elamat { get { return elamat; } }
404    public DragonJonne(double leveys, double korkeus, int elamia)
405        : base(leveys, korkeus)
406    {
407        elamat = new DoubleMeter(elamia, 0, elamia);
408        elamat.LowerLimit += delegate { this.Destroy(); };
409    }
410
411
412
413
414}
Note: See TracBrowser for help on using the repository browser.