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

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