source: 2017/31/LeoM/_/_/_/_.cs @ 9348

Revision 9348, 12.2 KB checked in by npo17_89, 3 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
9
10class Vihu : PlatformCharacter
11{
12    private IntMeter elamaLaskuri = new IntMeter(12, 0, 12);
13    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
14
15    public Vihu(double leveys, double korkeus)
16        : base(leveys, korkeus)
17    {
18        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
19
20           }
21}
22
23class Pelaaja : PlatformCharacter
24{
25    private DoubleMeter elamaLaskuri = new DoubleMeter(5, 0, 5);
26    public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } }
27
28    public Pelaaja(double leveys, double korkeus)
29        : base(leveys, korkeus)
30    {
31        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
32       
33    }
34}
35public class _ : PhysicsGame
36{
37    AssaultRifle pelaajan1Ase;
38
39    //AssaultRifle VihunAse;
40    const double nopeus = 200;
41    const double hyppyNopeus = 750;
42    const int RUUDUN_KOKO = 20;
43
44    Pelaaja pelaaja1;
45    Image palikankuva = LoadImage("palikka");
46    Image ammuksenkuva = LoadImage("ammus");
47    Image pelaajanKuva = LoadImage("kissa");
48    Image tahtiKuva = LoadImage("tahti");
49    Image pizzaKuva = LoadImage("pizza");
50    Image vihukuva = LoadImage("auto");
51    Image paavihukuva = LoadImage("orkki");
52    SoundEffect maaliAani = LoadSoundEffect("maali");
53    Image maalikuva = LoadImage("ovi");
54    private PlatformCharacter vihu;
55    private Vihu paavihu;
56    Image taustaKuva = LoadImage("putin");
57
58    int kenttaNro = 1;
59
60
61    public override void Begin()
62    {
63
64       
65       
66        AloitaPeli();
67    }
68    void AloitaPeli()
69    {
70        ClearAll();
71        Gravity = new Vector(0, -1000);
72
73        if (kenttaNro == 1) LuoKentta("kentta1");
74        else if (kenttaNro == 2) LuoKentta("kentta2");
75        else if (kenttaNro == 3) LuoKentta("kentta3");
76        else if (kenttaNro > 3) Exit();
77
78        LisaaNappaimet();
79
80        Camera.Follow(pelaaja1);
81        Camera.ZoomFactor = 3.5;
82        Camera.StayInLevel = true;
83    }
84    void LuoKentta(string kentanNimi)
85    {
86        TileMap kentta = TileMap.FromLevelAsset(kentanNimi);
87        kentta.SetTileMethod('#', LisaaTaso);
88        kentta.SetTileMethod('l', LisaaLoppu);
89        kentta.SetTileMethod('*', LisaaTahti);
90        kentta.SetTileMethod('n', LisaaPelaaja);
91        kentta.SetTileMethod('p', LisaaPizza);
92        kentta.SetTileMethod('v', LisaaVihu);
93        kentta.SetTileMethod('V', LisaaPaaVihu);
94        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
95        Level.CreateBorders();
96         Level.Background.CreateGradient(Color.White, Color.SkyBlue);
97        Level.Background.Image = taustaKuva;
98    }
99
100    void LisaaTaso(Vector paikka, double leveys, double korkeus)
101    {
102        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
103        taso.Position = paikka;
104        taso.Image = palikankuva;
105        Add(taso);
106    }
107
108    void LisaaTahti(Vector paikka, double leveys, double korkeus)
109    {
110        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
111        tahti.IgnoresCollisionResponse = true;
112        tahti.Position = paikka;
113        tahti.Image = tahtiKuva;
114        tahti.Tag = "tahti";
115        Add(tahti);
116    }
117    void LisaaPizza(Vector paikka, double leveys, double korkeus)
118    {
119        PhysicsObject pizza = PhysicsObject.CreateStaticObject(leveys, korkeus);
120        pizza.IgnoresCollisionResponse = true;
121        pizza.Position = paikka;
122        pizza.Image = pizzaKuva;
123        pizza.Tag = "pizza";
124        Add(pizza);
125
126
127    }
128
129    void LisaaLoppu(Vector paikka, double leveys, double korkeus)
130    {
131        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
132        ovi.Position = paikka;
133        ovi.Image = maalikuva;
134        ovi.Tag = "loppu";
135        Add(ovi);
136        ovi.IgnoresCollisionResponse = true;
137
138    }
139
140
141    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
142    {
143        pelaaja1 = new Pelaaja(leveys, korkeus);
144        pelaaja1.Position = paikka;
145        pelaaja1.Mass = 4.0;
146        pelaaja1.Image = pelaajanKuva;
147        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
148        AddCollisionHandler(pelaaja1, "pizza", TormaaPizzaan);
149        AddCollisionHandler(pelaaja1, "vihu", TormaaVihuun);
150        AddCollisionHandler(pelaaja1, "loppu", TormaaLoppuun);
151        pelaaja1.Tag = "pelaaja";
152        Add(pelaaja1);
153        pelaajan1Ase = new AssaultRifle(10, 10);
154        pelaaja1.Weapon = pelaajan1Ase;
155       
156        //pelaaja1.Weapon.FireRate = 2.0;
157        pelaaja1.Weapon.CanHitOwner = false;
158        pelaajan1Ase.Ammo.Value = 100;
159        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
160        pelaaja1.ElamaLaskuri.LowerLimit += delegate 
161        {
162
163            Explosion rajahdys = new Explosion(100);
164            rajahdys.Position = pelaaja1.Position;
165            Add(rajahdys);
166            Timer.SingleShot(2, AloitaAlusta);
167        };
168        pelaajan1Ase.IsVisible = false;
169        ProgressBar elamaPalkki = new ProgressBar(150, 20);
170        elamaPalkki.X = Screen.Left + 150;
171        elamaPalkki.Y = Screen.Top - 20;
172        elamaPalkki.BindTo(pelaaja1.ElamaLaskuri);
173        Add(elamaPalkki);
174
175    }
176
177
178    void LisaaVihu(Vector paikka, double leveys, double korkeus)
179    {
180        vihu = new PlatformCharacter(leveys, korkeus);
181        vihu.Position = paikka;
182        vihu.Mass = 4.0;
183        vihu.Image = vihukuva;
184        AddCollisionHandler(vihu, pelaaja1);
185        vihu.Tag = "vihu";
186        vihu.IgnoresCollisionResponse = false;
187        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
188        tasoAivot.Speed = 100;
189        tasoAivot.JumpSpeed = 700;
190        tasoAivot.TriesToJump = true;
191        vihu.Brain = tasoAivot;
192        Add(vihu);
193   
194    }
195    void LisaaPaaVihu(Vector paikka, double leveys, double korkeus)
196    {
197        paavihu = new Vihu(leveys, korkeus);
198        paavihu.Position = paikka;
199        paavihu.Mass = 4.0;
200        paavihu.Image = paavihukuva;
201        Add(paavihu);
202        paavihu.Tag = "päävihu";
203        vihu.IgnoresCollisionResponse = false;
204        paavihu.ElamaLaskuri.LowerLimit += delegate
205        {
206
207            Explosion rajahdys = new Explosion(300);
208            rajahdys.Position = paavihu.Position;
209            Add(rajahdys);
210        };
211
212            PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
213        tasoAivot.Speed = 50;
214
215        paavihu.Brain = tasoAivot;
216
217        paavihu.Weapon = new AssaultRifle(30, 10);
218        paavihu.Weapon.CanHitOwner = false;
219        paavihu.Weapon.ProjectileCollision = VihunAmmusOsui;
220        paavihu.Weapon.IsVisible = false;
221
222
223        Timer ajastin = new Timer();
224        ajastin.Interval = 1;
225        ajastin.Timeout += delegate
226        {
227            paavihu.Weapon.AbsoluteAngle = (pelaaja1.Position - paavihu.Position).Angle;
228            PhysicsObject ammus = paavihu.Weapon.Shoot();
229
230            if (ammus != null)
231            {
232                ammus.Size *= 0.5;
233                ammus.Image = ammuksenkuva;
234                ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
235                ammus.Velocity *= 0.5;
236                ammus.CollisionIgnoreGroup = 3;
237            }
238
239            if (paavihu.IsDestroyed) ajastin.Stop();
240             
241        };
242        ajastin.Start();
243
244    }
245
246    void VihunAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
247    {
248        ammus.Destroy();
249
250        if (kohde.Tag == "pelaaja")
251        {
252            pelaaja1.ElamaLaskuri.Value -= 1;
253        }
254    }
255
256
257        void TormaaVihuun(PhysicsObject Pelaaja, PhysicsObject vihu)
258    {
259        pelaaja1.Destroy();
260        Explosion rajahdys = new Explosion(50);
261        rajahdys.Position = pelaaja1.Position;
262        Add(rajahdys);
263        Timer.SingleShot(2, AloitaAlusta);
264        MessageDisplay.Add("jäit auton alle!");
265    }
266
267    private void AddCollisionHandler(PlatformCharacter vihu, PlatformCharacter pelaaja1)
268    {
269       
270    }
271
272    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
273    {
274        if (kohde.Tag != "pelaaja")
275        {
276            ammus.Destroy();
277        }
278
279        if (kohde.Tag == "vihu")
280        {
281            kohde.Destroy();
282            Explosion rajahdys = new Explosion(50);
283            rajahdys.Position = kohde.Position;
284            Add(rajahdys);
285        }
286        if (kohde.Tag == "päävihu")
287        {
288            (kohde as Vihu).ElamaLaskuri.Value -= 1;
289        }
290    }
291
292    void AmmuAseella(PlatformCharacter pelaaja)
293    {
294        PhysicsObject ammus = pelaaja.Weapon.Shoot();
295
296        if (ammus != null)
297        {
298            ammus.Size *= 0.5;
299            ammus.Image = ammuksenkuva;
300            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
301            ammus.Velocity *= 0.5;
302            ammus.CollisionIgnoreGroup = 3;
303        }
304    }
305
306        void LisaaNappaimet()
307    {
308        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
309        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
310
311        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
312        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
313        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
314
315        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
316
317        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
318        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
319        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
320
321        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
322
323        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
324    }
325
326    void Liikuta(PlatformCharacter hahmo, double nopeus)
327    {
328        hahmo.Walk(nopeus);
329    }
330
331    void Hyppaa(PlatformCharacter hahmo, double nopeus)
332    {
333        hahmo.Jump(nopeus);
334    }
335
336    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
337    {
338        maaliAani.Play();
339        MessageDisplay.Add("Keräsit tähden!");
340        tahti.Destroy();
341    }
342    void TormaaLoppuun(PhysicsObject hahmo, PhysicsObject ovi)
343    {
344        maaliAani.Play();
345        MessageDisplay.Add("");
346        kenttaNro++;
347        AloitaPeli();
348       
349    }
350
351    void TormaaPizzaan(PhysicsObject hahmo, PhysicsObject pizza)
352    {
353
354        MessageDisplay.Add("söit pizzan!");
355       
356       
357            pelaaja1.ElamaLaskuri.Value -= 0.5;
358       
359
360       
361
362    }
363   
364   
365
366
367    void AloitaAlusta()
368    {
369        Mouse.IsCursorVisible = true;
370        ClearAll(); // Tyhjennetään kenttä kaikista peliolioista
371        List<Label> valikonKohdat;
372        valikonKohdat = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
373
374        Label kohta1 = new Label("Jatka peliä");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
375        kohta1.Position = new Vector(0, 40);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
376        valikonKohdat.Add(kohta1);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
377
378        Label kohta3 = new Label("Lopeta peli");
379        kohta3.Position = new Vector(0, -40);
380        valikonKohdat.Add(kohta3);
381        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
382        foreach (Label valikonKohta in valikonKohdat)
383
384            Add(valikonKohta);
385        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
386        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
387
388
389        foreach (Label kohta in valikonKohdat)
390        {
391            if (Mouse.IsCursorOn(kohta))
392            {
393                kohta.TextColor = Color.Red;
394            }
395            else
396            {
397                kohta.TextColor = Color.Black;
398            }
399
400
401        }
402   
403   
404
405       
406    }
407}
Note: See TracBrowser for help on using the repository browser.