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

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