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

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