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

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