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

Revision 8147, 6.3 KB checked in by jotapoti, 3 years ago (diff)

Ohjeruutu

RevLine 
[8146]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
15    PlatformCharacter pelaaja1;
16
17    Image pelaajanKuva = LoadImage("norsu");
18    Image tahtiKuva = LoadImage("tahti");
19    Image miinanKuva = LoadImage("mine");
[8147]20    Image ohjeKuva = LoadImage("ohjeet");
[8146]21    SoundEffect maaliAani = LoadSoundEffect("maali");
22
23    public override void Begin()
24    {
[8147]25        ClearAll();
[8146]26
27        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
[8147]28"Aloita peli", "Peliohjeet", "Lopeta");
[8146]29        Add(alkuValikko);
30        alkuValikko.AddItemHandler(0, AloitaPeli);
[8147]31        alkuValikko.AddItemHandler(1, NaytaOhjeet);
32        alkuValikko.AddItemHandler(2, Exit);
[8146]33
34       
35    }
36
[8147]37    void NaytaOhjeet()
38    {
39        GameObject ohjeruutu = new GameObject(800.0, 600.0);
40        ohjeruutu.Image = ohjeKuva;
41        Add(ohjeruutu);
42        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Begin, "Palaa valikkoon");
43        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Begin, "Palaa valikkoon");
44        Keyboard.Listen(Key.Space, ButtonState.Pressed, Begin, "Palaa valikkoon");
45
46    }
47
[8146]48    void AloitaPeli()
49    {
50        Gravity = new Vector(0, -1000);
51
52        LuoKentta();
53        LisaaNappaimet();
54
55        Camera.Follow(pelaaja1);
56        Camera.ZoomFactor = 1.2;
57        Camera.StayInLevel = true;
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('m', LisaaMiina);
67        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
68        Level.CreateBorders();
69        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
70    }
71
72    void LisaaMiina(Vector paikka, double leveys, double korkeus)
73    {
74        PhysicsObject miina = new PhysicsObject(leveys/3.0, korkeus/5.0);
75        miina.Position = paikka;
76        miina.Color = Color.Red;
77        miina.Image = miinanKuva;
78        miina.Tag = "miina";
79        Add(miina);
80    }
81
82    void LisaaTaso(Vector paikka, double leveys, double korkeus)
83    {
84        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
85        taso.Position = paikka;
86        taso.Color = Color.Green;
87        Add(taso);
88    }
89
90    void LisaaTahti(Vector paikka, double leveys, double korkeus)
91    {
92        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
93        tahti.IgnoresCollisionResponse = true;
94        tahti.Position = paikka;
95        tahti.Image = tahtiKuva;
96        tahti.Tag = "tahti";
97        Add(tahti);
98    }
99
100    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
101    {
102        pelaaja1 = new PlatformCharacter(leveys, korkeus);
103        pelaaja1.Position = paikka;
104        pelaaja1.Mass = 4.0;
105        pelaaja1.Image = pelaajanKuva;
106        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
107        //AddCollisionHandler(pelaaja1, "miina", CollisionHandler.ExplodeTarget(300.0, true));
108        AddCollisionHandler(pelaaja1, "miina", RajaytaMiina);
109        Add(pelaaja1);
110    }
111
112    void RajaytaMiina(PhysicsObject tormaaja, PhysicsObject miina)
113    {
114        int pMaxMaara = 999;
115        // Alustetaan räjähdysjärjestelmä
116        // Parametrit:
117        // * kuva: mitä tekstuuria räjähdyksen
118        //   hiukkasten halutaan käyttävän
119        // * pMaxMaara: räjähdyksen käyttämien
120        //   hiukkasten eli partikkeleiden maksimimäärä
121        ExplosionSystem rajahdys =
122          new ExplosionSystem(LoadImage("rajahdys"), pMaxMaara);
123        rajahdys.MinScale = 20.0;
124        rajahdys.MaxScale = 50.0;
125        rajahdys.MinRotationSpeed = 1.0;
126        rajahdys.MaxRotationSpeed = 20.0;
127        // Lisätään järjestelmä peliin
128        Add(rajahdys);
129
130        double x = miina.X;
131        double y = miina.Y;
132        int pMaara = 999;
133        // "Käynnistetään" räjähdys
134        rajahdys.AddEffect(x, y, pMaara);
135    }
136    void LisaaNappaimet()
137    {
138        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
139        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
140
141        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
142        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
143        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
144
145        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
146
147        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
148        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
149        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
150
151        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
152    }
153
154    void Liikuta(PlatformCharacter hahmo, double nopeus)
155    {
156        hahmo.Walk(nopeus);
157    }
158
159    void Hyppaa(PlatformCharacter hahmo, double nopeus)
160    {
161        hahmo.Jump(nopeus);
162    }
163
164    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
165    {
166        maaliAani.Play();
167        MessageDisplay.Add("Keräsit tähden!");
168        tahti.Destroy();
169        int pMaxMaara = 200;
170        // Alustetaan räjähdysjärjestelmä
171        // Parametrit:
172        // * kuva: mitä tekstuuria räjähdyksen
173        //   hiukkasten halutaan käyttävän
174        // * pMaxMaara: räjähdyksen käyttämien
175        //   hiukkasten eli partikkeleiden maksimimäärä
176        ExplosionSystem rajahdys =
177          new ExplosionSystem(LoadImage("tahti"), pMaxMaara);
178
179        // Lisätään järjestelmä peliin
180        Add(rajahdys);
181
182        double x = tahti.X;
183        double y = tahti.Y;
184        int pMaara = 50;
185        // "Käynnistetään" räjähdys
186        rajahdys.AddEffect(x, y, pMaara);
187
188    }
189}
Note: See TracBrowser for help on using the repository browser.