source: 2017/utsjoki/JounaL/mailmanympäri/mailmanympäri/mailmanympäri/mailmanympäri.cs @ 9174

Revision 9174, 13.4 KB checked in by sieerinn, 23 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
9
10class PeliHahmo : PlatformCharacter
11{
12    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
13    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
14
15    public PeliHahmo(double leveys, double korkeus)
16        : base(leveys, korkeus)
17    {
18        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
19    }
20}
21
22class Olio : PhysicsObject
23{
24    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
25    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
26
27    public Olio(double leveys, double korkeus)
28        : base(leveys, korkeus)
29    {
30
31    }
32}
33
34public class mailmanympäri : PhysicsGame
35{
36    const double nopeus = 200;
37    const double hyppyNopeus = 750;
38    const int RUUDUN_KOKO = 40;
39
40    PeliHahmo pelaaja1;
41    Image olionKuva = LoadImage("olio");
42    Image pelaajanKuva = LoadImage("norsu");
43    Image tahtiKuva = LoadImage("tahti");
44    int ostoksiajäljellä = 10;
45    SoundEffect maaliAani = LoadSoundEffect("maali");
46    Vector aloituspaikka;
47    public override void Begin()
48    {
49        MultiSelectWindow alkuValikko = new MultiSelectWindow("mailmanympäri", "Aloita peli", "Lopeta");
50        alkuValikko.AddItemHandler(0, AloitaPeli);
51        alkuValikko.AddItemHandler(1, Exit);
52
53        Add(alkuValikko);
54    }
55 
56
57    void AloitaPeli()
58    {
59        MediaPlayer.Play("368392_electrodynamix");
60        MediaPlayer.IsRepeating = true;
61        Gravity = new Vector(0, -1000);
62        Mouse.IsCursorVisible = true;
63        LuoKentta();
64        LisaaNappaimet();
65        LuoPistelaskuri();
66        //LisaaAlkuvalikko();
67    }
68
69    void LuoKentta()
70    {
71        TileMap kentta = TileMap.FromLevelAsset("kentta1");
72        kentta.SetTileMethod('#', LisaaTaso);
73        kentta.SetTileMethod('A', LisaaPunainen);
74        kentta.SetTileMethod('*', LisaaTahti);
75        kentta.SetTileMethod('N', LisaaPelaaja);
76        kentta.SetTileMethod('F', LisaaOlio);
77        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
78        Level.CreateBorders();
79        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
80        Level.Background.Image = LoadImage("tausta");
81        Level.Background.FitToLevel();
82    }
83    void LisaaOlio(Vector paikka, double leveys, double korkeus)
84    {
85        Olio olio = new Olio(leveys * 2, korkeus * 2);
86        olio.Position = paikka;
87        olio.Color = Color.Red;
88        olio.Tag = "olio";
89        olio.Image = LoadImage("olio");
90
91        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
92        seuraajanAivot.Speed = 200;                 // Millä nopeudella kohdetta seurataan
93        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
94        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
95
96        //    seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
97
98        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
99        seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
100        olio.Brain = seuraajanAivot;
101        olio.Brain.Active = true;
102
103        olio.ElamaLaskuri.LowerLimit += delegate
104        {
105            olio.Destroy();
106
107            Explosion rajahdys = new Explosion(100);
108            rajahdys.Position = olio.Position;
109            rajahdys.Speed = 50;
110            Add(rajahdys);
111
112            LisaaTahti(olio.Position + RandomGen.NextVector(0, 20), 40, 40);
113            LisaaTahti(olio.Position + RandomGen.NextVector(0, 20), 40, 40);
114            LisaaTahti(olio.Position + RandomGen.NextVector(0, 20), 40, 40);
115            Timer.SingleShot(180, delegate
116            {
117                LisaaOlio(paikka, leveys, korkeus);
118            });
119        };
120
121        Add(olio);
122
123
124    }
125    // Aliohjelma joka ajetaan kun olio on tarpeeksi lähellä kohdetta.
126    void mitaTapahtuuKunOllaanLahella()
127    {
128        //  olio.Color = Color.Red;
129
130    }
131    void LisaaTaso(Vector paikka, double leveys, double korkeus)
132    {
133        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
134        taso.Position = paikka;
135        taso.Color = Color.Green;
136        Add(taso);
137        taso.Tag = "Taso";
138    }
139
140    void LisaaPunainen(Vector paikka, double leveys, double korkeus)
141    {
142        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
143        taso.Position = paikka;
144        taso.Color = Color.Red;
145        Add(taso);
146        taso.Tag = "Punainen";
147    }
148
149    void LisaaTahti(Vector paikka, double leveys, double korkeus)
150    {
151        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
152        tahti.IgnoresCollisionResponse = true;
153        tahti.Position = paikka;
154        tahti.Image = tahtiKuva;
155        tahti.Tag = "tahti";
156        Add(tahti);
157
158        Timer.SingleShot(5, tahti.Destroy);
159    }
160
161
162    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
163    {
164        pelaaja1 = new PeliHahmo(leveys, korkeus);
165        pelaaja1.Position = paikka;
166        pelaaja1.Mass = 4.0;
167        pelaaja1.StaticFriction = 0;
168        pelaaja1.KineticFriction = 0;
169        pelaaja1.Image = pelaajanKuva;
170        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
171        AddCollisionHandler(pelaaja1, "olio", Tormaaolioon);
172        AddCollisionHandler(pelaaja1, "Punainen", TormaaPunaiseen);
173        Add(pelaaja1);
174        aloituspaikka = paikka;
175
176        Camera.Follow(pelaaja1);
177        Camera.ZoomFactor = 1.2;
178        Camera.StayInLevel = true;
179    }
180    void Tormaaolioon(PhysicsObject pelaaja, PhysicsObject olio)
181    {
182        pelaaja1.ElamaLaskuri.Value -= 1;
183        if (pelaaja1.ElamaLaskuri.Value == 0) {/* LisaaPelaaja(aloituspaikka, RUUDUN_KOKO, RUUDUN_KOKO);LisaaNappaimet(); */ ClearAll(); Begin(); }
184    }
185    void LisaaNappaimet()
186    {
187        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
188        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
189
190        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
191        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
192        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
193
194        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
195
196        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
197        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
198        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
199
200        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
201        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Lyö, "");
202        Mouse.Listen(MouseButton.Right, ButtonState.Down, kiipeä, "");
203
204    }
205    void kiipeä()
206    {
207        int määrä = GetObjectsAt(pelaaja1.Position + pelaaja1.FacingDirection.GetVector() * pelaaja1.Width * 0.7 + new Vector(0,-40)).Count;
208        //MessageDisplay.Add(""+määrä);
209        if (määrä > 0)
210        {
211            pelaaja1.Y += 3;
212            //pelaaja1.X= (int)(pelaaja1.X / 40) * 40 - 20;
213            pelaaja1.ForceJump(100);
214            pelaaja1.Velocity = new Vector(0, 100);
215        }
216    }
217
218    void Liikuta(PlatformCharacter hahmo, double nopeus)
219    {
220        hahmo.Walk(nopeus);
221    }
222
223    void Hyppaa(PlatformCharacter hahmo, double nopeus)
224    {
225        hahmo.Jump(nopeus);
226    }
227
228    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
229    {
230        maaliAani.Play();
231        MessageDisplay.Add("Keräsit kolikon!");
232        tahti.Destroy();
233        pisteLaskuri.Value += 1;
234    }
235
236    void TormaaPunaiseen(PhysicsObject hahmo, PhysicsObject punainen)
237    {
238        hahmo.Destroy();ClearAll();
239        Begin();
240    }
241
242   
243
244    void Lyö()
245    {
246        PhysicsObject Lyönti = new PhysicsObject(30, 30);
247        Lyönti.Position = pelaaja1.Position + pelaaja1.FacingDirection.GetVector() * 40;
248        Add(Lyönti);
249        AddCollisionHandler(Lyönti, "Taso", lyöntiosuu);
250        AddCollisionHandler<PhysicsObject, Olio>(Lyönti, "olio", lyöntiosuuolioon);
251        Lyönti.LifetimeLeft = TimeSpan.FromSeconds(0.2);
252        Lyönti.IgnoresGravity = false;
253    }
254    void lyöntiosuuolioon(PhysicsObject lyönti, Olio olio)
255    {
256        olio.ElamaLaskuri.Value -= 1;
257    }
258    void lyöntiosuu(PhysicsObject lyönti, PhysicsObject Taso)
259    {
260        Taso.Destroy();
261        LisaaTahti(Taso.Position, 40, 40);
262
263        Timer.SingleShot(5, delegate
264        {
265            LisaaTaso(Taso.Position, 40, 40);
266        });
267       
268    }
269
270    IntMeter pisteLaskuri;
271
272    void LuoPistelaskuri()
273    {
274        pisteLaskuri = new IntMeter(0);
275        Label pisteNaytto = new Label();
276        pisteNaytto.X = Screen.Left + 100;
277        pisteNaytto.Y = Screen.Top - 100;
278        pisteNaytto.TextColor = Color.Red;
279        pisteNaytto.Color = Color.Green;
280
281        Label elamanaytto = new Label();
282        elamanaytto.X = Screen.Left + 100;
283        elamanaytto.Y = Screen.Top - 200;
284        elamanaytto.TextColor = Color.Azure;
285        elamanaytto.Color = Color.BloodRed;
286        elamanaytto.BindTo(pelaaja1.ElamaLaskuri);
287        Add(elamanaytto);
288
289        pisteNaytto.BindTo(pisteLaskuri);
290        Add(pisteNaytto);
291        PushButton osto = new PushButton("osta");
292        osto.Left = Screen.Left;
293        osto.Top = Screen.Top - 150;
294        Add(osto);
295        osto.Clicked += ostaminen;
296    }
297    void ostaminen()
298    {
299
300        if (pisteLaskuri.Value >= 10)
301        {
302            if (pelaaja1.ElamaLaskuri.Value < 10)
303            {
304                pelaaja1.ElamaLaskuri.Value += 1;
305                pisteLaskuri.Value -= 10;
306            }
307            else { MessageDisplay.Add("Max hp"); }
308        }
309        else
310        {
311            MessageDisplay.Add("ei ole rahaa");
312        }
313        {
314
315        }
316    }
317
318}
319
320/*pisteNaytto.BindTo(pistelaskuri);
321    Add(pisteNaytto);4
322IntMeter laskuri = new IntMeter(1)
323    IntMeter laskuri = new IntMeter(0, int.MinValue, int.MaxValue)
324    IntMeter laskuri = new IntMeter(10, -100, 100)
325    pisteNaytto.Title = "Pisteet";
326    pisteNaytto.IntFormatString = "Pisteitä: {0:D1}";
327    pisteLaskuri.Value += 1;
328    pisteLaskuri.Reset();
329    IntMeter keratytEsineet = new IntMeter(0);
330laskuri.MaxValue = 9999999999;
331laskuri.UpperLimit += KaikkiKeratty;
332    void KaikkiKeratty()
333{
334    MessageDisplay.Add("Pelaaja 1 voitti pelin.");
335}
336IntMeter pelaajanElamat = new IntMeter(3);
337laskuri.MinValue = 0;
338laskuri.LowerLimit += PelaajaHaviaa;
339    void PelaajaHaviaa()
340{
341    MessageDisplay.Add("Pelaaja 1 hävisi pelin.");
342}
343pisteLaskuri.AddTrigger(9000, TriggerDirection.Up, SoitaAani);
344...
345
346void SoitaAani()
347{
348    PlaySound("OVER NINE THOUSAND");
349}
350
351   
352void LuoAikaLaskuri()
353{
354    Timer aikaLaskuri = new Timer();
355    aikaLaskuri.Start();
356
357    Label aikaNaytto = new Label();
358    aikaNaytto.TextColor = Color.White;
359    aikaNaytto.DecimalPlaces = 1;
360    aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
361    Add(aikaNaytto);
362}
363double aikaaKulunut = aikaLaskuri.SecondCounter.Value;
364void LuoAikaLaskuri()
365{
366    Timer aikaLaskuri = new Timer();
367    aikaLaskuri.Interval = 5;
368    aikaLaskuri.Timeout += AikaLoppui;
369    aikaLaskuri.Start(1);
370
371    Label aikaNaytto = new Label();
372    aikaNaytto.TextColor = Color.White;
373    aikaNaytto.DecimalPlaces = 1;
374
375    aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
376    Add(aikaNaytto);
377}
378void AikaLoppui()
379{
380    MessageDisplay.Add("Aika loppui...");
381
382     // täydennä mitä tapahtuu, kun aika loppuu
383}
384DoubleMeter alaspainLaskuri;
385Timer aikaLaskuri;
386
387void LuoAikaLaskuri()
388{
389    alaspainLaskuri = new DoubleMeter(30);
390
391    aikaLaskuri = new Timer();
392    aikaLaskuri.Interval = 0.1;
393    aikaLaskuri.Timeout += LaskeAlaspain;
394    aikaLaskuri.Start();
395
396    Label aikaNaytto = new Label();
397    aikaNaytto.TextColor = Color.White;
398    aikaNaytto.DecimalPlaces = 1;
399    aikaNaytto.BindTo(alaspainLaskuri);
400    Add(aikaNaytto);
401}
402
403void LaskeAlaspain()
404{
405    alaspainLaskuri.Value -= 0.1;
406
407    if (alaspainLaskuri.Value <= 0)
408    {
409        MessageDisplay.Add("Aika loppui...");
410        aikaLaskuri.Stop();
411
412        // täydennä mitä tapahtuu, kun aika loppuu
413    }
414}*/
415
416
417//    Vihu hemmo = new Vihu(20, 20);
418//    hemmo.X = -100;
419//hemmo.Y = -100;
420//        // ...
421//hemmo.ElamaLaskuri.Value--;  // häviää automaattsiesti jos elämät menee 0:ksi.
422//        class Vihu : PhysicsObject
423//    {
424//        // vihun ominaisuuksia...
425//    }
426
427
428//    public class Peli : PhysicsGame
429//    {
430//        // Vanha tuttu Peli-luokka...
431//    }
432//    class PeliHahmo : GameObject
433//    {
434//        public int Elamat { get; set; }
435
436//        public PeliHahmo(double leveys, double korkeus, double elamia)
437//            : base(leveys, korkeus)
438//        {
439//            Elamat = elamia;
440//        }
441//    }
442//...
443//  PeliHahmo hemmo = new PeliHahmo(20, 20, 10); // koko 20,20, elämiä 3 kpl
444//...
445//  hemmo.Elamat--;
446//  if ( hemmo.Elamat <= 0 ) ... // jotakin kun elämät loppuu
447
448
449
450
451
452
453
454
455
456
457
Note: See TracBrowser for help on using the repository browser.