source: 2015/24/EemeliN/Space-adventure/Space-adventure/Space-adventure/Space_adventure.cs @ 6074

Revision 6074, 11.6 KB checked in by eeonilni, 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
9public class Space_adventure : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 800;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    PlatformCharacter pelaaja2;
17    Image pelaajanKuva = LoadImage("oikean kokoinen pelaajan kuva");
18    Image tahtiKuva = LoadImage("koliket");
19    Image welhopahis = LoadImage("welho pahis");
20    Image maalikuva = LoadImage("maali kilppari");
21    Image PahisKuva = LoadImage("pelin pahis");
22    SoundEffect maaliAani = LoadSoundEffect("maali");
23    Image kentan2Tausta = LoadImage("asteroidi kenttä");
24    Image kentan3Tausta = LoadImage("tehtaan tausta");
25    Image aseKuva = LoadImage("punainen ase");
26    int kenttaNro = 2;
27
28
29    List<Vector> spawnit = new List<Vector>();
30
31    IntMeter pisteLaskuri;
32    IntMeter pisteLaskuri2;
33
34    public override void Begin()
35    {
36
37        LataaKentta();
38        luoAse(pelaaja1);
39        luoAse(pelaaja2);
40
41        //LisaaNappaimet();
42
43        Camera.Follow(pelaaja1, pelaaja2);
44        Camera.ZoomFactor = 1.0;
45        Camera.StayInLevel = false;
46    }
47
48
49
50    IntMeter LuoPistelaskurit(PlatformCharacter hahmo, double x)
51    {
52        IntMeter pisteLaskuri = new IntMeter(0);
53
54        Label pisteNaytto = new Label();
55        pisteNaytto.X = x;
56        pisteNaytto.Y = Screen.Top - 100;
57        pisteNaytto.TextColor = Color.Black;
58        pisteNaytto.Color = Color.White;
59        pisteNaytto.BindTo(pisteLaskuri);
60        Add(pisteNaytto);
61
62        Label ammusNaytto = new Label();
63        ammusNaytto.X = x;
64        ammusNaytto.Y = Screen.Top - 200;
65        ammusNaytto.TextColor = Color.Black;
66        ammusNaytto.Color = Color.White;
67        ammusNaytto.BindTo(hahmo.Weapon.Ammo);
68        Add(ammusNaytto);
69
70
71        return pisteLaskuri;
72    }
73
74    void LuoKentta(string kentanNimi)
75    {
76        ColorTileMap kentta = ColorTileMap.FromLevelAsset(kentanNimi);
77        kentta.SetTileMethod(Color.Gray, LisaaTaso);
78        kentta.SetTileMethod(Color.Gold, LisaaTahti);
79        kentta.SetTileMethod(Color.Black, LisaaPelaaja);
80        kentta.SetTileMethod(Color.Rose, LisaaMaali);
81        kentta.SetTileMethod(Color.BloodRed, LisaaSpawn);
82       
83
84        kentta.SetTileMethod(Color.White, LisaaVihollinen);
85        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
86        Keyboard.Listen(Key.E, ButtonState.Down, KaannaAsetta, "käännäAsetta", pelaaja2, 1);
87        Keyboard.Listen(Key.F, ButtonState.Down, KaannaAsetta, "käännäAsetta", pelaaja2, -1);
88        Level.Size = new Vector(3250, 5000);
89        Level.Background.FitToLevel();
90
91        Gravity = new Vector(0, -1000.81);
92        //Level.Width = Screen.Width;
93
94    }
95
96
97
98    void LisaaTaso(Vector paikka, double leveys, double korkeus)
99    {
100        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
101        taso.Position = paikka;
102        taso.Color = Color.Black;
103        Add(taso);
104
105    }
106
107    void LisaaMaali(Vector paikka, double leveys, double korkeus)
108    {
109        PhysicsObject taso = PhysicsObject.CreateStaticObject(3 * leveys, 3 * korkeus);
110        taso.Position = paikka;
111        taso.Image = maalikuva;
112        taso.Tag = "maali";
113        Add(taso);
114
115    }
116
117
118    void LisaaTahti(Vector paikka, double leveys, double korkeus)
119    {
120        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
121        tahti.IgnoresCollisionResponse = true;
122        tahti.Position = paikka;
123        tahti.Image = tahtiKuva;
124        tahti.Tag = "tahti";
125        Add(tahti);
126    }
127
128    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
129    {
130        PlatformCharacter pahis = new PlatformCharacter(3 * leveys, 3 * korkeus);
131        pahis.Position = paikka;
132        pahis.Mass = 50.0;
133        pahis.Color = Color.White;
134        pahis.Image = PahisKuva;
135        pahis.Tag = "pahis";
136        Add(pahis);
137
138    }
139
140    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
141    {
142        pelaaja1 = new PlatformCharacter(2 * leveys, 2 * korkeus);
143        pelaaja1.Position = paikka;
144        pelaaja1.Mass = 40.0;
145        pelaaja1.Color = Color.Black;
146        pelaaja1.Image = pelaajanKuva;
147        //pelaaja1.Shape = Shape.FromImage(pelaajanKuva);
148        pelaaja1.CollisionIgnoreGroup = 1;
149
150        AddCollisionHandler(pelaaja1, "maali", TormaaMaaliin);
151        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
152        Add(pelaaja1);
153
154        pelaaja2 = new PlatformCharacter(2 * leveys, 2 * korkeus);
155        pelaaja2.Position = paikka;
156        pelaaja2.Mass = 40.0;
157        pelaaja2.Color = Color.Black;
158        pelaaja2.Image = welhopahis;
159        //pelaaja2.Shape = Shape.FromImage(welhopahis);
160        pelaaja2.CollisionIgnoreGroup = 1;
161
162        AddCollisionHandler(pelaaja2, "maali", TormaaMaaliin);
163        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
164        Add(pelaaja2);
165
166
167
168    }
169
170    void LisaaNappaimet()
171    {
172        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
173        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
174
175        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
176        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
177        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
178
179        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
180
181        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
182        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
183        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
184
185        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
186
187        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
188        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
189        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
190
191
192        Keyboard.Listen(Key.Enter, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
193        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2);
194
195        Keyboard.Listen(Key.E, ButtonState.Down, KaannaAsetta, "käännäAsetta", pelaaja2, 1);
196        Keyboard.Listen(Key.F, ButtonState.Down, KaannaAsetta, "käännäAsetta", pelaaja2, -1);
197        Keyboard.Listen(Key.NumPad1, ButtonState.Down, KaannaAsetta, "käännäAsetta", pelaaja1, 1);
198        Keyboard.Listen(Key.NumPad3, ButtonState.Down, KaannaAsetta, "käännäAsetta", pelaaja1, -1);
199    }
200
201    void Liikuta(PlatformCharacter hahmo, double nopeus)
202    {
203        hahmo.Walk(nopeus);
204    }
205
206    void Hyppaa(PlatformCharacter hahmo, double nopeus)
207    {
208        hahmo.Jump(nopeus);
209
210    }
211
212
213    void TormaaMaaliin(PhysicsObject hahmo, PhysicsObject maali)
214    {
215        maali.Destroy();
216
217        if (hahmo == pelaaja1)
218        {
219            MessageDisplay.Add("pelaaja1 voitti!");
220        }
221           
222        else
223        {
224            MessageDisplay.Add("pelaaja2 voitti!");
225        }
226        kenttaNro++;
227        ClearAll();
228        LataaKentta();
229    }
230
231    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
232    {
233        maaliAani.Play();
234        MessageDisplay.Add("Oletko aivan varma että haluat poimia tämän???!");
235        tahti.Destroy();
236    }
237
238    void luoAse(PlatformCharacter hahmo)
239    {
240        //pelaaja1 on PlatformCharacter-tyyppinen
241        hahmo.Weapon = new AssaultRifle(60, 20);
242        if (kenttaNro == 3)
243        {
244            hahmo.Weapon.Ammo.MaxValue = 1;
245        }
246        else
247        {
248            hahmo.Weapon.InfiniteAmmo = true;
249        }
250        hahmo.Weapon.CanHitOwner = false;
251        //hahmo.Weapon.Image = null;
252        hahmo.Weapon.Color = Color.Transparent;
253
254        hahmo.Weapon.Power.MaxValue = 2000000;
255        hahmo.Weapon.AmmoIgnoresGravity = false;
256        hahmo.Weapon.AmmoIgnoresExplosions = false;
257        hahmo.Weapon.CanHitOwner = true;
258        hahmo.Weapon.ProjectileCollision = AmmusOsui;
259        hahmo.Weapon.Image = aseKuva;
260
261
262    }
263
264    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
265    {
266        ammus.Destroy();
267
268        if (kohde.Tag.Equals("pahis"))
269        {
270            kohde.Destroy();
271        }
272
273        if (kenttaNro == 3)
274        {
275            if (pelaaja1.Weapon.Ammo.Value == 0 && pelaaja2.Weapon.Ammo.Value == 0)
276            {
277                pelaaja1.Weapon.Ammo.Value = 1;
278                pelaaja2.Weapon.Ammo.Value = 1;
279            }
280            if (kohde == pelaaja1)
281            {
282                pelaaja1.Position = RandomGen.SelectOne<Vector>(spawnit);
283                pisteLaskuri2.Value++;
284                pelaaja1.Weapon.Ammo.Value = 1;
285            }
286            if (kohde == pelaaja2)
287            {
288                pelaaja2.Position = RandomGen.SelectOne<Vector>(spawnit);
289                pisteLaskuri.Value++;
290                pelaaja2.Weapon.Ammo.Value = 1;
291            }
292        }
293    }
294
295    void AmmuAseella(PlatformCharacter pelaaja)
296    {
297        PhysicsObject ammus = pelaaja.Weapon.Shoot();
298
299        if (ammus != null)
300        {
301           
302            ammus.Velocity *= 3;
303            ammus.Position += pelaaja.Weapon.Angle.GetVector() * 50; // ammus.Velocity.Normalize() * 20;
304            //ammus.Size *= 3;
305            //ammus.Image = ...
306            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
307        }
308    }
309
310    void LataaKentta()
311    {
312        spawnit.Clear();
313       
314
315        if (kenttaNro == 2)
316        {
317            LuoKentta("kenttä 2");
318            luoAse(pelaaja1);
319        luoAse(pelaaja2);
320            Level.Background.Image = kentan2Tausta;
321        }
322        else if (kenttaNro == 3)
323        {
324            LuoKentta("kenttä.3");
325            LisaaPelaaja(Vector.Zero, RUUDUN_KOKO, RUUDUN_KOKO);
326            pelaaja1.Position = RandomGen.SelectOne<Vector>(spawnit);
327            pelaaja2.Position = RandomGen.SelectOne<Vector>(spawnit);
328            luoAse(pelaaja1);
329            luoAse(pelaaja2);
330            Level.Background.Image = kentan3Tausta;
331            pisteLaskuri = LuoPistelaskurit(pelaaja1, Screen.Right - 100);
332            pisteLaskuri2 = LuoPistelaskurit(pelaaja2, Screen.Left + 100);
333        }
334        else if (kenttaNro > 3) Exit();
335
336        Level.Background.FitToLevel();
337
338        LisaaNappaimet();
339
340        Camera.Follow(pelaaja1, pelaaja2);
341        Camera.ZoomFactor = 1.0;
342        Camera.StayInLevel = false;
343    }
344
345    void LisaaSpawn(Vector paikka, double leveys, double korkeus)
346    {
347        spawnit.Add(paikka);
348    }
349
350    void KaannaAsetta(PlatformCharacter pelaaja, int kulma)
351    {
352        pelaaja.Weapon.Angle += Angle.FromDegrees(kulma);
353
354        if (pelaaja.FacingDirection.GetVector().X > 0.0)
355        {
356            if (pelaaja.Weapon.Angle.Degrees > 90)
357                pelaaja.Weapon.Angle = Angle.FromDegrees(90);
358            if (pelaaja.Weapon.Angle.Degrees < -90)
359                pelaaja.Weapon.Angle = Angle.FromDegrees(-90);
360        }
361        else
362        {
363            if (Math.Abs(pelaaja.Weapon.Angle.Degrees) < 90)
364                pelaaja.Weapon.Angle = Angle.FromDegrees(-90);
365        }
366    }
367}
Note: See TracBrowser for help on using the repository browser.