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

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