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

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