source: 2015/26/AtteK/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli.cs @ 6265

Revision 6265, 10.5 KB checked in by anmurtok, 5 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 Tasohyppelypeli : PhysicsGame
10{
11    DoubleMeter nopeus;
12    double hyppyNopeus = 750;
13
14    const int RUUDUN_KOKO = 40;
15
16    PlatformCharacter pelaaja1;
17    int kenttänumero = 1;
18    Image donitsikuva = LoadImage("Donitsi");
19    Image[] PoliisiAtt = LoadImages("Polisi", "Polisiattack");
20    Image tiilikuva = LoadImage("tiili");
21    Image lopunkuva = LoadImage("Loppu");
22    Image[] vihukavely = LoadImages("vih1att", "vih1att2");
23    Image[] idlekuva = LoadImages("kaljaidle", "kaljaidle2");
24    Image powerupkuva = LoadImage("powerup");
25    Image vihollisenkuva = LoadImage("vihollinen");
26    Image poliisinkuva = LoadImage("polisi");
27    Image[] lyöntikuvat = LoadImages("lyöntikalja", "lyöntikalja2");
28    Image[] hyppykuvat = LoadImages("hyppykalja", "hyppykalja2", "hyppykalja3");
29    Image[] kävelykuvat = LoadImages("Kaljakavely", "Kaljakavely2");
30    Image pelaajanKuva = LoadImage("kaljajuoppo");
31    Image tahtiKuva = LoadImage("Kolike");
32    Image ruohokuva = LoadImage("ruohotilkku");
33    SoundEffect maaliaani = LoadSoundEffect("maali");
34    SoundEffect pulloaani = LoadSoundEffect("pullo");
35    SoundEffect punchaani = LoadSoundEffect("punch");
36    Image taustakuva = LoadImage("taustsa");
37
38    public override void Begin()
39    {
40        SmoothTextures = false;
41        aloitapeli();
42    }
43    void seuraavakenttä()
44    {
45        kenttänumero++;
46        aloitapeli();
47    }
48
49    void aloitapeli()
50    {
51        ClearAll();
52
53        nopeus = new DoubleMeter(300);
54        Gravity = new Vector(0, -1000);
55
56        LuoKentta();
57        LisaaNappaimet();
58        MediaPlayer.Play("taustamusa");
59        MediaPlayer.IsRepeating = true;
60        Camera.Follow(pelaaja1);
61        Camera.ZoomFactor = 1.9;
62        Camera.StayInLevel = true;
63    }
64
65    void LuoKentta()
66    {
67        TileMap kentta = TileMap.FromLevelAsset("kentta"+kenttänumero);
68        kentta.SetTileMethod('T', LisaaTiili);
69        kentta.SetTileMethod('L', LisaaLoppu);
70        kentta.SetTileMethod('#', LisaaTaso);
71        kentta.SetTileMethod('*', LisaaTahti);
72        kentta.SetTileMethod('N', LisaaPelaaja);
73        kentta.SetTileMethod('K', LisaaPowerup);
74        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
75        TileMap kentta2 = TileMap.FromLevelAsset("kentta"+kenttänumero);
76        kentta2.SetTileMethod('V', LisaaVihollinen);
77        kentta2.SetTileMethod('P', LisaaPolisi);
78        kentta2.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
79        Level.CreateBorders();
80        Level.Background.CreateGradient(Color.White, Color.White);
81        Level.Background.Image = taustakuva;
82    }
83
84    void LisaaTaso(Vector paikka, double leveys, double korkeus)
85    {
86        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
87        taso.Position = paikka;
88        taso.Color = Color.Green;
89        Add(taso);
90        taso.Image = ruohokuva;
91    }
92    void LisaaTiili (Vector paikka, double leveys, double korkeus)
93    {
94        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
95        taso.Position = paikka;
96        taso.Color = Color.Green;
97        Add(taso);
98        taso.Image = tiilikuva;
99    }
100    void LisaaLoppu(Vector paikka, double leveys, double korkeus)
101    {
102        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys*5, korkeus*3);
103        taso.Position = paikka;
104        taso.Color = Color.Green;
105        Add(taso);
106        taso.Image = lopunkuva;
107        taso.Y += korkeus;
108        taso.Tag = "loppu";
109    }
110    void LisaaTahti(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
113        tahti.IgnoresCollisionResponse = true;
114        tahti.Position = paikka;
115        tahti.Image = tahtiKuva;
116        tahti.Tag = "tahti";
117        Add(tahti);
118    }
119    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
120    {
121        PlatformCharacter Vihollinen1 = new PlatformCharacter(leveys, korkeus);
122        Vihollinen1.Position = paikka;
123        Vihollinen1.Image = vihollisenkuva;
124        Vihollinen1.Tag = "vihollinen";
125        Add(Vihollinen1);
126        Vihollinen1.AnimWalk = new Animation (vihukavely);
127        Vihollinen1.AnimWalk.FPS = 4;
128
129        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
130        tasoAivot.Speed = 100;
131
132        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
133        seuraajanAivot.Speed = 425;
134        seuraajanAivot.DistanceFar = 300;
135        seuraajanAivot.DistanceClose = 200;
136        seuraajanAivot.StopWhenTargetClose = false;
137        seuraajanAivot.FarBrain = tasoAivot;
138
139        //seuraajanAivot.TargetClose +=
140
141        Vihollinen1.Brain = seuraajanAivot;
142        AddCollisionHandler(Vihollinen1, "lyonti", osuma);
143   
144    }
145    void LisaaPolisi(Vector paikka, double leveys, double korkeus)
146    {
147        PlatformCharacter Polisi = new PlatformCharacter(leveys, korkeus);
148        Polisi.Position = paikka;
149        Polisi.Image = poliisinkuva;
150        Polisi.CollisionIgnoreGroup = 1;
151        Polisi.Tag = "vihollinen";
152        Add(Polisi);
153       // Polisi.AnimWalk = new Animation(vihukavely);
154        //Polisi.AnimWalk.FPS = 4;
155
156        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
157        tasoAivot.Speed = 100;
158
159        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
160        seuraajanAivot.Speed = 425;
161        seuraajanAivot.DistanceFar = 300;
162        seuraajanAivot.DistanceClose = 200;
163        seuraajanAivot.StopWhenTargetClose = false;
164        seuraajanAivot.FarBrain = tasoAivot;
165
166        //seuraajanAivot.TargetClose +=
167
168        Polisi.Brain = seuraajanAivot;
169        AddCollisionHandler(Polisi, "lyonti", osuma);
170
171        Timer ajastin = new Timer();
172        ajastin.Interval = 0.75;
173        ajastin.Timeout += delegate
174        {
175            PhysicsObject Donitsi = new PhysicsObject(20, 20);
176            Donitsi.Image = donitsikuva;
177            Donitsi.Position = Polisi.Position;
178            Donitsi.Hit((pelaaja1.Position - Polisi.Position).Normalize() * 1500);
179            Add(Donitsi);
180            Donitsi.Shape = Shape.Circle;
181            Donitsi.LifetimeLeft = TimeSpan.FromSeconds(0.75);
182            Donitsi.Tag = "vihollinen";
183            AddCollisionHandler(Donitsi, "lyonti", osuma);
184            AddCollisionHandler(Donitsi, CollisionHandler.ExplodeObject(100,true));
185            Donitsi.CollisionIgnoreGroup = 1;
186        };
187        ajastin.Start();
188
189    }
190    void osuma(PhysicsObject vihollinen, PhysicsObject nyrkki)
191    {
192        nyrkki.Destroy();
193        vihollinen.Destroy();
194    }
195
196
197    void LisaaPowerup(Vector paikka, double leveys, double korkeus)
198    {
199        PhysicsObject Powerup = PhysicsObject.CreateStaticObject(leveys * 0.225, korkeus * 0.75);
200        Powerup.IgnoresCollisionResponse = true;
201        Powerup.Position = paikka;
202        Powerup.Image = powerupkuva;
203        Powerup.Tag = "speedpowerup";
204        Add(Powerup);
205    }
206
207    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
208    {
209        pelaaja1 = new PlatformCharacter(leveys, korkeus);
210        pelaaja1.AnimJump = new Animation(hyppykuvat);
211        pelaaja1.AnimJump.FPS = 300;
212        pelaaja1.Position = paikka;
213        pelaaja1.Mass = 4.0;
214        pelaaja1.Image = pelaajanKuva;
215        pelaaja1.AnimIdle = new Animation(idlekuva);
216        pelaaja1.AnimIdle.FPS = 3;
217        pelaaja1.AnimWalk = new Animation(kävelykuvat);
218        pelaaja1.AnimWalk.FPS = 4;
219        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
220        AddCollisionHandler(pelaaja1, "vihollinen", TormaaViholliseen);
221        AddCollisionHandler(pelaaja1, "speedpowerup", TormaaPoweruppiin);
222        AddCollisionHandler(pelaaja1, "loppu", törmääloppuun);
223        Add(pelaaja1);
224    }
225    void törmääloppuun(PhysicsObject pelaaja, PhysicsObject loppu)
226    {
227        seuraavakenttä();
228    }
229    void LisaaNappaimet()
230    {
231        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
232        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
233        Keyboard.Listen(Key.Space, ButtonState.Pressed, Lyö, "Pelaaja lyö", pelaaja1);
234        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
235        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
236        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
237
238        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
239
240        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
241        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
242        //ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
243
244        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
245    }
246
247    void Lyö(PlatformCharacter hahmo)
248    {
249        Animation lyöntianimaatio = new Animation(lyöntikuvat);
250        lyöntianimaatio.FPS = 10;
251        hahmo.PlayAnimation(lyöntianimaatio);
252        hahmo.Width = RUUDUN_KOKO + 15;
253        lyöntianimaatio.Played += delegate
254        {
255            hahmo.Width = RUUDUN_KOKO;
256        };
257        punchaani.Play();
258
259        PhysicsObject lyonti = new PhysicsObject(20,20);
260        lyonti.Position = hahmo.Position + hahmo.FacingDirection.GetVector() * 40;
261        lyonti.IgnoresCollisionResponse = true;
262        lyonti.Tag = "lyonti";
263        lyonti.IsVisible = false;
264        lyonti.LifetimeLeft = TimeSpan.FromSeconds(0.1);
265        Add(lyonti);
266    }
267
268    void Liikuta(PlatformCharacter hahmo, double suunta)
269    {
270        hahmo.Walk(nopeus.Value * suunta);
271    }
272
273    void Hyppaa(PlatformCharacter hahmo, double nopeus)
274    {
275        hahmo.Jump(nopeus);
276    }
277
278    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
279    {
280        maaliaani.Play();
281        MessageDisplay.Add("LISÄÄ RAHEJA!");
282        tahti.Destroy();
283    }
284    void TormaaPoweruppiin(PhysicsObject hahmo, PhysicsObject Powerup)
285    {
286        pulloaani.Play();
287        Powerup.Destroy();
288        nopeus.Value += 150;
289    }
290
291    void TormaaViholliseen(PhysicsObject hahmo, PhysicsObject vihollinen)
292    {
293        aloitapeli();
294    }
295}
Note: See TracBrowser for help on using the repository browser.