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

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