source: 2016/30/luennot/Tasoloikkailu/Tasoloikkailu/Tasoloikkailu/Tasoloikkailu.cs @ 8178

Revision 8178, 7.8 KB checked in by jotapoti, 3 years ago (diff)

kentta1 ja 2 toimivat. Kentan voi vaihtaa.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Tasoloikkailu : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14    const int minimikenttanumero = 1;
15    const int maksimikenttanumero = 2;
16
17    PlatformCharacter pelaaja1;
18
19    Image pelaajanKuva = LoadImage("norsu");
20    Image tahtiKuva = LoadImage("tahti");
21    Image miinanKuva = LoadImage("mine");
22    Image ohjeKuva = LoadImage("ohjeet");
23    SoundEffect maaliAani = LoadSoundEffect("maali");
24
25    int kenttanumero = 1;
26
27    public override void Begin()
28    {
29        ClearAll();
30
31        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
32"Aloita peli", "Peliohjeet", "Lopeta");
33        Add(alkuValikko);
34        alkuValikko.AddItemHandler(0, AloitaPeli);
35        alkuValikko.AddItemHandler(1, NaytaOhjeet);
36        alkuValikko.AddItemHandler(2, Exit);
37
38       
39    }
40
41    void NaytaOhjeet()
42    {
43        GameObject ohjeruutu = new GameObject(800.0, 600.0);
44        ohjeruutu.Image = ohjeKuva;
45        Add(ohjeruutu);
46        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Begin, "Palaa valikkoon");
47        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Begin, "Palaa valikkoon");
48        Keyboard.Listen(Key.Space, ButtonState.Pressed, Begin, "Palaa valikkoon");
49
50    }
51
52    void AloitaPeli()
53    {
54        ClearAll();
55        Gravity = new Vector(0, -1000);
56
57        LuoKentta();
58        LisaaNappaimet();
59
60        Camera.Follow(pelaaja1);
61        Camera.ZoomFactor = 1.2;
62        Camera.StayInLevel = true;
63    }
64
65    void LuoKentta()
66    {
67        // tarkistetaan kentän numeron oikeellisuus:
68        if (kenttanumero > maksimikenttanumero)
69        {
70            // TODO tee tähän voittoteksti äläkä aloita samaa viimeistä kenttää uusiksi!
71            kenttanumero = maksimikenttanumero;
72        }
73        if (kenttanumero < minimikenttanumero)
74        {
75            kenttanumero = minimikenttanumero;
76        }
77        // ladataan kenttä:
78        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttanumero);
79        kentta.SetTileMethod('#', LisaaTaso);
80        kentta.SetTileMethod('*', LisaaTahti);
81        kentta.SetTileMethod('N', LisaaPelaaja);
82        kentta.SetTileMethod('m', LisaaMiina);
83        kentta.SetTileMethod('O', LisaaOvi);
84        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
85        Level.CreateBorders();
86        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
87    }
88
89    void LisaaOvi(Vector paikka, double leveys, double korkeus)
90    {
91        // joko:
92        //PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
93       
94        // tai:
95        PhysicsObject ovi = new PhysicsObject(leveys, korkeus);
96        ovi.MakeStatic();
97
98
99        ovi.Position = paikka;
100        ovi.Tag = "ovi";
101        Add(ovi);
102    }
103
104    void LisaaMiina(Vector paikka, double leveys, double korkeus)
105    {
106        PhysicsObject miina = new PhysicsObject(leveys/3.0, korkeus/5.0);
107        miina.Position = paikka;
108        miina.Color = Color.Red;
109        miina.Image = miinanKuva;
110        miina.Tag = "miina";
111        Add(miina);
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    }
121
122    void LisaaTahti(Vector paikka, double leveys, double korkeus)
123    {
124        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
125        tahti.IgnoresCollisionResponse = true;
126        tahti.Position = paikka;
127        tahti.Image = tahtiKuva;
128        tahti.Tag = "tahti";
129        Add(tahti);
130    }
131
132    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
133    {
134        pelaaja1 = new PlatformCharacter(leveys, korkeus);
135        pelaaja1.Position = paikka;
136        pelaaja1.Mass = 4.0;
137        pelaaja1.Image = pelaajanKuva;
138        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
139        //AddCollisionHandler(pelaaja1, "miina", CollisionHandler.ExplodeTarget(300.0, true));
140        AddCollisionHandler(pelaaja1, "miina", RajaytaMiina);
141        AddCollisionHandler(pelaaja1, "ovi", MeneSeuraavaanKenttaan);
142        Add(pelaaja1);
143    }
144
145    void MeneSeuraavaanKenttaan(PhysicsObject pelaaja, PhysicsObject ovi)
146    {
147        // joko:
148        //kenttanumero += 1;
149        // tai:
150        kenttanumero++;
151        AloitaPeli();
152    }
153
154    void RajaytaMiina(PhysicsObject tormaaja, PhysicsObject miina)
155    {
156        int pMaxMaara = 999;
157        // Alustetaan räjähdysjärjestelmä
158        // Parametrit:
159        // * kuva: mitä tekstuuria räjähdyksen
160        //   hiukkasten halutaan käyttävän
161        // * pMaxMaara: räjähdyksen käyttämien
162        //   hiukkasten eli partikkeleiden maksimimäärä
163        ExplosionSystem rajahdys =
164          new ExplosionSystem(LoadImage("rajahdys"), pMaxMaara);
165        rajahdys.MinScale = 20.0;
166        rajahdys.MaxScale = 50.0;
167        rajahdys.MinRotationSpeed = 1.0;
168        rajahdys.MaxRotationSpeed = 20.0;
169        // Lisätään järjestelmä peliin
170        Add(rajahdys);
171
172        double x = miina.X;
173        double y = miina.Y;
174        int pMaara = 999;
175        // "Käynnistetään" räjähdys
176        rajahdys.AddEffect(x, y, pMaara);
177
178        miina.Destroy();
179    }
180    void LisaaNappaimet()
181    {
182        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
183        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
184
185        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, "Aloita peli alusta");
186        Keyboard.Listen(Key.F6, ButtonState.Pressed, delegate { MeneSeuraavaanKenttaan(null, null); }, "Seuraava kentta");
187
188        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
189        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
190        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
191
192        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
193
194        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
195        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
196        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
197
198        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
199    }
200
201    void Liikuta(PlatformCharacter hahmo, double nopeus)
202    {
203        hahmo.Walk(nopeus);
204    }
205
206    void Hyppaa(PlatformCharacter hahmo, double nopeus)
207    {
208        hahmo.Jump(nopeus);
209    }
210
211    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
212    {
213        maaliAani.Play();
214        MessageDisplay.Add("Keräsit tähden!");
215        tahti.Destroy();
216        int pMaxMaara = 200;
217        // Alustetaan räjähdysjärjestelmä
218        // Parametrit:
219        // * kuva: mitä tekstuuria räjähdyksen
220        //   hiukkasten halutaan käyttävän
221        // * pMaxMaara: räjähdyksen käyttämien
222        //   hiukkasten eli partikkeleiden maksimimäärä
223        ExplosionSystem rajahdys =
224          new ExplosionSystem(LoadImage("tahti"), pMaxMaara);
225
226        // Lisätään järjestelmä peliin
227        Add(rajahdys);
228
229        double x = tahti.X;
230        double y = tahti.Y;
231        int pMaara = 50;
232        // "Käynnistetään" räjähdys
233        rajahdys.AddEffect(x, y, pMaara);
234
235    }
236}
Note: See TracBrowser for help on using the repository browser.