source: 2017/koodauskerho/mastermijari/Seikkailu/Seikkailu/Seikkailu/Seikkailu.cs @ 9516

Revision 9516, 11.1 KB checked in by rikavila, 16 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Seikkailu : PhysicsGame
10{
11    DoubleMeter elamalaskuri;
12    DoubleMeter elamalaskuri2;
13    IntMeter pisteLaskuri;
14
15    Image pelaajankuva = LoadImage("ihminen");
16    PhysicsObject pelaaja;
17
18    Image nuolenkuva = LoadImage("nuoli");
19    PhysicsObject nuoli;
20
21    Image hirvionkuva = LoadImage("hirvio");
22    PhysicsObject hirvio;
23
24    Image puukonkuva = LoadImage("PuuuuuuKKo");
25    PhysicsObject puukko;
26
27    Image pallonkuva = LoadImage("tuulipallo");
28    PhysicsObject pallo;
29
30    Image pelaajan2kuva = LoadImage("ihminen2");
31    PhysicsObject pelaaja2;
32    int kenttanro = 1;
33    Image ampujankuva = LoadImage("hirvio2");
34
35    bool tulipallovalmis = true;
36
37    Image puunkuva = LoadImage("puuu");
38    PhysicsObject puu;
39    PhysicsObject HirvioSpawn;
40    PhysicsObject AmpujaSpawn;
41    public override void Begin()
42    {
43        // TODO: Kirjoita ohjelmakoodisi tähän
44        LuoelamaLaskuri();
45        LuoelamaLaskuri2();
46        Level.Background.Color = Color.DarkJungleGreen;
47        LuoPistelaskuri();
48
49        LuoKenttä();
50
51        Timer ajastin = new Timer();
52        ajastin.Interval = 3.0;
53        ajastin.Timeout += LisaaHirvio;
54        ajastin.Start();
55
56
57
58        Timer ajastin2 = new Timer();
59        ajastin2.Interval = 3.0;
60        ajastin2.Timeout += LisaaAmpuja;
61        ajastin2.Start();
62
63
64        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
65        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
66    }
67    void LuoKenttä() {
68        TileMap ruudut = TileMap.FromLevelAsset("kentta" + kenttanro);
69        ruudut.SetTileMethod('#', LuoPalikka);
70        ruudut.SetTileMethod('K', LuoKivi);
71        ruudut.SetTileMethod('P', LuoPelaaja);
72        ruudut.SetTileMethod('2', LuoPelaaja2);
73        ruudut.SetTileMethod('L', LuoPuu);
74        ruudut.SetTileMethod('H', LuoHirvioSpawn);
75        ruudut.SetTileMethod('A', LuoAmpujaSpawn);
76        ruudut.Execute(20, 20);
77    }
78
79    private void LuoHirvioSpawn(Vector paikka, double leveys, double korkeus)
80    {
81        HirvioSpawn = PhysicsObject.CreateStaticObject(leveys, korkeus);
82        HirvioSpawn.Color = Color.AshGray;
83        HirvioSpawn.Position = paikka;
84    }
85    private void LuoAmpujaSpawn(Vector paikka, double leveys, double korkeus)
86    {
87        AmpujaSpawn = PhysicsObject.CreateStaticObject(leveys, korkeus);
88        AmpujaSpawn.Color = Color.AshGray;
89        AmpujaSpawn.Position = paikka;
90    }
91        void LuoPistelaskuri()
92    {
93        pisteLaskuri = new IntMeter(0,0,2);
94        pisteLaskuri.UpperLimit += () => {
95            // tässä toinen kenttä
96            tulipallovalmis = true;
97            ClearAll();
98            kenttanro++;
99            Begin();
100            pisteLaskuri.MaxValue = 999999999;
101            Level.Background.Color = Color.DarkJungleGreen;
102
103        };
104
105
106        Label pisteNaytto = new Label();
107        pisteNaytto.X = Screen.Left + 1000;
108        pisteNaytto.Y = Screen.Top - 100;
109        pisteNaytto.TextColor = Color.Black;
110        pisteNaytto.Color = Color.White;
111
112        pisteNaytto.BindTo(pisteLaskuri);
113        Add(pisteNaytto);
114    }
115
116    void LuoPalikka(Vector paikka, double leveys, double korkeus)
117    {
118        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
119        palikka.Position = paikka;
120        palikka.Shape = Shape.Rectangle;
121        palikka.Color = Color.AshGray;
122        Add(palikka);
123    }
124    void LuoKivi(Vector paikka, double leveys, double korkeus)
125    {
126        PhysicsObject kivi = PhysicsObject.CreateStaticObject(leveys, korkeus);
127        kivi.Position = paikka;
128        kivi.Shape = Shape.Rectangle;
129        kivi.Color = Color.LightGray;
130        Add(kivi);
131    }
132    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
133    {
134        pelaaja = new PhysicsObject(leveys + 30, korkeus + 10);
135        pelaaja.Shape = Shape.Rectangle;
136        pelaaja.Color = Color.DarkBlue;
137        pelaaja.Position = paikka;
138        pelaaja.Image = pelaajankuva;
139        pelaaja.LinearDamping = 0.8;
140        pelaaja.CanRotate = false;
141        pelaaja.Tag = "pelaaja";
142
143        Add(pelaaja);
144
145        Keyboard.Listen(Key.A, ButtonState.Down,
146            LiikutaPelaajaa, null, new Vector(-50, 0));
147        Keyboard.Listen(Key.D, ButtonState.Down,
148           LiikutaPelaajaa, null, new Vector(50, 0));
149        Keyboard.Listen(Key.W, ButtonState.Down,
150           LiikutaPelaajaa, null, new Vector(0, 50));
151        Keyboard.Listen(Key.S, ButtonState.Down,
152           LiikutaPelaajaa, null, new Vector(0, -50));
153        Mouse.Listen(MouseButton.Left, ButtonState.Pressed,
154            HeitaPuukko, null, pelaaja);
155        Mouse.Listen(MouseButton.Right, ButtonState.Pressed,
156            AmmuTulta, null, pelaaja);
157
158
159    }
160    void LiikutaPelaajaa(Vector vectori)
161    {
162        pelaaja.Hit(vectori);
163        pelaaja.Angle = vectori.Angle - Angle.FromDegrees(-90);
164    }
165     void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
166    {
167        pelaaja2 = new PhysicsObject(leveys + 30, korkeus + 10);
168        pelaaja2.Shape = Shape.Rectangle;
169        pelaaja2.Color = Color.DarkBlue;
170        pelaaja2.Position = paikka;
171        pelaaja2.Image = pelaajan2kuva;
172        pelaaja2.LinearDamping = 0.8;
173        pelaaja2.CanRotate = false;
174        pelaaja2.Tag = "pelaaja2";
175        Add(pelaaja2);
176
177
178
179        Keyboard.Listen(Key.Left, ButtonState.Down,
180            LiikutaPelaajaa2, null, new Vector(-50, 0));
181        Keyboard.Listen(Key.Right, ButtonState.Down,
182           LiikutaPelaajaa2, null, new Vector(50, 0));
183        Keyboard.Listen(Key.Up, ButtonState.Down,
184           LiikutaPelaajaa2, null, new Vector(0, 50));
185        Keyboard.Listen(Key.Down, ButtonState.Down,
186           LiikutaPelaajaa2, null, new Vector(0, -50));
187
188
189
190    }
191    void LiikutaPelaajaa2(Vector vectori)
192    {
193        pelaaja2.Hit(vectori);
194        pelaaja2.Angle = vectori.Angle - Angle.FromDegrees(-90);
195    }
196    void LuoPuu(Vector paikka, double leveys, double korkeus)
197    {
198        PhysicsObject puu = PhysicsObject.CreateStaticObject(leveys + 50, korkeus + 150, Shape.FromImage(puunkuva));
199        puu.IgnoresCollisionResponse = true;
200        puu.Position = paikka;
201        puu.Image = puunkuva;
202        Add(puu, 2);
203    }
204    void LisaaHirvio()
205    {
206        PhysicsObject hirvio = new PhysicsObject(30, 30);
207        hirvio.Position = HirvioSpawn.Position;
208        hirvio.Shape = Shape.FromImage(hirvionkuva);
209        hirvio.Image = hirvionkuva;
210        hirvio.CanRotate = true;
211        Add(hirvio);
212        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja,  pelaaja2);
213        seuraajanAivot.Speed = 50;
214        //   seuraajanAivot.DistanceFar = 60;         
215        //   seuraajanAivot.DistanceClose = 50;         
216        // seuraajanAivot.StopWhenTargetClose = true;
217        hirvio.Brain = seuraajanAivot;
218        hirvio.Tag = "hirvio";
219        AddCollisionHandler(hirvio, "pelaaja", törmää);
220        AddCollisionHandler(hirvio, "pelaaja2", törmää2);
221    }
222    void LisaaAmpuja()
223    {
224        PhysicsObject ampuja = new PhysicsObject(50, 50);
225        ampuja.Image = ampujankuva;
226        ampuja.Shape = Shape.FromImage(ampujankuva);
227
228
229        Add(ampuja);
230        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja, pelaaja2);
231        seuraajanAivot.Speed = 50;
232        //   seuraajanAivot.DistanceFar = 60;         
233        //   seuraajanAivot.DistanceClose = 50;         
234        // seuraajanAivot.StopWhenTargetClose = true;
235        seuraajanAivot.TurnWhileMoving = true;
236        ampuja.Brain = seuraajanAivot;
237        ampuja.Tag = "ampuja";
238        AddCollisionHandler(ampuja, "pelaaja", törmää);
239        AddCollisionHandler(ampuja, "pelaaja2", törmää2);
240        Timer ajastin3 = new Timer();
241        ajastin3.Interval = 3.5;
242        ajastin3.Timeout += delegate { LisaaNuoli(ampuja); };
243        ajastin3.Start();
244    }
245
246    void LisaaNuoli(PhysicsObject ampuja)
247    {
248        PhysicsObject nuoli = new PhysicsObject(20, 50);
249        ampuja.Throw(nuoli, Angle.FromDegrees(0), 500);
250        AddCollisionHandler(nuoli, "pelaaja", törmää);
251        nuoli.Width = 50;
252        nuoli.Height = 30;
253        nuoli.Image = nuolenkuva;
254        nuoli.MaximumLifetime = TimeSpan.FromSeconds(1.0);
255
256    }
257    void LuoelamaLaskuri()
258    {
259        elamalaskuri = new DoubleMeter(10);
260        elamalaskuri.MaxValue = 10;
261        elamalaskuri.LowerLimit += ElamaLoppui;
262
263
264        ProgressBar elamaPalkki = new ProgressBar(150, 20);
265        elamaPalkki.X = Screen.Left + 250;
266        elamaPalkki.Y = Screen.Top - 75;
267        elamaPalkki.Width = 300;
268        elamaPalkki.Height = 90;
269        elamaPalkki.BindTo(elamalaskuri);
270        Add(elamaPalkki);
271    }
272    void LuoelamaLaskuri2()
273    {
274        elamalaskuri2 = new DoubleMeter(10);
275        elamalaskuri2.MaxValue = 10;
276        elamalaskuri2.LowerLimit += ElamaLoppui2;
277
278
279        ProgressBar elamaPalkki2 = new ProgressBar(150, 20);
280        elamaPalkki2.X = Screen.Right - 250;
281        elamaPalkki2.Y = Screen.Top - 75;
282        elamaPalkki2.Width = 300;
283        elamaPalkki2.Height = 90;
284        elamaPalkki2.BindTo(elamalaskuri2);
285        Add(elamaPalkki2);
286    }
287
288    void törmää(PhysicsObject törmääjä, PhysicsObject kohde)
289    {
290        if (elamalaskuri.Value == 0) { pelaaja.Destroy(); }
291        else { elamalaskuri.Value -= 1; }
292
293
294    }
295    void törmää2(PhysicsObject törmääjä, PhysicsObject kohde)
296    {
297        if (elamalaskuri2.Value == 0) { pelaaja2.Destroy(); }
298        else { elamalaskuri2.Value -= 1; }
299    }
300    void törmää3(PhysicsObject törmääjä, PhysicsObject kohde)
301    {
302        kohde.Destroy();
303        pisteLaskuri.AddValue(1);
304    }
305    void ElamaLoppui()
306    {
307        MessageDisplay.Add("Game Over Player1");
308        ClearAll();
309        kenttanro = 0;
310        LuoKenttä();
311
312    }
313    void ElamaLoppui2()
314    {
315        MessageDisplay.Add("Game Over Player2");
316    }
317    void HeitaPuukko(PhysicsObject pelaaja)
318    {
319        PhysicsObject puukko = new PhysicsObject(20, 50);
320        pelaaja.Throw(puukko, Angle.FromDegrees(-90), 500);
321        AddCollisionHandler(puukko, "hirvio", törmää3);
322        AddCollisionHandler(puukko, "ampuja", törmää3);
323        puukko.Width = 50;
324        puukko.Height = 30;
325        puukko.Image = puukonkuva;
326        puukko.MaximumLifetime = TimeSpan.FromSeconds(1.0);
327
328    }
329    void AmmuTulta(PhysicsObject pelaaja)
330    {
331        if (!tulipallovalmis) return;
332        tulipallovalmis = false;
333        PhysicsObject pallo = new PhysicsObject(20, 50);
334        pelaaja.Throw(pallo, Angle.FromDegrees(-90), 700);
335        AddCollisionHandler(pallo, "hirvio", törmää3);
336        AddCollisionHandler(pallo, "ampuja", törmää3);
337        pallo.Width = 100;
338        pallo.Height = 100;
339        pallo.Image = pallonkuva;
340        pallo.MaximumLifetime = TimeSpan.FromSeconds(1.0);
341        Timer.SingleShot(3.5, delegate { tulipallovalmis = true; });
342
343    }
344
345}
Note: See TracBrowser for help on using the repository browser.