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

Revision 9334, 10.5 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(15, 0, 15);
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 IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
26    public IntMeter 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    private PlatformCharacter vihu;
54    private Vihu paavihu;
55
56    public override void Begin()
57    {
58
59   
60
61        AloitaPeli();
62    }
63    void AloitaPeli()
64    {
65        ClearAll();
66        Gravity = new Vector(0, -1000);
67       
68        LuoKentta();
69        LisaaNappaimet();
70
71        Camera.Follow(pelaaja1);
72        Camera.ZoomFactor = 3.5;
73        Camera.StayInLevel = true;
74    }
75    void LuoKentta()
76    {
77        TileMap kentta = TileMap.FromLevelAsset("kentta1");
78        kentta.SetTileMethod('#', LisaaTaso);
79        kentta.SetTileMethod('*', LisaaTahti);
80        kentta.SetTileMethod('n', LisaaPelaaja);
81        kentta.SetTileMethod('p', LisaaPizza);
82        kentta.SetTileMethod('v', LisaaVihu);
83        kentta.SetTileMethod('V', LisaaPaaVihu);
84        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
85        Level.CreateBorders();
86        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
87    }
88
89    void LisaaTaso(Vector paikka, double leveys, double korkeus)
90    {
91        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
92        taso.Position = paikka;
93        taso.Image = palikankuva;
94        Add(taso);
95    }
96
97    void LisaaTahti(Vector paikka, double leveys, double korkeus)
98    {
99        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
100        tahti.IgnoresCollisionResponse = true;
101        tahti.Position = paikka;
102        tahti.Image = tahtiKuva;
103        tahti.Tag = "tahti";
104        Add(tahti);
105    }
106    void LisaaPizza(Vector paikka, double leveys, double korkeus)
107    {
108        PhysicsObject pizza = PhysicsObject.CreateStaticObject(leveys, korkeus);
109        pizza.IgnoresCollisionResponse = true;
110        pizza.Position = paikka;
111        pizza.Image = pizzaKuva;
112        pizza.Tag = "pizza";
113        Add(pizza);
114    }
115
116
117
118
119    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
120    {
121        pelaaja1 = new Pelaaja(leveys, korkeus);
122        pelaaja1.Position = paikka;
123        pelaaja1.Mass = 4.0;
124        pelaaja1.Image = pelaajanKuva;
125        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
126        AddCollisionHandler(pelaaja1, "pizza", TormaaPizzaan);
127        AddCollisionHandler(pelaaja1, "vihu", TormaaVihuun);
128        pelaaja1.Tag = "pelaaja";
129        Add(pelaaja1);
130        pelaajan1Ase = new AssaultRifle(30, 10);
131        pelaaja1.Weapon = pelaajan1Ase;
132        pelaajan1Ase.Ammo.Value = 100;
133        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
134        pelaaja1.ElamaLaskuri.LowerLimit += delegate 
135        {
136
137            Explosion rajahdys = new Explosion(100);
138            rajahdys.Position = pelaaja1.Position;
139            Add(rajahdys);
140            Timer.SingleShot(2, AloitaAlusta);
141        };
142        pelaajan1Ase.IsVisible = false;
143    }
144       
145   
146    void LisaaVihu(Vector paikka, double leveys, double korkeus)
147    {
148        vihu = new PlatformCharacter(leveys, korkeus);
149        vihu.Position = paikka;
150        vihu.Mass = 4.0;
151        vihu.Image = vihukuva;
152        AddCollisionHandler(vihu, pelaaja1);
153        vihu.Tag = "vihu";
154        vihu.IgnoresCollisionResponse = false;
155        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
156        tasoAivot.Speed = 100;
157        tasoAivot.JumpSpeed = 700;
158        tasoAivot.TriesToJump = true;
159        vihu.Brain = tasoAivot;
160        Add(vihu);
161   
162    }
163    void LisaaPaaVihu(Vector paikka, double leveys, double korkeus)
164    {
165        paavihu = new Vihu(leveys, korkeus);
166        paavihu.Position = paikka;
167        paavihu.Mass = 4.0;
168        paavihu.Image = paavihukuva;
169        Add(paavihu);
170        paavihu.Tag = "päävihu";
171        vihu.IgnoresCollisionResponse = false;
172
173        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
174        tasoAivot.Speed = 50;
175
176        paavihu.Brain = tasoAivot;
177
178        paavihu.Weapon = new AssaultRifle(30, 10);
179        paavihu.Weapon.Ammo.Value = 1000;
180        paavihu.Weapon.ProjectileCollision = VihunAmmusOsui;
181        paavihu.Weapon.IsVisible = false;
182
183
184        Timer ajastin = new Timer();
185        ajastin.Interval = 1;
186        ajastin.Timeout += delegate
187        {
188            paavihu.Weapon.AbsoluteAngle = (pelaaja1.Position - paavihu.Position).Angle;
189            PhysicsObject ammus = paavihu.Weapon.Shoot();
190
191            if (ammus != null)
192            {
193                //ammus.Size *= 3;
194                ammus.Image = ammuksenkuva;
195                ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
196                ammus.Velocity *= 0.5;
197            }
198
199            if (paavihu.IsDestroyed) ajastin.Stop();
200             
201        };
202        ajastin.Start();
203
204    }
205
206    void VihunAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
207    {
208        ammus.Destroy();
209
210        if (kohde.Tag == "pelaaja")
211        {
212            pelaaja1.ElamaLaskuri.Value -= 1;
213        }
214    }
215
216
217        void TormaaVihuun(PhysicsObject Pelaaja, PhysicsObject vihu)
218    {
219        pelaaja1.Destroy();
220        Explosion rajahdys = new Explosion(50);
221        rajahdys.Position = pelaaja1.Position;
222        Add(rajahdys);
223        Timer.SingleShot(2, AloitaAlusta);
224        MessageDisplay.Add("jäit auton alle!");
225    }
226
227    private void AddCollisionHandler(PlatformCharacter vihu, PlatformCharacter pelaaja1)
228    {
229       
230    }
231
232    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
233    {
234        ammus.Destroy();
235        if (kohde.Tag == "vihu")
236        {
237            kohde.Destroy();
238            Explosion rajahdys = new Explosion(50);
239            rajahdys.Position = kohde.Position;
240            Add(rajahdys);
241        }
242        if (kohde.Tag == "päävihu")
243        {
244            (kohde as Vihu).ElamaLaskuri.Value -= 1;
245        }
246    }
247
248    void AmmuAseella(PlatformCharacter pelaaja)
249    {
250        PhysicsObject ammus = pelaaja.Weapon.Shoot();
251
252        if (ammus != null)
253        {
254            //ammus.Size *= 3;
255            ammus.Image = ammuksenkuva;
256            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
257            ammus.Velocity *= 0.5;
258        }
259    }
260
261        void LisaaNappaimet()
262    {
263        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
264        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
265
266        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
267        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
268        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
269
270        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
271
272        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
273        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
274        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
275
276        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
277
278        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
279    }
280
281    void Liikuta(PlatformCharacter hahmo, double nopeus)
282    {
283        hahmo.Walk(nopeus);
284    }
285
286    void Hyppaa(PlatformCharacter hahmo, double nopeus)
287    {
288        hahmo.Jump(nopeus);
289    }
290
291    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
292    {
293        maaliAani.Play();
294        MessageDisplay.Add("Keräsit tähden!");
295        tahti.Destroy();
296    }
297
298    void TormaaPizzaan(PhysicsObject hahmo, PhysicsObject pizza)
299    {
300
301        MessageDisplay.Add("söit pizzan!");
302     
303        Timer.SingleShot(2, AloitaAlusta);
304
305    }
306   
307   
308
309
310    void AloitaAlusta()
311    {
312        Mouse.IsCursorVisible = true;
313        ClearAll(); // Tyhjennetään kenttä kaikista peliolioista
314        List<Label> valikonKohdat;
315        valikonKohdat = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
316
317        Label kohta1 = new Label("Aloita uusi peli");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
318        kohta1.Position = new Vector(0, 40);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
319        valikonKohdat.Add(kohta1);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
320
321        Label kohta3 = new Label("Lopeta peli");
322        kohta3.Position = new Vector(0, -40);
323        valikonKohdat.Add(kohta3);
324        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
325        foreach (Label valikonKohta in valikonKohdat)
326
327            Add(valikonKohta);
328        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
329        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
330
331
332        foreach (Label kohta in valikonKohdat)
333        {
334            if (Mouse.IsCursorOn(kohta))
335            {
336                kohta.TextColor = Color.Red;
337            }
338            else
339            {
340                kohta.TextColor = Color.Black;
341            }
342
343
344        }
345   
346   
347
348       
349    }
350}
Note: See TracBrowser for help on using the repository browser.