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

Revision 9812, 14.0 KB checked in by osedcald, 3 years ago (diff)

helou gais

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