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

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