source: 2016/24/HenriH/PerunanIhmeellisetSeikkailut/PerunanIhmeellisetSeikkailut/PerunanIhmeellisetSeikkailut/PerunanIhmeellisetSeikkailut.cs @ 7415

Revision 7415, 8.6 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 PerunanIhmeellisetSeikkailut : PhysicsGame
10{
11    const double nopeus = 300;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    Vector aloituspaikka;
17
18    Image pelaajanKuva = LoadImage("perunaa");
19    Image tahtiKuva = LoadImage("tahti");
20    Image HodariKuva = LoadImage("hodari");
21    Image TykkiKuva = LoadImage("tykki");
22    Image avainkuva = LoadImage("avain");
23    Image Maalikuva = LoadImage("maalikuva");
24
25    SoundEffect maaliAani = LoadSoundEffect("maali");
26    int scrollausnopeus = -5;
27    bool peliPaattynyt = false;
28
29    List<GameObject> taustakuvat;
30    Timer taustaAjastin = new Timer();
31    GameObject ekaTaustakuva;
32    public override void Begin()
33    {
34        Gravity = new Vector(0, -1000);
35
36        LuoKentta();
37        LisaaNappaimet();
38
39        Camera.Follow(pelaaja1);
40        Camera.ZoomFactor = 1.2;
41        Camera.StayInLevel = true;
42    }
43
44    void LuoKentta()
45    {
46        TileMap kentta = TileMap.FromLevelAsset("kentta1");
47        kentta.SetTileMethod('#', LisaaTaso);
48        kentta.SetTileMethod('*', LisaaTahti);
49        kentta.SetTileMethod('N', LisaaPelaaja);
50        kentta.SetTileMethod('H', LisaaHodari);
51        kentta.SetTileMethod('T', LisaaTykki);
52        kentta.SetTileMethod('A', LisaaAvain);
53        kentta.SetTileMethod('M', Lisaamaali);
54        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
55
56        Level.CreateBorders();
57        Level.Background.CreateGradient(Color.DarkRed, Color.Black);
58    }
59    void Lisaamaali(Vector paikka, double leveys, double korkeus)
60    {
61        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
62        taso.Position = paikka;
63        taso.Image = Maalikuva;
64        taso.Tag = "maali";
65        Add(taso);
66    }
67    void LisaaTaso(Vector paikka, double leveys, double korkeus)
68    {
69        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
70        taso.Position = paikka;
71        taso.Color = Color.AshGray;
72        Add(taso);
73    }
74    void LisaaTykki(Vector paikka, double leveys, double korkeus)
75    {
76        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
77
78        tahti.Position = paikka;
79        tahti.Image = TykkiKuva;
80        tahti.Tag = "tykki";
81        Add(tahti);
82        tahti.CollisionIgnoreGroup = 2;
83
84        Timer ajastin = new Timer();
85        ajastin.Interval = 5.5;
86        ajastin.Timeout += delegate
87        {
88            PhysicsObject tykinkuula = new PhysicsObject(30, 30);
89            tykinkuula.Position = tahti.Position+new Vector(-50,0);
90            tykinkuula.Shape = Shape.Circle;
91            tykinkuula.CollisionIgnoreGroup = 2;
92            tykinkuula.IgnoresGravity = true;
93            tykinkuula.Velocity = new Vector(-100, 0);
94            tykinkuula.Tag = "hodari";
95            Add(tykinkuula);
96            AddCollisionHandler(tykinkuula, CollisionHandler.DestroyObject);
97            tykinkuula.Color = Color.Gray;
98        };
99        ajastin.Start();
100
101    }
102   
103    void LisaaHodari(Vector paikka, double leveys, double korkeus)
104    {
105        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
106
107        tahti.Position = paikka;
108        tahti.Image = HodariKuva;
109        tahti.Tag = "hodari";
110        Add(tahti);
111
112
113    }
114    void LisaaTahti(Vector paikka, double leveys, double korkeus)
115    {
116        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
117        tahti.IgnoresCollisionResponse = true;
118        tahti.Position = paikka;
119        tahti.Image = tahtiKuva;
120        tahti.Tag = "tahti";
121        Add(tahti);
122    }
123
124
125    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
126    {
127        pelaaja1 = new PlatformCharacter(leveys, korkeus);
128        pelaaja1.Position = paikka;
129        aloituspaikka = paikka;
130        pelaaja1.Mass = 4.0;
131        pelaaja1.Image = pelaajanKuva;
132        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
133        AddCollisionHandler(pelaaja1, "hodari", TormaaHodariin);
134        AddCollisionHandler(pelaaja1, "maali", TormaaMaaliin);
135        Add(pelaaja1);
136        AddCollisionHandler(pelaaja1, "avain", TormaaAvaimeen);
137    }
138
139    void LisaaNappaimet()
140    {
141        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
142        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
143
144        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
145        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
146        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
147
148        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
149
150        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
151        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
152        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
153
154        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
155    }
156
157    void Liikuta(PlatformCharacter hahmo, double nopeus)
158    {
159        hahmo.Walk(nopeus);
160    }
161
162    void Hyppaa(PlatformCharacter hahmo, double nopeus)
163    {
164        hahmo.Jump(nopeus);
165    }
166    bool onkoTormannyt = false;
167
168    void TormaaHodariin(PhysicsObject hahmo, PhysicsObject hodari)
169    {
170        if (onkoTormannyt) return;
171        onkoTormannyt = true;
172
173        aloitetaankoAlusta();
174   
175    }
176    void aloitetaankoAlusta()
177    {
178        MultiSelectWindow ikkuna = new MultiSelectWindow("haluatko pelata uudelleen?", "kyllä", "ei");
179        ikkuna.AddItemHandler(0, aloitaAlusta);
180        ikkuna.AddItemHandler(1, Exit);
181        Add(ikkuna);
182
183    }
184    void TormaaAvaimeen(PhysicsObject hahmo, PhysicsObject avain)
185    {
186        avain.Destroy();
187
188    }
189    void TormaaMaaliin(PhysicsObject hahmo, PhysicsObject avain)
190    {
191
192       if(GetObjects(x => (string)x.Tag == "avain").Count > 0) return;
193
194        MessageDisplay.Add("Pääsit maaliin!");
195        aloitetaankoAlusta();
196
197    }
198    void LisaaAvain(Vector paikka,Double leveys, Double korkeus)
199    {
200        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
201
202        tahti.Position = paikka;
203        tahti.Image = avainkuva;
204        tahti.Tag = "avain";
205        Add(tahti);
206
207    }
208    void aloitaAlusta()
209    {
210
211        pelaaja1.Position = aloituspaikka;
212        onkoTormannyt = false;
213
214    }
215    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
216    {
217        maaliAani.Play();
218        MessageDisplay.Add("Keräsit tähden!");
219        tahti.Destroy();
220    }
221    void LuoTaustakuvat()
222    {
223        taustaAjastin = new Timer();
224        taustaAjastin.Interval = 0.01;   // tällä voit myös säätää nopeutta
225        taustaAjastin.Timeout += LiikutaTaustaa;
226        taustaAjastin.Start();
227
228        taustakuvat = new List<GameObject>();
229        LisaaTaustakuva("kuva1", 300, 300);
230        LisaaTaustakuva("kuva2", 300, 300);
231        LisaaTaustakuva("kuva3", 300, 300);
232        LisaaTaustakuva("kuva4", 300, 300);
233    }
234
235    void LisaaTaustakuva(string nimi, double leveys, double korkeus)
236    {
237        GameObject olio = new GameObject(leveys, korkeus);
238        olio.Image = LoadImage(nimi);
239        olio.X = 0;
240        Add(olio);
241
242        if (taustakuvat.Count > 0)
243        {
244            olio.Top = taustakuvat[taustakuvat.Count - 1].Bottom;
245            if (scrollausnopeus >= 0) ekaTaustakuva = olio;
246        }
247        else
248        {
249            olio.Top = Level.Top;
250            if (scrollausnopeus < 0) ekaTaustakuva = olio;
251        }
252
253        taustakuvat.Add(olio);
254    }
255
256    void LiikutaTaustaa()
257    {
258        foreach (GameObject taustakuva in taustakuvat)
259        {
260            taustakuva.Y += scrollausnopeus;
261
262            if (scrollausnopeus < 0 && taustakuva.Top < Level.Bottom)
263            {
264                taustakuva.Bottom = ekaTaustakuva.Top;
265                ekaTaustakuva = taustakuva;
266            }
267            else if (scrollausnopeus > 0 && taustakuva.Bottom > Level.Top)
268            {
269                taustakuva.Top = ekaTaustakuva.Bottom;
270                ekaTaustakuva = taustakuva;
271            }
272        }
273    }
274
275}
Note: See TracBrowser for help on using the repository browser.