source: 2016/27/JuusoM/Tasohyppelypeli2/Tasohyppelypeli2/Tasohyppelypeli2/Tasohyppelypeli2.cs @ 8022

Revision 8022, 12.1 KB checked in by empaheik, 3 years ago (diff)

valmis peli plus muuta tavaraa

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Tasohyppelypeli2 : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    Vihu pelaaja1;
16    private Image[] kavelykuvat = LoadImages("p1","p1kävely");
17    Image pelaajanKuva = LoadImage("p1");
18    Animation kavely;
19    Image lyontikuva = LoadImage("p1lyö");
20    Image tahtiKuva = LoadImage("tahti");
21    Image olionKuva = LoadImage("vihollinen");
22    Image olionKuva2 = LoadImage("vihollinen2");
23    Image olionKuva3 = LoadImage("vihollinen3");
24    Vihu pelaaja2;
25    private Image[] kavelykuvat2 = LoadImages("p2", "p2kävely");
26    Image pelaajanKuva2 = LoadImage("p2");
27    Animation kavely2;
28    Image nuoli = LoadImage("arrow");
29    Image ruohokuva = LoadImage("ruoho");
30    Image tiilikuva = LoadImage("tiili");
31    Image kultakuva = LoadImage("kulta");
32    Image seinakuva = LoadImage("takaseina");
33    Image arkkukuva = LoadImage("arkku");
34    Animation pelaaja1Idle;
35
36
37
38    //no bugs, only features
39    public override void Begin()
40    {
41        ClearAll();
42        Gravity = new Vector(0, -1000);
43        kavely = new Animation(kavelykuvat);
44        kavely.FPS = 6;
45        kavely2 = new Animation(kavelykuvat2);
46        kavely2.FPS = 6;
47        LuoKentta();
48        LisaaNappaimet();
49
50        Camera.Follow(pelaaja1);
51        Camera.ZoomFactor = 1.2;
52        Camera.StayInLevel = true;
53 
54    }
55
56    void LuoKentta()
57    {
58         pelaaja1Idle = new Animation(pelaajanKuva);
59
60        TileMap kentta = TileMap.FromLevelAsset("kentta1");
61        kentta.SetTileMethod('#', LisaaTaso);
62        kentta.SetTileMethod('t', LisaaTiili);
63        kentta.SetTileMethod('k', LisaaKulta);
64        kentta.SetTileMethod('s', LisaaTakaseina);
65        kentta.SetTileMethod('*', LisaaTahti);
66        kentta.SetTileMethod('A', LisaaArkku);
67        kentta.SetTileMethod('N', LisaaPelaaja);
68        kentta.SetTileMethod('M', LisaaPelaaja2);
69        kentta.SetTileMethod('1', LisaaVihollinen1);
70        kentta.SetTileMethod('2', LisaaVihollinen2);
71        kentta.SetTileMethod('3', LisaaVihollinen3);
72        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
73        Level.CreateBorders();
74        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
75    }
76
77    void LisaaTaso(Vector paikka, double leveys, double korkeus)
78    {
79        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
80        taso.Position = paikka;
81        taso.Image = ruohokuva;
82        taso.Tag = "seina";
83        Add(taso);
84    }
85
86    void LisaaTiili(Vector paikka, double leveys, double korkeus)
87    {
88        PhysicsObject tiili = PhysicsObject.CreateStaticObject(leveys, korkeus);
89        tiili.Position = paikka;
90        tiili.Image = tiilikuva;
91        tiili.Tag = "seina";
92        Add(tiili);
93    }
94
95    void LisaaTakaseina(Vector paikka, double leveys, double korkeus)
96    {
97        PhysicsObject takaseina = PhysicsObject.CreateStaticObject(leveys, korkeus);
98        takaseina.Position = paikka;
99        takaseina.Image = seinakuva;
100        takaseina.IgnoresCollisionResponse = true;
101        Add(takaseina, -3);
102    }
103
104    void LisaaKulta(Vector paikka, double leveys, double korkeus)
105    {
106        PhysicsObject kulta = PhysicsObject.CreateStaticObject(leveys, korkeus);
107        kulta.Position = paikka;
108        kulta.Image = kultakuva;
109        Add(kulta);
110    }
111
112    void LisaaArkku(Vector paikka, double leveys, double korkeus)
113    {
114        PhysicsObject Arkku = PhysicsObject.CreateStaticObject(leveys, korkeus);
115        Arkku.Position = paikka;
116        Arkku.Image = arkkukuva;
117        Arkku.Tag = "seina";
118        Arkku.Tag = "maali";
119        Add(Arkku);
120    }
121
122    void LisaaTahti(Vector paikka, double leveys, double korkeus)
123    {
124        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
125        tahti.IgnoresCollisionResponse = true;
126        tahti.Position = paikka;
127        tahti.Image = tahtiKuva;
128        tahti.Tag = "tahti";
129        Add(tahti);
130    }
131
132    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
133    {
134        pelaaja1 = new Vihu(leveys, korkeus);
135        pelaaja1.Position = paikka;
136        pelaaja1.Mass = 4.0;
137        pelaaja1.Image = pelaajanKuva;
138        pelaaja1.AnimWalk = kavely;
139        pelaaja1.AnimIdle = pelaaja1Idle;
140        pelaaja1.Tag = "pelaaja";
141        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
142        AddCollisionHandler(pelaaja1, "maali", TormaaArkkuun);
143        pelaaja1.CollisionIgnoreGroup = 3;
144        AddCollisionHandler(pelaaja1, "pahis", TormaaViholliseen);
145        Add(pelaaja1);
146    }
147
148    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
149    {
150        pelaaja2 = new Vihu(leveys, korkeus);
151        pelaaja2.Position = paikka;
152        pelaaja2.Mass = 4.0;
153        pelaaja2.Image = pelaajanKuva2;
154        pelaaja2.AnimWalk = kavely2;
155        pelaaja2.AnimIdle = new Animation(pelaajanKuva2);
156        pelaaja2.Tag = "pelaaja";
157        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
158        pelaaja2.CollisionIgnoreGroup = 3;
159        AddCollisionHandler(pelaaja2, "pahis", TormaaViholliseen);
160        AddCollisionHandler(pelaaja2, "maali", TormaaArkkuun);
161
162        pelaaja2.Weapon = new AssaultRifle(5, 5);
163        pelaaja2.Weapon.Image = null;
164        pelaaja2.Weapon.Color = Color.Transparent;
165        pelaaja2.Weapon.FireRate = 1;
166        pelaaja2.Weapon.Ammo.Value = 1000;
167        pelaaja2.Weapon.ProjectileCollision = AmmusOsui;
168        Add(pelaaja2, 1);
169    }
170
171    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
172    {
173        ammus.Tag = "ammus";
174        if (kohde.Tag.Equals("pahis"))
175        {
176            Vihu pahis = kohde as Vihu;
177            pahis.ElamaLaskuri.Value -= 1;
178        }
179        if (kohde.Tag.Equals("seina")||kohde.Tag.Equals("pahis"))
180        {
181            ammus.Destroy();
182        }
183       
184    }
185
186    void AmmuAseella(PlatformCharacter pelaaja)
187    {
188        PhysicsObject ammus = pelaaja.Weapon.Shoot();
189
190        if (ammus != null)
191        {
192            ammus.Size *= 3;
193            ammus.Image = nuoli;
194            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.5);
195        }
196    }
197
198    void AmmuAseella2(PlatformCharacter vihollinen2)
199    {
200        PhysicsObject ammus = vihollinen2.Weapon.Shoot();
201
202        if (ammus != null)
203        {
204            ammus.Size *= 3;
205            ammus.Image = nuoli;
206            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.5);
207        }
208    }
209
210    void LisaaVihollinen1(Vector paikka , double leveys, double korkeus)
211    {
212        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
213        tasoAivot.Speed = 100;
214        tasoAivot.JumpSpeed = 700;
215        tasoAivot.TriesToJump = false;
216        Vihu vihollinen1 = new Vihu(leveys, korkeus);
217        vihollinen1.Image = olionKuva;
218        vihollinen1.Brain = tasoAivot;
219        vihollinen1.Tag = "pahis";
220        vihollinen1.Position = paikka;
221        AddCollisionHandler(vihollinen1, "lyonti", CollisionHandler.DestroyObject);
222        Add(vihollinen1);
223    }
224
225    void LisaaVihollinen2(Vector paikka, double leveys, double korkeus)
226    {
227
228        Vihu vihollinen2 = new Vihu(leveys, korkeus);
229        vihollinen2.Image = olionKuva2;
230        vihollinen2.Tag = ("pahis");
231        vihollinen2.Position = paikka;
232        vihollinen2.Weapon = new AssaultRifle(5, 5);
233        vihollinen2.Weapon.Image = null;
234        vihollinen2.Weapon.Color = Color.Transparent;
235        vihollinen2.Weapon.FireRate = 1;
236        vihollinen2.Weapon.Ammo.Value = 1000;
237        vihollinen2.Weapon.ProjectileCollision = AmmusOsui2;
238        Timer ajastin = new Timer();
239        ajastin.Interval = 1;
240        ajastin.Timeout += delegate { vihollinen2.Weapon.Shoot(); };
241        ajastin.Start();
242        if (vihollinen2.IsDestroyed) ajastin.Stop();
243        Add(vihollinen2);
244    }
245
246    void AmmusOsui2(PhysicsObject ammus, PhysicsObject kohde)
247    {
248        ammus.Tag = "ammus";
249        if (kohde.Tag.Equals("pelaaja"))
250        {
251            ammus.Destroy();
252        }
253        if (kohde.Tag.Equals("seina"))
254        {
255            ammus.Destroy();
256        }
257        if (kohde.Tag.Equals("pahis"))
258        {
259            ammus.Destroy();
260        }
261
262    }
263
264    void LisaaVihollinen3(Vector paikka, double leveys, double korkeus)
265    {
266        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
267        tasoAivot.Speed = 100;
268        tasoAivot.JumpSpeed = 700;
269        tasoAivot.TriesToJump = false;
270        Vihu vihollinen3 = new Vihu(leveys, korkeus);
271        vihollinen3.Image = olionKuva3;
272        vihollinen3.Brain = tasoAivot;
273        vihollinen3.Tag = "pahis";
274        vihollinen3.Position = paikka;
275        AddCollisionHandler(vihollinen3, "lyonti", CollisionHandler.DestroyObject);
276        Add(vihollinen3);
277    }
278
279
280    void LisaaNappaimet()
281    {
282        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
283        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
284        Keyboard.Listen(Key.R, ButtonState.Pressed, Begin, "aloita peli alusta");
285
286        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
287        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
288        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
289        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, lyo, "pelaaja1 lyo", pelaaja1);
290
291        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
292        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
293        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
294        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2);
295
296
297    }
298
299    void lyo (PlatformCharacter pelaaja)
300    {
301        pelaaja.AnimIdle = null;
302        pelaaja.Image = lyontikuva;
303        PhysicsObject lyonti =  PhysicsObject.CreateStaticObject(RUUDUN_KOKO/2, RUUDUN_KOKO);
304        lyonti.IgnoresPhysicsLogics = true;
305        lyonti.CollisionIgnoreGroup = 3;
306        lyonti.Position = pelaaja.Position + pelaaja.FacingDirection.GetVector() * RUUDUN_KOKO/2;
307        lyonti.Color = Color.Transparent;
308        lyonti.Tag = "lyonti";
309        lyonti.LifetimeLeft = TimeSpan.FromSeconds(0.5);
310        Add(lyonti);
311
312        lyonti.Destroyed += delegate ()
313        {
314            pelaaja1.AnimIdle = pelaaja1Idle;
315
316        };
317
318    }
319
320    void Liikuta(PlatformCharacter hahmo, double nopeus)
321    {
322        hahmo.Walk(nopeus);
323    }
324
325    void Hyppaa(PlatformCharacter hahmo, double nopeus)
326    {
327        hahmo.Jump(nopeus);
328    }
329
330    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
331    {
332        MessageDisplay.Add("Keräsit tähden!");
333        tahti.Destroy();
334    }
335
336    void TormaaViholliseen(PhysicsObject hahmo, PhysicsObject Vihollinen)
337    {
338        Vihu pelaaja = hahmo as Vihu;
339
340        if (Camera.FollowedObject == hahmo && pelaaja.ElamaLaskuri.Value - 1 == 0)
341        {
342            Camera.Follow(pelaaja2);
343        }
344
345       
346        pelaaja.ElamaLaskuri.Value -= 1;
347
348
349
350    }
351
352    void TormaaArkkuun(PhysicsObject pelaaja1, PhysicsObject pelaaja2)
353    {
354        ClearAll();
355        Level.Background.Color = Color.Black;
356        Label Teksti = new Label("Sait Aarteen!");
357        Add(Teksti);
358        Teksti.TextColor = Color.White;
359        Teksti.TextScale = new Vector(5, 5);
360        Keyboard.Listen(Key.R, ButtonState.Pressed, Begin, "aloita alusta");
361
362    }
363}
364class Vihu : PlatformCharacter
365{
366    private IntMeter elamaLaskuri = new IntMeter(2, 0, 2);
367    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
368
369    public Vihu(double leveys, double korkeus)
370        : base(leveys, korkeus)
371    {
372        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
373    }
374}
Note: See TracBrowser for help on using the repository browser.