source: 2017/31/JohannesL/dodh2/dodh2/dodh2/dodh2.cs @ 9439

Revision 9439, 10.4 KB checked in by npo17_87, 23 months ago (diff)

Valmis valmis valmis valmis

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class dodh2 : PhysicsGame
10{
11    const double nopeus = 100;
12    const double hyppyNopeus = 700;
13    const int RUUDUN_KOKO = 10;
14
15
16    PlatformCharacter pelaaja1;
17
18    Image pelaajanKuva = LoadImage("snoopgas");
19    Image tahtiKuva = LoadImage("monkas");
20    Image vihaajakuva = LoadImage("vihaa");
21    Image rajahdyskuva = LoadImage("vihaa");
22    Image vihaaja2kuva = LoadImage("toinenmonk");
23    Image rajahdys2kuva = LoadImage("toinenmonk");
24    Image vihaaja3kuva = LoadImage("snoopgas");
25    SoundEffect maaliAani = LoadSoundEffect("Coin01");
26    Image valikkokuva = LoadImage("thumbnail");
27   
28
29    bool saakoRajahtaa = true;
30    bool saako2Rajahtaa = true;
31    bool saakospawnaa = true;
32   
33    public override void Begin()
34    {
35        Gravity = new Vector(0.0, -1400.0);
36
37       
38        LuoKentta();
39        LisaaNappaimet();
40        LuoAikaLaskuri();
41        vihaaja();
42        vihaaja2();
43        LuoPistelaskuri();
44        valikko();
45
46
47
48
49
50
51
52        Camera.Follow(pelaaja1);
53        Camera.ZoomFactor = 1.5;
54        Camera.StayInLevel = true;
55 
56    }
57
58    void LuoKentta()
59    {
60        TileMap kentta = TileMap.FromLevelAsset("kentta1");
61        kentta.SetTileMethod('#', LisaaTaso);
62        kentta.SetTileMethod('*', LisaaTahti);
63        kentta.SetTileMethod('N', LisaaPelaaja);
64        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
65        Level.CreateBorders();
66        Level.Background.CreateGradient(Color.Wheat, Color.ForestGreen);
67        MediaPlayer.Play("caravan");
68    }
69
70    void LisaaTaso (Vector paikka, double leveys, double korkeus)
71    {
72        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
73        taso.Position = paikka;
74        taso.Color = Color.Green;
75        Add(taso);
76    }
77
78    void LisaaTahti(Vector paikka, double leveys, double korkeus)
79    {
80        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
81        tahti.IgnoresCollisionResponse = true;
82        tahti.Position = paikka;
83        tahti.Image = tahtiKuva;
84        tahti.Tag = "tahti";
85
86
87
88
89        Add(tahti);
90    }
91
92    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
93    {
94        pelaaja1 = new PlatformCharacter(leveys, korkeus);
95        pelaaja1.Position = paikka;
96        pelaaja1.Mass = 4.0;
97        pelaaja1.Image = pelaajanKuva;
98        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
99        pelaaja1.Weapon = new AssaultRifle(10, 10);
100        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
101        Add(pelaaja1);
102    }
103
104    void LisaaNappaimet()
105    {
106        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
107        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
108
109        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
110        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
111        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
112
113        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
114
115        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
116        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
117        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
118        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
119
120        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
121    }
122
123    void Liikuta(PlatformCharacter hahmo, double nopeus)
124    {
125        pelaaja1.Walk(nopeus);
126    }
127
128    void Hyppaa(PlatformCharacter hahmo, double nopeus)
129    {
130        pelaaja1.Jump(nopeus);
131    }
132
133    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
134    {
135        maaliAani.Play();
136        MessageDisplay.Add("1 VIHAAJA LISÄTTY!");
137        tahti.Destroy();
138        pisteLaskuri.AddValue(1);
139        vihaaja3();
140       
141
142       
143
144    }
145    void LuoAikaLaskuri()
146    {
147        Timer aikaLaskuri = new Timer();
148        aikaLaskuri.Start();
149
150        Label aikaNaytto = new Label();
151        aikaNaytto.TextColor = Color.Black;
152        aikaNaytto.DecimalPlaces = 1;
153        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
154        Add(aikaNaytto);
155        aikaNaytto.X = 700.0;
156        aikaNaytto.Y = 450.0;
157    }
158    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
159    {
160        //ammus.Destroy();
161    }
162    void AmmuAseella(PlatformCharacter pelaaja)
163    {
164        PhysicsObject ammus = pelaaja.Weapon.Shoot();
165
166        if (ammus != null)
167        {
168            ammus.Size *= 0.5;
169            //ammus.Image =()
170            ammus.MaximumLifetime = TimeSpan.FromSeconds(5.0);
171
172        }
173
174
175    }
176    void vihaaja()
177    {
178        PhysicsObject vihaajaa = new PhysicsObject(20, 20);
179        vihaajaa.Shape = Shape.Rectangle;
180        vihaajaa.Mass = 10.0;
181        vihaajaa.Image = vihaajakuva;
182       
183        Add(vihaajaa);
184        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
185
186        seuraajanAivot.Speed = 100;                 // Millä nopeudella kohdetta seurataan
187        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
188        seuraajanAivot.DistanceClose = 50;         // Etäisyys jolloin ollaan lähellä kohdetta
189        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
190        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
191       
192        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
193        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
194        vihaajaa.Brain = seuraajanAivot;
195    }
196
197    void mitaTapahtuuKunOllaanLahella()
198    {
199        if (!saakoRajahtaa) return;
200        saakoRajahtaa = false;
201        Timer.SingleShot(5, () => { saakoRajahtaa = true; });
202
203        Explosion rajahdys = new Explosion(50);
204        rajahdys.Image = rajahdyskuva;   
205        rajahdys.Position = pelaaja1.Position;
206        rajahdys.Speed = 50;
207        rajahdys.Force = 5000;
208        Add(rajahdys);
209       
210    }
211    void vihaaja2()
212    {
213        PhysicsObject vihaaja2 = new PhysicsObject(5, 5);
214        vihaaja2.X = -100;
215        vihaaja2.Y = 100;
216        vihaaja2.Shape = Shape.Rectangle;
217        vihaaja2.Mass = 10.0;
218        vihaaja2.Image = vihaaja2kuva;
219
220        Add(vihaaja2);
221        FollowerBrain seuraajan2Aivot = new FollowerBrain(pelaaja1);
222
223        seuraajan2Aivot.Speed = 50;                 // Millä nopeudella kohdetta seurataan
224        seuraajan2Aivot.DistanceFar = 1200;           // Etäisyys jolla aletaan seurata kohdetta
225        seuraajan2Aivot.DistanceClose = 150;         // Etäisyys jolloin ollaan lähellä kohdetta
226        seuraajan2Aivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
227                                                     //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
228
229        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
230        seuraajan2Aivot.TargetClose += mitaKunOllaanLahella;
231        vihaaja2.Brain = seuraajan2Aivot;
232    }
233
234    void mitaKunOllaanLahella()
235    {
236        if (!saako2Rajahtaa) return;
237        saako2Rajahtaa = false;
238        Timer.SingleShot(15,() => { saako2Rajahtaa = true; });
239
240        Explosion rajahdys = new Explosion(150);
241        rajahdys.Image = rajahdys2kuva;
242        rajahdys.Position = pelaaja1.Position;
243        rajahdys.Speed = 5;
244        rajahdys.Force = 5000;
245        Add(rajahdys);
246
247    }
248    void valikko()
249    {
250        ClearAll();
251
252        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
253"Aloita peli", "Lopeta");
254        alkuValikko.Image = valikkokuva;
255        Add(alkuValikko);
256
257       
258        alkuValikko.AddItemHandler(0, alotapeli);
259        alkuValikko.AddItemHandler(1, Exit);
260       
261       
262    }
263    void alotapeli()
264    {
265        LuoKentta();
266        LisaaNappaimet();
267        LuoAikaLaskuri();
268        vihaaja();
269        vihaaja2();
270        LuoPistelaskuri();
271        Gravity = new Vector(0.0, -1400.0);
272
273
274        Camera.Follow(pelaaja1);
275        Camera.ZoomFactor = 1.5;
276        Camera.StayInLevel = true;
277
278
279    }
280    void vihaaja3()
281    {
282        PhysicsObject vihaaja3 = new PhysicsObject(10, 10); 
283        vihaaja3.X = -101;
284        vihaaja3.Y = 101;
285        vihaaja3.Shape = Shape.Diamond;
286        vihaaja3.Mass = 5.0;
287        vihaaja3.Image = vihaaja3kuva;
288
289        Add(vihaaja3);
290        FollowerBrain seuraajan3Aivot = new FollowerBrain(pelaaja1);
291
292        seuraajan3Aivot.Speed = 100;           // Millä nopeudella kohdetta seurataan
293        seuraajan3Aivot.DistanceFar = 1200;           // Etäisyys jolla aletaan seurata kohdetta
294        seuraajan3Aivot.DistanceClose = 10;         // Etäisyys jolloin ollaan lähellä kohdetta
295        seuraajan3Aivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
296                                                     //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
297
298        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
299        seuraajan3Aivot.TargetClose += mita;
300        vihaaja3.Brain = seuraajan3Aivot;
301    }
302    void mita()
303    {
304
305    /// if (!saakospawnaa) return;
306  ///   saakospawnaa = false;
307    /// Timer.SingleShot(5, () => { saakospawnaa = true; });
308       
309     ///   vihaaja3();
310    }
311
312    IntMeter pisteLaskuri;
313    void LuoPistelaskuri()
314    {
315        pisteLaskuri = new IntMeter(0, 0, 30);
316        pisteLaskuri.UpperLimit += () =>
317        {
318            valikko();
319        };
320
321        Label pisteNaytto = new Label();
322        pisteNaytto.X = Screen.Left + 100;
323        pisteNaytto.Y = Screen.Top - 100;
324        pisteNaytto.TextColor = Color.Black;
325        pisteNaytto.Color = Color.White;
326
327
328        pisteNaytto.BindTo(pisteLaskuri);
329        IntMeter laskuri = new IntMeter(0);
330        pisteNaytto.Title = "Vihaajia ";
331        Add(pisteNaytto);
332    }
333}
Note: See TracBrowser for help on using the repository browser.