source: 2011/26/OssiV/sotapeli/sotapeli/sotapeli/tasohyppely.cs @ 2415

Revision 2415, 12.5 KB checked in by osmavanh, 9 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11    List<Label> valikonKohdat;
12    ScoreList topLista = new ScoreList(10, false, 0);
13
14
15    const double nopeus = 200;
16    const double hyppyNopeus = 1000;
17    const int RUUDUN_KOKO = 40;
18    IntMeter pisteLaskuri;
19
20    PlatformCharacter pelaaja1;
21    PlatformCharacter pelaaja2;
22    // pelaajien kuvat
23    Image pelaajanKuva = LoadImage("peliukko1");
24    Image pelaajan2Kuva = LoadImage("peliukko2parempi");
25    Image tahtiKuva = LoadImage("raha");
26    Image tahtiKuva2 = LoadImage("musta neliö");
27    Image pahiksenKuva = LoadImage("pahis");
28    Image pelaaja2kaannetty = LoadImage("peliukko2parempiKäännetty");
29    Image pelaaja1kaannettu = LoadImage("peliukko1Käännetty");
30    Image taustakuva = LoadImage("taustakuva");
31   
32
33
34    List<Pahis> pahikset;
35
36    SoundEffect maaliAani = LoadSoundEffect("maali");
37
38    public override void Begin()
39    {
40
41        // Gravity = new Vector(0, -1000);
42        Valikko();
43        if (DataStorage.Exists("pisteet.xml"))
44            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
45
46
47    }
48
49    void luoKentta()
50    {
51        TileMap kentta = TileMap.FromFile("kentta1.txt");
52        kentta['='] = lisaaHaivePalikka;
53        kentta['#'] = lisaaTaso;
54        kentta['*'] = lisaaTahti;
55        kentta['N'] = lisaaPelaaja;
56        kentta['M'] = lisaaPelaaja2;
57        kentta['V'] = lisaaPahis;
58        kentta['H'] = lisaaMaali;
59        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
60        Level.CreateBorders();
61        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
62    }
63
64    PhysicsObject lisaaTaso()
65    {
66        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
67        taso.Color = Color.Black;
68        return taso;
69    }
70
71    PhysicsObject lisaaTahti()
72    {
73        PhysicsObject tahti = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
74        tahti.Image = tahtiKuva;
75        tahti.Tag = "tahti";
76        return tahti;
77    }
78
79    PlatformCharacter lisaaPelaaja()
80    {
81        pelaaja1 = new PlatformCharacter(40, 40);
82        pelaaja1.Mass = 4.0;
83        pelaaja1.Tag = "pelaaja";
84        pelaaja1.Shape = Shape.Circle;
85        //pelaaja1.Image = pelaajanKuva;
86        pelaaja1.RightWalkingAnimation = new Animation(pelaajanKuva);
87        pelaaja1.LeftWalkingAnimation = new Animation(pelaaja1kaannettu);
88
89        AddCollisionHandler(pelaaja1, osuTahteen);
90        AddCollisionHandler(pelaaja1, osuHaivePalikkaan);
91        AddCollisionHandler(pelaaja1, osuPelaajaan);
92        pelaaja1.Weapon = new AssaultRifle(70, 20);
93        pelaaja1.Weapon.ProjectileCollision += AmmusOsui;
94        pelaaja1.Weapon.InfiniteAmmo = true;
95
96
97
98        return pelaaja1;
99    }
100
101    void lisaaNappaimet()
102    {
103        // Komennot
104        Keyboard.Listen(Key.R, ButtonState.Released, naytaPisteet, "aloita alusta");
105
106
107        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
108        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
109        // pelaaja1 ohjaimet
110        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
111        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
112        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
113        Keyboard.Listen(Key.NumPad0, ButtonState.Down, AmmuAseella1, "Ammu");
114        Keyboard.Listen(Key.NumPad1, ButtonState.Down, tähtää, "tähtää", pelaaja1, 3.0);
115        Keyboard.Listen(Key.NumPad2, ButtonState.Down, tähtää, "tähtää", pelaaja1, -3.0);
116
117        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
118
119        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
120        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
121        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
122        // Pelaaja2 ohjaimet
123        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
124        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
125        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Pelaaja2 hyppää", pelaaja2, hyppyNopeus);
126        Keyboard.Listen(Key.O, ButtonState.Down, painottomuus, null);
127        Keyboard.Listen(Key.O, ButtonState.Up, painottomuusLoppuu, null);
128        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella2, "Ammu");
129        Keyboard.Listen(Key.B, ButtonState.Down, tähtää, "tähtää", pelaaja2, 5.0);
130        Keyboard.Listen(Key.H, ButtonState.Down, tähtää, "tähtää", pelaaja2, -5.0);
131
132
133    }
134    void tähtää(PlatformCharacter hahmo, double muutos)
135    {
136        hahmo.Weapon.Angle += Angle.FromDegrees(muutos);
137    }
138
139
140    void painottomuus()
141    {
142        Gravity = new Vector(0.0, 150.0);
143
144
145    }
146    void liikuta(PlatformCharacter hahmo, double nopeus)
147    {
148        hahmo.Walk(nopeus);
149    }
150
151    void hyppaa(PlatformCharacter hahmo, double nopeus)
152    {
153        hahmo.Jump(nopeus);
154    }
155
156    void osuTahteen(PhysicsObject hahmo, PhysicsObject kohde)
157    {
158        if (kohde.Tag.ToString() == "tahti")
159        {
160            maaliAani.Play();
161            MessageDisplay.Add("Sait pisteen!");
162            kohde.Destroy();
163            pisteLaskuri.Value++;
164            //pisteLaskuri.Value += 1;
165            //pisteLaskuri.Value = pisteLaskuri.Value + 1;
166
167
168
169
170        }
171    }
172
173    PlatformCharacter lisaaPelaaja2()
174    {
175        pelaaja2 = new PlatformCharacter(40, 40);
176        pelaaja2.Shape = Shape.Circle;
177        pelaaja2.Mass = 4.0;
178        pelaaja2.Tag = "pelaaja";
179        pelaaja2.Image = pelaajan2Kuva;
180
181        // vaihda asetta kirjoittamaalla sen nimi
182
183        pelaaja2.Weapon = new AssaultRifle(60, 20);
184        pelaaja2.Weapon.ProjectileCollision += AmmusOsui;
185        AddCollisionHandler(pelaaja2, osuTahteen);
186        pelaaja2.Weapon.InfiniteAmmo = true;
187        AddCollisionHandler(pelaaja2, osuPelaajaan);
188        AddCollisionHandler(pelaaja2, osuHaivePalikkaan);
189        AddCollisionHandler(pelaaja2, osumaaliin);
190       
191        pelaaja2.RightWalkingAnimation = new Animation(pelaajan2Kuva);
192        pelaaja2.LeftWalkingAnimation = new Animation(pelaaja2kaannetty);
193
194
195
196        return pelaaja2;
197    }
198
199    void AloitaAlusta()
200    {
201        ClearAll();
202        pahikset = new List<Pahis>();
203        luoKentta();
204        lisaaNappaimet();
205        LuoLaskuri();
206        Camera.Follow(pelaaja1);
207        Camera.ZoomFactor = 1.2;
208        Camera.StayInLevel = true;
209    }
210
211    IntMeter LuoPisteLaskuri(double x, double y)
212    {
213        IntMeter laskuri = new IntMeter(0);
214        laskuri.MaxValue = 10;
215        Label naytto = new Label();
216        naytto.BindTo(laskuri);
217        naytto.X = x;
218        naytto.Y = y;
219        naytto.TextColor = Color.White;
220        naytto.BorderColor = Level.BackgroundColor;
221        naytto.Color = Level.BackgroundColor;
222        Add(naytto);
223        return laskuri;
224    }
225
226    PhysicsObject lisaaHaivePalikka()
227    {
228
229        PhysicsObject tahti = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
230        tahti.Image = tahtiKuva2;
231        tahti.Tag = "musta neliö";
232        return tahti;
233
234
235    }
236    void osuHaivePalikkaan(PhysicsObject hahmo, PhysicsObject haivePalikka)
237    {
238        if (haivePalikka.Tag.ToString() == "musta neliö")
239        {
240
241
242            haivePalikka.Destroy();
243
244
245        }
246    }
247    PhysicsObject lisaaPahis()
248    {
249        Pahis pahis = new Pahis(40, 40);
250        pahis.Mass = 10.0;
251        pahis.Shape = Shape.Circle;
252        pahis.Image = pahiksenKuva;
253        pahis.Tag = "vihu";
254        pahis.Elamat = 5;
255
256        pahikset.Add(pahis);
257
258
259
260        TagFollowerBrain pahiksenAivot = new TagFollowerBrain("pelaaja", 50);
261
262        pahiksenAivot.Active = true;
263        pahiksenAivot.TargetFollowDistance = 600;
264        pahiksenAivot.Speed = 4000;
265        //pahiksenAivot.TargetCloseDistance = 20;
266
267
268
269
270        //pahiksenAivot.StopWhenTargetClose = true;
271        pahis.Brain = pahiksenAivot;
272
273
274        Add(pahis);
275        return (pahis);
276
277
278
279    }
280    void osuPelaajaan(PhysicsObject hahmo, PhysicsObject pahis)
281    {
282        if (pahis.Tag.ToString() == "vihu")
283        {
284            if (hahmo == pelaaja1)
285            {
286                Camera.Follow(pelaaja2);
287            }
288            hahmo.Destroy();
289
290        }
291    }
292    void painottomuusLoppuu()
293    {
294        Gravity = new Vector(0, -1000);
295
296    }
297    void AmmuAseella2()
298    {
299        PhysicsObject ammus = pelaaja2.Weapon.Shoot();
300
301        if (ammus != null)
302        {
303            ammus.Size *= 1;
304
305        }
306    }
307    void AmmuAseella1()
308    {
309        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
310
311        if (ammus != null)
312        {
313            ammus.Size *= 1;
314        }
315    }
316    void AmmusOsui(PhysicsObject ammus, PhysicsObject pahis)
317    {
318
319        ammus.Destroy();
320
321        foreach (Pahis p in pahikset)
322        {
323            if (p == pahis)
324            {
325                p.Elamat--;
326                if (p.Elamat <= 0)
327                    p.Destroy();
328            }
329        }
330
331
332
333    }
334
335    void LuoLaskuri()
336    {
337        pisteLaskuri = new IntMeter(0);
338
339        Label pisteNaytto = new Label();
340        pisteNaytto.X = Screen.Left + 100;
341        pisteNaytto.Y = Screen.Top - 100;
342        pisteNaytto.TextColor = Color.Red;
343
344        pisteNaytto.BindTo(pisteLaskuri);
345        Add(pisteNaytto);
346
347        Label pisteTeksti = new Label("Pisteitä: ");
348        pisteTeksti.X = Screen.Left + 50;
349        pisteTeksti.Y = Screen.Top - 100;
350        pisteTeksti.TextColor = Color.Red;
351        Add(pisteTeksti);
352    }
353
354    void Valikko()
355    {
356        ClearAll();
357        Level.BackgroundColor = Color.Blue;
358        Level.Background.Image = taustakuva;
359        valikonKohdat = new List<Label>();
360
361        Label kohta1 = new Label("Aloita uusi peli");
362        kohta1.Position = new Vector(0, 40);
363        valikonKohdat.Add(kohta1);
364
365        Label kohta2 = new Label("Lopeta");
366        kohta2.Position = new Vector(0, -40);
367        valikonKohdat.Add(kohta2);
368
369        foreach (Label valikonKohta in valikonKohdat)
370        {
371            Add(valikonKohta);
372        }
373
374        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaAlusta, null);
375        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
376
377        Mouse.IsCursorVisible = true;
378        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
379        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
380
381    }
382
383    void ValikossaLiikkuminen(AnalogState hiirenTila)
384    {
385        foreach (Label kohta in valikonKohdat)
386        {
387            if (Mouse.IsCursorOn(kohta))
388            {
389                kohta.TextColor = Color.Red;
390            }
391            else
392            {
393                kohta.TextColor = Color.Black;
394            }
395        }
396    }
397    void naytaPisteet()
398    {
399        HighScoreWindow topIkkuna = new HighScoreWindow("Dall of Dude 2D",
400                     "Parhaat pisteet",
401                     "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
402                     topLista, pisteLaskuri.Value);
403        topIkkuna.Closed += TallennaPisteet;
404        Add(topIkkuna);
405
406    }
407    void TallennaPisteet(Window sender)
408    {
409        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
410        AloitaAlusta();
411    }
412    PhysicsObject lisaaMaali()
413    {
414        PhysicsObject maali = new PhysicsObject(40, 40);
415        maali.Shape = Shape.Circle;
416        Add(maali);
417        maali.Tag = "maali";
418        return maali;
419    }
420    void osumaaliin(PhysicsObject hahmo, PhysicsObject maali)
421    {
422        if (maali.Tag.ToString() == "maali")
423        {
424            ClearAll();
425            MessageDisplay.Add("Pääsit pelin läpi!");
426            lisaaNappaimet();
427
428
429        }
430    }
431
432
433
434
435
436    public class Pahis : PhysicsObject
437    {
438        public int Elamat { get; set; }
439
440        public Pahis(double width, double height)
441            : base(width, height)
442        {
443
444        }
445
446
447    }
448}
Note: See TracBrowser for help on using the repository browser.