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

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