source: 2016/24/EveliinaL/Space_Run/Space_Run/Space_Run/Space_Run.cs @ 7413

Revision 7413, 10.0 KB checked in by evsulens, 3 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 Space_Run : PhysicsGame
10{
11   
12    private Image[] SpacemanRun = LoadImages("1", "2", "3", "4");
13    private Animation SpacemanRunAnimaatio;
14    private Animation AlienRunAnimaatio;
15    private Animation SpacemanPunch;
16    const double nopeus = 200;
17    const double hyppyNopeus = 750;
18    const int RUUDUN_KOKO = 40;
19
20    EasyHighScore topLista = new EasyHighScore();
21
22    PlatformCharacter pelaaja1;
23
24    IntMeter pisteLaskuri;
25
26    Image pelaajanKuva = LoadImage("Spaceman");
27    Image alienKuva = LoadImage("Alien");
28    Image taustakuva = LoadImage("Space");
29    Image kultaharkkoKuva = LoadImage("Kultaharkko");
30    Image laavaKuva = LoadImage("Laava");
31    Image maaliKuva = LoadImage("MaaliLippu");
32    Image SpaceRunBackground = LoadImage("SpaceRunImage");
33    SoundEffect maaliAani = LoadSoundEffect("maali");
34
35    public override void Begin()
36    {
37        topLista.HighScoreWindow.Closed += delegate { AlkuValikko(); };
38        Level.Background.Image = SpaceRunBackground;
39        AlkuValikko();
40    }
41    void AlkuValikko()
42    {
43        MultiSelectWindow alkuValikko = new MultiSelectWindow("", "Aloita peli", "Parhaat pisteet", "Näytä ohjeet", "Exit");
44        alkuValikko.AddItemHandler(0, AloitaPeli);
45        alkuValikko.AddItemHandler(1, ParhaatPisteet);
46        alkuValikko.AddItemHandler(2, NaytaOhjeet);
47        alkuValikko.AddItemHandler(3, Exit);
48        Add(alkuValikko);
49        alkuValikko.Color = Color.DarkBlue;
50    }
51
52    void AloitaPeli()
53    {
54        SpacemanRunAnimaatio = LoadAnimation("SpacemanRun");
55        AlienRunAnimaatio = LoadAnimation("AlienRun");
56        SpacemanPunch = LoadAnimation("SpacemanPunch");
57        Gravity = new Vector(0, -1000);
58
59        LuoKentta();
60        LisaaNappaimet();
61        LuoPisteLaskuri();
62        Camera.Follow(pelaaja1);
63        Camera.ZoomFactor = 1.2;
64        Camera.StayInLevel = true;
65
66    }
67    void LuoKentta()
68    {
69        TileMap kentta = TileMap.FromLevelAsset("kentta1");
70        kentta.SetTileMethod('#', LisaaTaso);
71        kentta.SetTileMethod('*', LisaaAlien);
72        kentta.SetTileMethod('N', LisaaPelaaja);
73        kentta.SetTileMethod('-', LisaaKultaharkko);
74        kentta.SetTileMethod('_', LisaaLaava);
75        kentta.SetTileMethod('M', LisaaMaali);
76        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
77        Level.CreateBorders();
78        Level.Background.Image = taustakuva;
79    }
80
81    void LisaaTaso(Vector paikka, double leveys, double korkeus)
82    {
83        PhysicsObject taso = PhysicsObject.CreateStaticObject(40, 40);
84        taso.Position = paikka;
85        taso.Color = Color.Gray;
86        Add(taso);
87    }
88
89    void LisaaAlien(Vector paikka, double leveys, double korkeus)
90    {
91        PlatformCharacter Alien = new PlatformCharacter(leveys, korkeus);
92        Alien.Position = paikka;
93        Alien.Image = alienKuva;
94        Alien.MirrorImage();
95        Alien.Tag = "Alien";
96        Alien.AnimWalk = AlienRunAnimaatio;
97        AlienRunAnimaatio.FPS = 4;
98        Add(Alien);
99        PlatformWandererBrain aivot = new PlatformWandererBrain();
100        Alien.Brain = aivot;
101    }
102
103    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
104    {
105        pelaaja1 = new PlatformCharacter(leveys, korkeus);
106        pelaaja1.Position = paikka;
107        pelaaja1.Mass = 4.0;
108        pelaaja1.Image = pelaajanKuva;
109        AddCollisionHandler(pelaaja1, "Alien", TormaaAlieniin);
110        AddCollisionHandler(pelaaja1, "Laava", TormaaLaavaan);
111        AddCollisionHandler(pelaaja1, "Kultaharkko", TormaaKultaan);
112        AddCollisionHandler(pelaaja1, "MaaliLippu", PaaseeMaaliin);
113        SpacemanRunAnimaatio.FPS = 8;
114        Add(pelaaja1);
115        pelaaja1.AnimWalk = SpacemanRunAnimaatio;
116        pelaaja1.AnimIdle = new Animation(pelaajanKuva);
117    }
118
119    void LisaaKultaharkko(Vector paikka, double leveys, double korkeus)
120    {
121        PhysicsObject Kultaharkko = PhysicsObject.CreateStaticObject(leveys, korkeus);
122        Kultaharkko.IgnoresCollisionResponse = true;
123        Kultaharkko.Position = paikka;
124        Kultaharkko.Image = kultaharkkoKuva;
125        Kultaharkko.Tag = "Kultaharkko";
126        Add(Kultaharkko);
127    }
128    void LisaaNappaimet()
129    {
130        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
131        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
132
133        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
134        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
135        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
136        Keyboard.Listen(Key.F, ButtonState.Pressed, Lyo, null);
137        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
138
139        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
140
141        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
142        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
143        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
144
145        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
146    }
147   
148    void Lyo()
149    {
150        if (SpacemanPunch.IsPlaying) return;
151        SpacemanPunch.FPS = 15;
152        SpacemanPunch.Start();
153        SpacemanPunch.StopOnLastFrame = true;
154        pelaaja1.PlayAnimation(SpacemanPunch);
155        List<GameObject> viholliset = GetObjectsAt(pelaaja1.Position + new Vector(pelaaja1.FacingDirection == Direction.Right ? 15 : -15, 0), "Alien", 25);
156        foreach (var item in viholliset)
157        {
158            item.Destroy();
159            pisteLaskuri.Value += 5;
160        }
161    }
162
163    void Liikuta(PlatformCharacter hahmo, double nopeus)
164    {
165        hahmo.Walk(nopeus);
166    }
167
168    void Hyppaa(PlatformCharacter hahmo, double nopeus)
169    {
170        hahmo.Jump(nopeus);
171    }
172
173    void TormaaAlieniin(PhysicsObject hahmo, PhysicsObject alien)
174    {
175        hahmo.Destroy();
176        HaviaaPelin();
177    }
178    void TormaaKultaan(PhysicsObject hahmo, PhysicsObject Kultaharkko)
179    {
180        Kultaharkko.Destroy();
181        pisteLaskuri.Value += 100;
182    }
183
184    void LuoPisteLaskuri()
185    {
186        pisteLaskuri = new IntMeter(0);
187
188        Label pisteNaytto = new Label();
189        pisteNaytto.X = Screen.Left + 100;
190        pisteNaytto.Y = Screen.Top - 100;
191        pisteNaytto.TextColor = Color.Black;
192        pisteNaytto.Color = Color.LightGreen;
193
194        pisteNaytto.BindTo(pisteLaskuri);
195        Add(pisteNaytto);
196    }
197    void LisaaLaava(Vector paikka, double leveys, double korkeus)
198    {
199        PhysicsObject Laava = PhysicsObject.CreateStaticObject(leveys, korkeus);
200        Laava.IgnoresCollisionResponse = true;
201        Laava.Position = paikka;
202        Laava.Image = laavaKuva;
203        Laava.Tag = "Laava";
204        Add(Laava);
205    }
206    void TormaaLaavaan(PhysicsObject hahmo, PhysicsObject Laava)
207    {
208        hahmo.Destroy();
209        HaviaaPelin();
210    }
211    void LisaaMaali(Vector paikka, double leveys, double korkeus)
212    {
213        PhysicsObject MaaliLippu = PhysicsObject.CreateStaticObject(leveys, korkeus);
214        MaaliLippu.IgnoresCollisionResponse = true;
215        MaaliLippu.Position = paikka;
216        MaaliLippu.Image = maaliKuva;
217        MaaliLippu.Tag = "MaaliLippu";
218        Add(MaaliLippu);
219    }
220    void PaaseeMaaliin(PhysicsObject hahmo, PhysicsObject MaaliLippu)
221    {
222        ClearAll();
223        Level.Background.Image = SpaceRunBackground;
224        topLista.EnterAndShow(pisteLaskuri.Value);
225        //topLista.HighScoreWindow.Closed += VoittaaPelin;
226       
227
228    }
229    void HaviaaPelin()
230    {
231        ClearAll();
232        Level.Background.Image = SpaceRunBackground;
233        MultiSelectWindow ikkuna = new MultiSelectWindow("Hävisit! Yritetäänkö uudestaan?", "Kyllä", "Ei");
234        ikkuna.AddItemHandler(0, AloitaPeli);
235        ikkuna.AddItemHandler(1, Exit);
236        Add(ikkuna);
237    }
238
239    public void VoittaaPelin(Window sender)
240    {
241       MultiSelectWindow ikkuna = new MultiSelectWindow("Voitit! Haluatko pelata uudestaan?", "Kyllä", "Ei");
242       ikkuna.AddItemHandler(0, AloitaPeli);
243       ikkuna.AddItemHandler(1, Exit);
244       Add(ikkuna);
245    }
246    void ParhaatPisteet()
247    {
248        topLista.Show();
249    }
250    void NaytaOhjeet()
251    {
252        IsMouseVisible = true;
253        List<Widget> jutut = new List<Widget>();
254        string[] tekstit = { "Liikkuu A, D, hyppää välilyönnistä, lyö F.", "Lyömisessä pitää odottaa hetki ennen kuin", "saa lyödä uudestaan.",  "Pausettaa P, Esc:stä voi poistua pelistä", "Väistele alieneita, kerää mahdollisimman paljon kultaa", "ja mene maaliin!"};
255        Label pohja = new Label(Screen.Width * 0.85, Screen.Height * 0.85);
256        //pohja.Image = pohjanKuva;
257        Add(pohja);
258        jutut.Add(pohja);
259        Vector okPosition = pohja.Position - new Vector(0, pohja.Height * 0.40);
260
261        for (int i = 0; i < tekstit.Length; i++)
262        {
263            Label teksti = new Label(tekstit[i]);
264            teksti.Y = pohja.Top - 200 - i * (pohja.Height + okPosition.Y) / tekstit.Length;
265            teksti.TextColor = Color.LightGreen;
266            teksti.TextScale = new Vector(1.2, 1);
267            Add(teksti);
268            jutut.Add(teksti);
269        }
270
271
272        PushButton ok = new PushButton("Ok");
273        jutut.Add(ok);
274        ok.Position = okPosition;
275        ok.Clicked += delegate {
276            foreach (var item in jutut)
277            {
278                item.Destroy();
279            }
280            IsMouseVisible = false;
281            Begin();
282        };
283        Add(ok);
284
285    }
286}
Note: See TracBrowser for help on using the repository browser.