source: 2018/26/OttoR/ottorolig/Pohjola/Pohjola/Pohjola.cs @ 9816

Revision 9816, 14.2 KB checked in by osedcald, 22 months ago (diff)

29.6.2018
Viimeisin versio.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Widgets;
7
8public class Pohjola : PhysicsGame
9{
10
11
12    PhysicsObject pelaaja;
13    PhysicsObject agro;
14    PhysicsObject npc;
15    PhysicsObject rosvo;
16
17    Image Pelaajankuva = LoadImage("hahmo");
18    Image RosvonKuva = LoadImage("rosvo");
19    Image NpcKuva = LoadImage("npc");
20    Image Puukuva = LoadImage("puu");
21    Image Pensaskuva = LoadImage("pensas");
22    Image KotiKuva = LoadImage("koti");
23    Image AgressiivinenKuva = LoadImage("agressive");
24    Image AgressiivinenKuva1 = LoadImage("agressive1");
25    Image JuomaKuva = LoadImage("juoma");
26    Image GameOverKuva = LoadImage("gameover");
27    private Image[] hahmonkavely = LoadImages("hahmo1", "hahmo2");
28    private Image[] rosvonkavely = LoadImages("rosvo1", "rosvo2");
29    private Image[] npckavely = LoadImages("npc1", "npc2");
30    static readonly Image Kivikuva = LoadImage("kivi");
31    DoubleMeter elamaLaskuri;
32    Timer aikaLaskuri;
33    IntMeter Raha;
34    IntMeter npceet;
35    IntMeter nappainlaskuri;
36    IntMeter nappainlaskuri1;
37    //Timer aikaLaskuri;
38    Label painallukset;
39    Label painallukset1;
40    Shape kivenMuoto;
41    Shape npcMuoto;
42
43    bool onkoAgressiivinenPaalla = false;
44    bool ihmisiaonvahan = false;
45
46
47    public override void Begin()
48    {
49
50        SetWindowSize(1100, 900, false);
51        Camera.Zoom(4);
52        LuoKentta();
53        SmoothTextures = false;
54        Mouse.IsCursorVisible = true;
55        Level.Background.Color = Color.Green;
56        AddCollisionHandler(pelaaja, "kerattava", PelaajaTormasi);
57
58
59
60        //KEYBOARD
61        Keyboard.Listen(Key.W, ButtonState.Down,
62            LiikutaPelaajaa, null, new Vector(0, 1000));
63        Keyboard.Listen(Key.S, ButtonState.Down,
64            LiikutaPelaajaa, null, new Vector(0, -1000));
65        Keyboard.Listen(Key.A, ButtonState.Down,
66            LiikutaPelaajaa, null, new Vector(-1000, 0));
67        Keyboard.Listen(Key.D, ButtonState.Down,
68            LiikutaPelaajaa, null, new Vector(1000, 0));
69
70
71        Keyboard.Listen(Key.W, ButtonState.Released,
72            Hahmopaikallaan, null, new Vector(0, 1000));
73        Keyboard.Listen(Key.S, ButtonState.Released,
74            Hahmopaikallaan, null, new Vector(0, -1000));
75        Keyboard.Listen(Key.A, ButtonState.Released,
76            Hahmopaikallaan, null, new Vector(-1000, 0));
77        Keyboard.Listen(Key.D, ButtonState.Released,
78            Hahmopaikallaan, null, new Vector(1000, 0));
79
80        //Keyboard.Listen(Key.E, ButtonState.Pressed, OtaEsine, null);
81        Keyboard.Listen(Key.K, ButtonState.Down, Agressiivinen, null);
82        Keyboard.Listen(Key.K, ButtonState.Released, Agressiivinen1, null);
83
84
85
86        //EXIT
87        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
88        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
89        //Keyboard.Listen(Key.P, ButtonState.Pressed, PauseTila, "PauseTila");
90
91
92    }
93    void LuoKentta()
94    {
95
96       
97
98        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
99
100        ruudut.SetTileMethod(Color.Purple, LuoPelaaja);
101        ruudut.SetTileMethod(Color.Black, LuoPuu);
102        ruudut.SetTileMethod(Color.Gray, LuoKivi);
103        ruudut.SetTileMethod(Color.Gold, LuoPensas);
104        ruudut.SetTileMethod(Color.DarkRed, LuoRosvo);
105        ruudut.SetTileMethod(Color.White, LuoNPC);
106        ruudut.SetTileMethod(Color.Orange, LuoKoti);
107        // ruudut.SetTileMethod(Color.Olive, LuoKoti);
108
109        kivenMuoto = Shape.FromImage(Kivikuva);
110        npcMuoto = Shape.FromImage(NpcKuva);
111        ruudut.Execute(20, 20);
112
113        MessageDisplay.Add("Sinulla on 30 sekuntia aikaa");
114        MessageDisplay.Add("Pidä K-näppäintä pohjassa taistellaksesi ja lyö Space-näppäimellä");
115        MessageDisplay.Add("Tölkkien juominen täyttää elämäpalkkia");
116
117       
118
119        LuoElamaLaskuri();
120        LuoAikaLaskuri();
121        LuoReppu();
122        LuoAgro();
123        Level.CreateBorders(0, true, Color.DarkGreen);
124    }
125
126    void LuoAikaLaskuri()
127    {
128        aikaLaskuri = new Timer();
129
130        Label aikaNaytto = new Label();
131        aikaNaytto.TextColor = Color.White;
132        aikaNaytto.DecimalPlaces = 1;
133
134        aikaLaskuri.Interval = 30;
135        aikaLaskuri.Timeout += AikaLoppui;
136        aikaLaskuri.IgnorePause = true;
137        aikaLaskuri.Start();
138
139
140        aikaNaytto.X = Screen.Left + 550;
141        aikaNaytto.Y = Screen.Top - 80;
142        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
143        Add(aikaNaytto);
144    }
145    void AikaLoppui()
146    {
147        MessageDisplay.Add("Aika loppui...");
148        IsPaused = true;
149        aikaLaskuri.Stop();
150        LuoGameOver();
151    }
152    void LuoGameOver()
153    {
154        PhysicsObject gameover = new PhysicsObject(81, 60);
155        gameover.Image = GameOverKuva;
156        gameover.Position = pelaaja.Position;
157        gameover.IgnoresCollisionResponse = true;
158        Add(gameover,2);
159
160    }
161    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
162    {
163        pelaaja = new PhysicsObject(13, 25);
164        pelaaja.Image = Pelaajankuva;
165        pelaaja.Animation = new Animation(hahmonkavely);
166        pelaaja.Animation.FPS = 5;
167        pelaaja.LinearDamping = 0.7;
168        pelaaja.CanRotate = false;
169        pelaaja.Shape = Shape.FromImage(Pelaajankuva);
170        pelaaja.Position = paikka;
171        Add(pelaaja);
172        Camera.Follow(pelaaja);
173        AddCollisionHandler(pelaaja, "npc", Kombatti);
174        AddCollisionHandler(pelaaja, "rosvo", AloitaTappelu);
175        AddCollisionHandler(pelaaja, "juoma", LisaaElamaa);
176    }
177    void LuoElamaLaskuri()
178    {
179        elamaLaskuri = new DoubleMeter(10);
180        elamaLaskuri.MaxValue = 10;
181        elamaLaskuri.LowerLimit += ElamaLoppui;
182
183        ProgressBar elamaPalkki = new ProgressBar(250, 20);
184        elamaPalkki.X = Screen.Left + 150;
185        elamaPalkki.Y = Screen.Bottom + 20;
186        elamaPalkki.BorderColor = Color.Black;
187        elamaPalkki.BindTo(elamaLaskuri);
188        Add(elamaPalkki);
189    }
190    void LisaaElamaa(PhysicsObject tormaaja, PhysicsObject kohde)
191    {
192        elamaLaskuri.AddOverTime(+1, 1);
193    }
194
195    void ElamaLoppui()
196    {
197        MessageDisplay.Add("Elämät loppuivat, voi voi.");
198        IsPaused = true;
199        aikaLaskuri.Stop();
200        LuoGameOver();
201    }
202
203    void LiikutaPelaajaa(Vector vektori)
204    {
205        pelaaja.Animation.Resume();
206        pelaaja.Push(vektori);
207
208    }
209
210    void Hahmopaikallaan(Vector vektori)
211    {
212        pelaaja.Animation.Stop();
213
214    }
215
216    void LuoKivi(Vector paikka, double leveys, double korkeus)
217    {
218        Esine kivi = new Esine(14, 10, 100, 10);
219        // kivi.IgnoresCollisionResponse = true;
220        kivi.Position = paikka;
221        kivi.Image = Kivikuva;
222        kivi.Shape = kivenMuoto;
223        kivi.Tag = "kivi";
224        Add(kivi, 1);
225    }
226
227    void LuoPuu(Vector paikka, double leveys, double korkeus)
228    {
229        PhysicsObject puu = PhysicsObject.CreateStaticObject(23, 34);
230        puu.IgnoresCollisionResponse = true;
231        puu.Position = paikka;
232        puu.Shape = Shape.FromImage(Puukuva);
233        puu.Image = Puukuva;
234        puu.Tag = "puu";
235        Add(puu, 1);
236    }
237
238    void LuoPensas(Vector paikka, double leveys, double korkeus)
239    {
240        PhysicsObject pensas = PhysicsObject.CreateStaticObject(18, 14);
241        pensas.IgnoresCollisionResponse = true;
242        pensas.Position = paikka;
243        pensas.Image = Pensaskuva;
244        pensas.Tag = "pensas";
245        Add(pensas, -1);
246    }
247
248    void LuoRosvo(Vector paikka, double leveys, double korkeus)
249    {
250        PhysicsObject rosvo = new PhysicsObject(13.0, 25.0);
251        rosvo.Image = RosvonKuva;
252        rosvo.Position = paikka;
253        rosvo.CanRotate = false;
254        rosvo.Animation = new Animation(rosvonkavely);
255        rosvo.Animation.Start();
256        rosvo.Animation.FPS = 5;
257        rosvo.Shape = Shape.FromImage(RosvonKuva);
258        rosvo.Tag = "rosvo";
259        Add(rosvo);
260
261        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(20);
262        satunnaisAivot.ChangeMovementSeconds = 1;
263        rosvo.Brain = satunnaisAivot;
264    }
265
266    void LuoNPC(Vector paikka, double leveys, double korkeus)
267    {
268        npc = new PhysicsObject(13.0, 25.0);
269        npc.Image = NpcKuva;
270        npc.Position = paikka;
271        npc.CanRotate = false;
272        npc.Animation = new Animation(npckavely);
273        npc.Animation.Start();
274        npc.Animation.FPS = 5;
275        npc.Tag = "npc";
276        npc.Shape = Shape.FromImage(NpcKuva);
277        Add(npc);
278
279        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(20);
280        satunnaisAivot.ChangeMovementSeconds = 1;
281        npc.Brain = satunnaisAivot;
282
283        LuoIhmisia();
284
285
286
287    }
288    void LuoIhmisia()
289    {
290        npceet = new IntMeter(0);
291        npceet.MinValue = 0;
292        npceet.LowerLimit += delegate { LuoNPC(RandomGen.NextVector(-10, 10), 20, 20); };
293        npceet.Value += 1;
294    }
295    void LuoKoti(Vector paikka, double leveys, double korkeus)
296    {
297        PhysicsObject koti = PhysicsObject.CreateStaticObject(69, 50);
298        koti.Position = paikka;
299        koti.Image = KotiKuva;
300        koti.Shape = Shape.FromImage(KotiKuva);
301        koti.Tag = "koti";
302        Add(koti, 0);
303    }
304
305    void LuoAgro()
306    {
307        agro = new PhysicsObject(270, 220);
308
309        agro.IgnoresCollisionResponse = true;
310        agro.Image = AgressiivinenKuva1;
311        FollowerBrain SeuraajaAivot = new FollowerBrain(pelaaja);
312        SeuraajaAivot.Speed = 70;
313        agro.Brain = SeuraajaAivot;
314        agro.Position = pelaaja.Position;
315        agro.X = pelaaja.X;
316        agro.Y = pelaaja.Y;
317        Add(agro, 1);
318
319    }
320
321    void PauseTila()
322    {
323        //    IsPaused = true;
324    }
325
326    void LuoReppu()
327    {
328        Widget ruutu1 = new Widget(100.0, 100.0);
329
330        ruutu1.X = Screen.LeftSafe + 65;
331        ruutu1.Y = Screen.BottomSafe + 100;
332        ruutu1.Color = Color.White;
333        ruutu1.BorderColor = Color.Black;
334        Add(ruutu1);
335
336        Raha = new IntMeter(0);
337
338        Widget RahaRuutu = new Widget(100, 50);
339        RahaRuutu.Layout = new VerticalLayout();
340        RahaRuutu.X = Screen.LeftSafe + 65;
341        RahaRuutu.Y = Screen.BottomSafe + 200;
342        Add(RahaRuutu);
343
344        Label RahaTeksti = new Label("Rahaa: ");
345        RahaRuutu.Add(RahaTeksti);
346
347        Label RahaNaytto = new Label();
348        RahaNaytto.BindTo(Raha);
349        RahaRuutu.Add(RahaNaytto);
350
351
352    }
353    //void OtaEsine()
354    //{
355
356
357    //}
358
359    void PelaajaTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
360    {
361        MessageDisplay.Add("+3 health");
362        elamaLaskuri.AddOverTime(+3, 0.5);
363        kohde.Destroy();
364
365    }
366
367
368    void Agressiivinen()
369    {
370        agro.Image = AgressiivinenKuva;
371        onkoAgressiivinenPaalla = true;
372    }
373
374    void Agressiivinen1()
375    {
376        agro.Image = AgressiivinenKuva1;
377        onkoAgressiivinenPaalla = false;
378
379    }
380
381    void AloitaTappelu(PhysicsObject tormaaja, PhysicsObject kohde)
382    {
383        if (onkoAgressiivinenPaalla == true)
384        {
385            IsPaused = true;   
386           
387            LisaaPainallus();
388            Keyboard.Listen(Key.Space, ButtonState.Pressed, Nappain, "Nappain");
389           
390        }
391        rosvo = kohde;
392    }
393    void Kombatti(PhysicsObject tormaaja, PhysicsObject kohde)
394    {
395        if (onkoAgressiivinenPaalla == true)
396        {
397            IsPaused = true;
398            Juomaa();
399           
400            LisaaPainallus1();
401            Keyboard.Listen(Key.Space, ButtonState.Pressed, Nappain1, "Nappain1");
402           
403        }
404        npc = kohde;
405    }
406    void Juomaa()
407    {
408        PhysicsObject juoma = new PhysicsObject(5, 8);
409       juoma.Shape = Shape.Triangle;
410       juoma.Image = JuomaKuva;
411       juoma.Position = new Vector(RandomGen.NextDouble(Level.Left,Level.Right),RandomGen.NextDouble(Level.Top,Level.Bottom));
412       juoma.Tag = "kerattava";
413       Add(juoma);
414    }
415
416    void LisaaPainallus()
417    {
418        nappainlaskuri = new IntMeter(0);
419
420        painallukset = new Label();       
421        painallukset.X = Screen.Left + 550;
422        painallukset.Y = Screen.Top - 380;
423        painallukset.TextColor = Color.Black;
424        painallukset.Color = Color.White;
425        painallukset.Title = "Lyöntejä";
426        painallukset.BindTo(nappainlaskuri);
427        Add(painallukset);
428       
429        nappainlaskuri.MaxValue = 15;
430        nappainlaskuri.UpperLimit += VoititTappelun;
431    }
432    void LisaaPainallus1()
433    {
434        nappainlaskuri1 = new IntMeter(0);
435
436        painallukset1 = new Label();
437        painallukset1.X = Screen.Left + 550;
438        painallukset1.Y = Screen.Top - 380;
439        painallukset1.TextColor = Color.Black;
440        painallukset1.Color = Color.White;
441        painallukset1.Title = "Lyöntejä";
442        painallukset1.BindTo(nappainlaskuri1);
443        Add(painallukset1);
444
445        nappainlaskuri1.MaxValue = 10;
446        nappainlaskuri1.UpperLimit += VoititTappelun1;
447    }
448
449    void Nappain()
450    {
451
452        nappainlaskuri.Value += 1;
453       
454    }
455    void Nappain1()
456    {
457
458        nappainlaskuri1.Value += 1;
459
460    }
461    void VoititTappelun()
462    {
463        painallukset.Destroy();
464        nappainlaskuri.Reset();
465        Keyboard.Disable(Key.Space);
466        IsPaused = false;
467        rosvo.Destroy();
468        Raha.AddOverTime(RandomGen.NextInt(10,30),1);
469        elamaLaskuri.AddOverTime(-3, 1);
470       
471    }
472
473    void VoititTappelun1()
474    {
475        painallukset1.Destroy();
476        nappainlaskuri1.Reset();
477        Keyboard.Disable(Key.Space);
478        IsPaused = false;
479        npc.Destroy();
480        Raha.AddOverTime(+7, 1);
481        elamaLaskuri.AddOverTime(-1, 3);
482    }
483}
484
485
486
487class Esine : PhysicsObject
488{
489    double nopeus;
490    int vahinko;
491    public Esine(double leveys, double korkeus, double nopeus, int vahinko)
492        : base(leveys, korkeus)
493    {
494        this.nopeus = nopeus;
495        this.vahinko = vahinko;
496        base.Tag = "kerattava";
497        this.MakeStatic();
498    }
499}
Note: See TracBrowser for help on using the repository browser.