source: 2014/27/JuhanaK/Avaruuspeli/Avaruuspeli/Avaruuspeli/Avaruuspeli.cs @ 5327

Revision 5327, 10.7 KB checked in by jumaalku, 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
9
10
11class Vihu : PlatformCharacter
12{
13    private IntMeter elamaLaskuri;
14    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
15
16    public Vihu(int elama, double leveys, double korkeus)
17        : base(leveys, korkeus)
18    {
19        elamaLaskuri = new IntMeter(elama, 0, elama);
20        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
21    }
22}
23
24public class Avaruuspeli : PhysicsGame
25{
26    private Animation OrkinKavely;
27    private Animation MonsteriKavely;
28    private Animation AlienKavely;
29
30    const double nopeus = 200;
31    const double hyppyNopeus = 750;
32    const int RUUDUN_KOKO = 40;
33
34    private Image[] Avaruuskävely = LoadImages("Avaruus saankari", "Avaruus saankari2");
35    private Image[] Monsterinkavelykuvat = LoadImages("Monsteri", "Monsteri2");
36    private Image[] Alienkavelykuvat = LoadImages("Alien", "Alien2");
37
38    PlatformCharacter pelaaja2;
39    PlatformCharacter pelaaja1;
40    Image AlienKuva = LoadImage("Alien");
41    Image Orkkikuva = LoadImage("Orkki");
42    Image monsteri = LoadImage("Monsteri");
43    Image Robo = LoadImage("Robot");
44    Image pelaajanKuva = LoadImage("Avaruus saankari");
45    Image taustakuva = LoadImage("scifi hallway space ship model interior");
46    SoundEffect maaliAani = LoadSoundEffect("maali");
47    DoubleMeter elamaLaskuri;
48    DoubleMeter elamaLaskuri2;
49    SoundEffect osumisaani = LoadSoundEffect("Hit_Hurt2");
50
51    public override void Begin()
52    {
53        MediaPlayer.Play("musiikki");
54        MediaPlayer.IsRepeating = true;
55        OrkinKavely = LoadAnimation("Orkki liikkuu");
56        MonsteriKavely = new Animation(Monsterinkavelykuvat);
57        AlienKavely = new Animation(Alienkavelykuvat);
58
59        MultiSelectWindow alkuValikko = new MultiSelectWindow("Spaceship madness", "Aloita peli", "Parhaat pisteet", "Lopeta");
60        Add(alkuValikko);
61        alkuValikko.AddItemHandler(0, pelaajienvalinta);
62        //alkuValikko.AddItemHandler(1, ParhaatPisteet);
63        alkuValikko.AddItemHandler(2, Exit);
64    }
65    void pelaajienvalinta()
66    {
67        MultiSelectWindow alkuValikko = new MultiSelectWindow("Spaceship madness", "yksi pelaaja", "kaksi pelaajaa");
68        Add(alkuValikko);
69        alkuValikko.AddItemHandler(0, Aloitapeli, 1);
70        alkuValikko.AddItemHandler(1, Aloitapeli, 2);
71    }
72
73    void Aloitapeli(int pelaajienLkm)
74    {
75        Gravity = new Vector(0, -1000);
76        SmoothTextures = false;
77
78        if (pelaajienLkm == 1)
79        {
80            LuoKentta();
81        }
82        else
83        {
84            LuoKentta2();
85            LuoElamaLaskuri2();
86        }
87        LisaaNappaimet();
88        LuoElamaLaskuri();
89
90        Timer ajastin = new Timer();
91        ajastin.Interval = 4;
92        ajastin.Timeout += Luovihollinen;
93        ajastin.Start();
94
95        Timer ajastin2 = new Timer();
96        ajastin2.Interval = 6;
97        ajastin2.Timeout += LuoOrkki;
98        ajastin2.Start();
99
100        Timer ajastin3 = new Timer();
101        ajastin3.Interval = 10;
102        ajastin3.Timeout += LuoAlien;
103        ajastin3.Start();
104
105
106
107        Camera.Follow(pelaaja1);
108        Camera.ZoomFactor = 1.2;
109        Camera.StayInLevel = true;
110    }
111
112    void LuoKentta()
113    {
114        TileMap kentta = TileMap.FromLevelAsset("kentta1");
115        kentta.SetTileMethod('#', LisaaTaso);
116
117
118        kentta.SetTileMethod('N', LisaaPelaaja);
119        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
120        Level.CreateBorders();
121        Level.Background.Image = taustakuva;
122        Level.Background.ScaleToLevelByHeight();
123    }
124    void LuoKentta2()
125    {
126        TileMap kentta = TileMap.FromLevelAsset("kentta1");
127        kentta.SetTileMethod('#', LisaaTaso);
128
129        kentta.SetTileMethod('M', LisaaPelaaja2);
130        kentta.SetTileMethod('N', LisaaPelaaja);
131        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
132        Level.CreateBorders();
133        Level.Background.Image = taustakuva;
134        Level.Background.ScaleToLevelByHeight();
135    }
136    void LisaaTaso(Vector paikka, double leveys, double korkeus)
137    {
138        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
139        taso.Position = paikka;
140        taso.Color = Color.Transparent;
141        Add(taso);
142    }
143
144
145
146    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
147    {
148        pelaaja1 = new PlatformCharacter(leveys * 3, korkeus * 3);
149        pelaaja1.Position = paikka;
150        pelaaja1.Mass = 4.0;
151        pelaaja1.Image = pelaajanKuva;
152        Add(pelaaja1);
153        AddCollisionHandler(pelaaja1, "vihollinen", Tormaaviholliseen);
154
155        pelaaja1.AnimWalk = new Animation(Avaruuskävely);
156        pelaaja1.AnimIdle = new Animation(pelaajanKuva);
157        pelaaja1.AnimWalk.FPS = 5;
158
159        pelaaja1.Weapon = new AssaultRifle(30, 10);
160        pelaaja1.Weapon.Ammo.Value = 1000;
161        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
162    }
163    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
164    {
165        pelaaja2 = new PlatformCharacter(leveys * 3, korkeus * 3);
166        pelaaja2.Position = paikka;
167        pelaaja2.Mass = 4.0;
168        pelaaja2.Image = pelaajanKuva;
169        Add(pelaaja2);
170        AddCollisionHandler(pelaaja2, "vihollinen", Tormaaviholliseen);
171
172        pelaaja2.AnimWalk = new Animation(Avaruuskävely);
173        pelaaja2.AnimIdle = new Animation(pelaajanKuva);
174        pelaaja2.AnimWalk.FPS = 5;
175
176        pelaaja2.Weapon = new AssaultRifle(30, 10);
177        pelaaja2.Weapon.Ammo.Value = 1000;
178        pelaaja2.Weapon.ProjectileCollision = AmmusOsui;
179    }
180
181    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
182    {
183        ammus.Destroy();
184        if (kohde.Tag.Equals("vihollinen"))
185        {
186            (kohde as Vihu).ElamaLaskuri.Value--;
187            osumisaani.Play();
188        }
189    }
190
191    void AmmuAseella(PlatformCharacter pelaaja)
192    {
193        if (!pelaaja.IsDestroyed)
194        {
195            PhysicsObject ammus = pelaaja.Weapon.Shoot();
196
197            if (ammus != null)
198            {
199                //ammus.Size *= 3;
200                //ammus.Image = ...
201                ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
202            }
203        }
204    }
205
206
207    void LisaaNappaimet()
208    {
209        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
210        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
211
212        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
213        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
214        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
215        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
216
217        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
218
219        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
220        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
221        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
222
223        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
224    }
225
226    void Liikuta(PlatformCharacter hahmo, double nopeus)
227    {
228        hahmo.Walk(nopeus);
229    }
230
231    void Hyppaa(PlatformCharacter hahmo, double nopeus)
232    {
233        hahmo.Jump(nopeus);
234    }
235    void Tormaaviholliseen(PhysicsObject hahmo, PhysicsObject vihollinen)
236    {
237        elamaLaskuri.Value--;
238        osumisaani.Play();
239    }
240    void LuoAlien()
241    {
242        Vihu vihollinen = new Vihu(20, 100, 100);
243        vihollinen.Image = AlienKuva;
244        vihollinen.CollisionIgnoreGroup = 1;
245        vihollinen.X = Level.Right - 100;
246        vihollinen.Tag = "vihollinen";
247        Add(vihollinen);
248
249        vihollinen.Animation = AlienKavely;
250        vihollinen.Animation.FPS = 5;
251        vihollinen.Animation.Start();
252        //vihollinen.AnimWalk = OrkinKavely;
253        //vihollinen.PlayAnimation(OrkinKavely);
254
255        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
256        tasoAivot.Speed = 100;
257        tasoAivot.FallsOffPlatforms = true;
258        tasoAivot.TriesToJump = true;
259
260        vihollinen.Brain = tasoAivot;
261    }
262    void LuoOrkki()
263    {
264        Vihu vihollinen = new Vihu(10, 200, 200);
265        vihollinen.Image = Orkkikuva;
266        vihollinen.CollisionIgnoreGroup = 1;
267        vihollinen.X = Level.Right - 100;
268        vihollinen.Tag = "vihollinen";
269        Add(vihollinen);
270        vihollinen.Animation = OrkinKavely;
271        vihollinen.Animation.FPS = 5;
272        vihollinen.Animation.Start();
273        //vihollinen.AnimWalk = OrkinKavely;
274        //vihollinen.PlayAnimation(OrkinKavely);
275
276        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
277        tasoAivot.Speed = 100;
278        tasoAivot.FallsOffPlatforms = true;
279        tasoAivot.TriesToJump = true;
280
281        vihollinen.Brain = tasoAivot;
282    }
283    void Luovihollinen()
284    {
285        Vihu vihollinen = new Vihu(3, 100, 100);
286        vihollinen.Image = monsteri;
287        vihollinen.CollisionIgnoreGroup = 1;
288        vihollinen.X = Level.Right - 40;
289        vihollinen.Tag = "vihollinen";
290        Add(vihollinen);
291        vihollinen.Animation = MonsteriKavely;
292        vihollinen.Animation.FPS = 5;
293        vihollinen.Animation.Start();
294
295        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
296        tasoAivot.Speed = 100;
297        tasoAivot.FallsOffPlatforms = true;
298        tasoAivot.TriesToJump = true;
299
300        vihollinen.Brain = tasoAivot;
301    }
302    void LuoElamaLaskuri()
303    {
304        elamaLaskuri = new DoubleMeter(20);
305        elamaLaskuri.MaxValue = 20;
306        elamaLaskuri.LowerLimit += ElamaLoppui;
307
308        ProgressBar elamaPalkki = new ProgressBar(150, 20);
309        elamaPalkki.X = Screen.Left + 150;
310        elamaPalkki.Y = Screen.Top - 20;
311        elamaPalkki.BindTo(elamaLaskuri);
312        Add(elamaPalkki);
313    }
314    void LuoElamaLaskuri2()
315    {
316        elamaLaskuri2 = new DoubleMeter(20);
317        elamaLaskuri2.MaxValue = 20;
318        elamaLaskuri2.LowerLimit += ElamaLoppui;
319
320        ProgressBar elamaPalkki = new ProgressBar(150, 20);
321        elamaPalkki.X = Screen.Right - 150;
322        elamaPalkki.Y = Screen.Top - 20;
323        elamaPalkki.BindTo(elamaLaskuri2);
324        Add(elamaPalkki);
325    }
326    void ElamaLoppui()
327    {
328        MessageDisplay.Add("Elämät loppuivat.");
329        pelaaja1.Destroy();
330    }
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356}
Note: See TracBrowser for help on using the repository browser.