source: 2016/24/MikoA/LukanSeikkailu/LukanSeikkailu/LukanSeikkailu/LukanSeikkailu.cs @ 7406

Revision 7406, 9.5 KB checked in by karkaite, 6 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
9public class LukanSeikkailu : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    bool OnkoAvainKerätty = false;
17
18    Image pelaajanKuva = LoadImage("kylpytakkiupng");
19    Image VarjonKuva = LoadImage("kylpytakkiVARJO");
20    Image pohjanKuva = LoadImage("Guide");
21    Image PahisKuva = LoadImage("undead");
22    Image BlokkiKuva = LoadImage("Blokki");
23    Image VihollinenKuva = LoadImage("Vihollinen");
24    Image AvainKuva = LoadImage("Avain");
25    Image AvaimenreikäKuva = LoadImage("Avaimenreikä");
26    SoundEffect maaliAani = LoadSoundEffect("maali");
27    Image taustakuva = LoadImage("TaustaPuisto");
28    SoundEffect HyppyAani = LoadSoundEffect("Jump");
29    SoundEffect AvainAani = LoadSoundEffect("Pickup_Coin");
30    SoundEffect FailAani = LoadSoundEffect("Fail");
31    SoundEffect TappoAani = LoadSoundEffect("Tappo");
32    public override void Begin()
33    {
34        ClearAll();
35        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
36"Aloita peli","Peliohjeet", "Lopeta");
37        Add(alkuValikko);
38        MediaPlayer.Play("Taustamusiikki");
39        MediaPlayer.IsRepeating = true;
40        alkuValikko.Color = Color.LightGreen;
41        alkuValikko.SetButtonTextColor(Color.Orange);
42        alkuValikko.SetButtonColor(Color.Blue);
43        alkuValikko.AddItemHandler(0, AloitaPeli);
44        alkuValikko.AddItemHandler(1, Peliohjeet);
45        alkuValikko.AddItemHandler(2, Exit);
46
47    }
48    void Peliohjeet()
49    {
50        IsMouseVisible = true;
51        List<Widget> jutut = new List<Widget>();
52        string[] tekstit = { "Liikkuminen: Nuolinäppäimistä", "Tehtävä: Ota avain spacebarista, sitten yritä päästä avaimenreiän luo ja paina spacebaria voittaaksesi",
53        "Viholliset: Kuolet jos osut vihreään viholliseen sivulta, mutta jos hyppäät sen päälle niin se kuolee.",
54        "Pinkki pallo ei ole niin kiltti, jos osut siihen niin kuolet, mutta sitä ei voi tappaa",
55            "Yritä saada Luka kotiin turvallisesti" };
56        Label pohja = new Label(Screen.Width * 0.85, Screen.Height * 0.85);
57        pohja.Image = pohjanKuva;
58        Add(pohja);
59        jutut.Add(pohja);
60        Vector okPosition = pohja.Position - new Vector(0, pohja.Height * 0.40);
61
62        for (int i = 0; i < tekstit.Length; i++)
63        {
64            Label teksti = new Label(tekstit[i]);
65            teksti.Y = pohja.Top - 100 - i * (pohja.Height + okPosition.Y) / tekstit.Length;
66            teksti.TextColor = Color.Blue;
67            teksti.TextScale = new Vector(1.2, 1.4);
68            Add(teksti);
69            jutut.Add(teksti); 
70        }
71
72
73        PushButton ok = new PushButton("Ok");
74        jutut.Add(ok);
75        ok.Position = okPosition;
76        ok.Clicked += delegate {
77            foreach (var item in jutut)
78            {
79                item.Destroy();
80            }
81            IsMouseVisible = false;
82            Begin();
83        };
84        Add(ok);
85
86    }
87    void AloitaPeli()
88    {
89        ClearAll();
90        Gravity = new Vector(0, -1000);
91
92        LuoKentta();
93        LisaaNappaimet();
94
95        Camera.Follow(pelaaja1);
96        Camera.ZoomFactor = 1.2;
97        Camera.StayInLevel = true;
98
99       
100    }
101    void LuoKentta()
102    {
103        OnkoAvainKerätty = false;
104        TileMap kentta = TileMap.FromLevelAsset("kentta1");
105        kentta.SetTileMethod('#', LisaaTaso);
106        kentta.SetTileMethod('*', LisaaVihollinen);
107        kentta.SetTileMethod('N', LisaaPelaaja);
108        kentta.SetTileMethod('&', LisaaAvain);
109        kentta.SetTileMethod('+', LaitaAvain);
110        kentta.SetTileMethod('1', LisaaPahis);
111        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
112        Level.CreateBorders();
113        Level.Background.Image = taustakuva;
114        Level.Background.FitToLevel();
115    }
116
117    void LisaaTaso(Vector paikka, double leveys, double korkeus)
118    {
119        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
120        taso.Position = paikka;
121        taso.Image = BlokkiKuva;
122        Add(taso);
123    }
124    void LisaaAvain(Vector paikka, double leveys, double korkeus)
125    {
126        PhysicsObject Avain = PhysicsObject.CreateStaticObject(leveys *2.2, korkeus *2);
127        Avain.Position = paikka + new Vector (20, -18);
128        Avain.CollisionIgnoreGroup = 2;
129        Add(Avain);
130        Avain.Image = AvainKuva;
131        Avain.Tag = "Avain";
132    }
133    void LaitaAvain(Vector paikka, double leveys, double korkeus)
134    {
135        PhysicsObject Avaimenreikä = PhysicsObject.CreateStaticObject(leveys *5.7, korkeus *4.06);
136        Avaimenreikä.Position = paikka + new Vector(3, 5);
137        Avaimenreikä.CollisionIgnoreGroup = 2;
138        Add(Avaimenreikä, -1);
139        Avaimenreikä.Image = AvaimenreikäKuva;
140        Avaimenreikä.Tag = "Avaimenreikä";
141    }
142    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
143    {
144        PlatformCharacter Vihollinen =  new PlatformCharacter(leveys, korkeus);
145        Vihollinen.Position = paikka;
146        Vihollinen.Image = VihollinenKuva;
147        Vihollinen.MirrorImage();
148        Vihollinen.Tag = "Vihollinen";
149        Add(Vihollinen);
150        PlatformWandererBrain aivot = new PlatformWandererBrain();
151        Vihollinen.Brain = aivot;
152    }
153
154    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
155    {
156        pelaaja1 = new PlatformCharacter(leveys * 1, korkeus * 1.9);
157        pelaaja1.Shape = Shape.FromImage(VarjonKuva);
158        pelaaja1.Position = paikka;
159        pelaaja1.CollisionIgnoreGroup = 2;
160        pelaaja1.Mass = 4.0;
161        pelaaja1.Image = pelaajanKuva;
162        AddCollisionHandler(pelaaja1, "Vihollinen", TormaaViholliseen);
163        Add(pelaaja1);
164        AddCollisionHandler(pelaaja1, "Pahis", TormaaPahikseen);
165    }
166    void TormaaPahikseen(PhysicsObject Pelaaja, PhysicsObject Vihollinen)
167    {
168            Pelaaja.Destroy();
169            MessageDisplay.Add("Kuolit!......LOL");
170            KysyAloitetaankoAlusta();
171    }
172    void KysyAloitetaankoAlusta()
173    {
174        MultiSelectWindow valikko = new MultiSelectWindow("Haluatko pelata uudelleen?", "Kyllä", "Ei");
175        Add(valikko);
176        valikko.AddItemHandler(0, AloitaPeli);
177        valikko.AddItemHandler(1, Begin);
178    }
179    void LisaaPahis(Vector paikka, double leveys, double korkeus)
180    {
181        PhysicsObject Pahis = new PhysicsObject(leveys, korkeus);
182        Pahis.Position = paikka+new Vector(0,-21);
183        Pahis.Image = PahisKuva;
184        Pahis.Tag = "Pahis";
185        Add(Pahis);
186        PathFollowerBrain aivot = new PathFollowerBrain(100, Pahis.Position + new Vector(-540, 0),Pahis.Position);
187        aivot.Loop = true;
188        Pahis.Brain = aivot;
189        Pahis.IgnoresGravity = true;
190    }
191    void LisaaNappaimet()
192    {
193        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
194        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
195        Keyboard.Listen(Key.Space, ButtonState.Pressed, OtaAvain, "Avain katoaa");
196        Keyboard.Listen(Key.Space, ButtonState.Pressed, LaitaAvain, "Avaimenreika katoaa");
197
198        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
199        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
200        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
201
202        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
203
204        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
205        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
206        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
207
208        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
209    }
210
211    void Liikuta(PlatformCharacter hahmo, double nopeus)
212    {
213        hahmo.Walk(nopeus);
214    }
215
216    void Hyppaa(PlatformCharacter hahmo, double nopeus)
217    {
218        hahmo.Jump(nopeus);
219        HyppyAani.Play();
220    }
221
222    void OtaAvain()
223    {
224        List<GameObject> avaimet = GetObjectsAt(pelaaja1.Position, "Avain", 105);
225        if (avaimet.Count == 0) return;
226        avaimet[0].Destroy();
227        maaliAani.Play();
228        MessageDisplay.Add("Sait avaimen!");
229        OnkoAvainKerätty = true;
230        AvainAani.Play();
231    }
232
233    void TormaaViholliseen(PhysicsObject Pelaaja, PhysicsObject Vihollinen)
234    {
235
236        Vector erotus = new Vector(Pelaaja.X, Pelaaja.Bottom) - Vihollinen.Position;
237        if (erotus.Y > 0 && erotus.Y > Math.Abs(erotus.X) * 0.5)
238        {
239            Vihollinen.Destroy();
240            TappoAani.Play();
241        }
242        else
243        {
244            Pelaaja.Destroy();
245            MessageDisplay.Add("Kuolit!......LOL");
246            FailAani.Play();
247            KysyAloitetaankoAlusta();
248        }
249
250    }
251    void LaitaAvain()
252    {
253        List<GameObject> avaimenreiät = GetObjectsAt(pelaaja1.Position, "Avaimenreikä", 100);
254        if (avaimenreiät.Count == 0 || !OnkoAvainKerätty) return;
255        avaimenreiät[0].Destroy();
256        MessageDisplay.Add("Pääsit kentän!");
257        Timer.SingleShot(2.0, Begin);
258    }
259   
260}
Note: See TracBrowser for help on using the repository browser.