source: 2016/koodauskerho/SamuelN/Game1/Game1/Game1/Game1.cs @ 8408

Revision 8408, 13.1 KB checked in by sieerinn, 2 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 Game1 : PhysicsGame
10{
11    const double nopeus = 300;
12    const double hyppyNopeus = 850;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    Image pelaajanKuva = LoadImage("mario");
18    Image hyppyKuva = LoadImage("mario_jump");
19    Image tahtiKuva = LoadImage("coin");
20    Image tasoKuva = LoadImage("taso");
21    Image kuutioKuva = LoadImage("cube");
22    Image kuutioKuva2 = LoadImage("cube2");
23    Image kuutioKuva3 = LoadImage("cube3");
24    Image sieniKuva = LoadImage("sieni");
25    Image vihuKuva = LoadImage("vihollinen1");
26    Image tasoKuva2 = LoadImage("taso2");
27    Image pipeKuva = LoadImage("pipe");
28    Image pipeKuva2 = LoadImage("pipe2");
29    Image pipeKuva3 = LoadImage("pipe3");
30    Image nKuva = LoadImage("n");
31    Image linnaKuva = LoadImage("linna");
32
33    SoundEffect coinAani = LoadSoundEffect("maali");
34    SoundEffect jumpAani = LoadSoundEffect("jump");
35    SoundEffect killAani = LoadSoundEffect("kill");
36    SoundEffect kuutioAani = LoadSoundEffect("kuutio");
37    SoundEffect tpAani = LoadSoundEffect("tp");
38    SoundEffect dieAani = LoadSoundEffect("die");
39    SoundEffect voittoAani = LoadSoundEffect("voitto");
40    bool suurennos = false;
41    double epsilon = 10;
42    int kenttaNro = 1;
43    public override void Begin()
44    {
45        MediaPlayer.Play("alku");
46        IsFullScreen = true;
47        MultiSelectWindow alkuValikko = new MultiSelectWindow("", "Start Game", "Exit");
48        alkuValikko.Color = Color.LightBlue;
49        alkuValikko.AddItemHandler(0, Aloitus);
50        alkuValikko.AddItemHandler(1, Exit);
51
52        Add(alkuValikko);
53    }
54    void Aloitus()
55    {
56        ClearAll();
57        Gravity = new Vector(0, -1000);
58
59        LuoKentta();
60        LisaaNappaimet();
61
62
63        Camera.Follow(pelaaja1);
64        Camera.ZoomFactor = 0.01;
65        Camera.StayInLevel = true;
66    }
67    void LuoKentta()
68    {
69        TileMap kentta = TileMap.FromLevelAsset("kentta"+ kenttaNro);
70        kentta.SetTileMethod('#', LisaaTaso);
71        kentta.SetTileMethod('t', LisaaTahti);
72        kentta.SetTileMethod('p', LisaaPelaaja);
73        kentta.SetTileMethod('k', LisaaKuutio);
74        kentta.SetTileMethod('K', LisaaKuutio2);
75        kentta.SetTileMethod('G', LisaaKuutio3);
76        kentta.SetTileMethod('s', LisaaSieni);
77        kentta.SetTileMethod('v', LisaaVihu);
78        kentta.SetTileMethod('T', LisaaTaso2);
79        kentta.SetTileMethod('P', LisaaPipe);
80        kentta.SetTileMethod('&', LisaaPipe2);
81        kentta.SetTileMethod('/', LisaaPipe3);
82        kentta.SetTileMethod('n', LisaaNakymaton);
83        kentta.SetTileMethod('m', LisaaMaali);
84        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
85        //Level.CreateBorders();
86        PhysicsObject alareuna = Level.CreateBottomBorder();
87        Level.CreateLeftBorder();
88        Level.CreateRightBorder();
89        Level.CreateTopBorder();
90        alareuna.Tag = "alareuna";
91        Level.Background.Color = new Color(92, 148, 252);
92    }
93
94    void LisaaTaso(Vector paikka, double leveys, double korkeus)
95    {
96        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
97        taso.Position = paikka;
98        taso.Image = tasoKuva;
99        taso.Tag = "taso";
100        Add(taso);
101    }
102    void LisaaMaali(Vector paikka, double leveys, double korkeus)
103    {
104        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys*2, korkeus*2);
105        maali.Position = paikka;
106        maali.Image = linnaKuva;
107        maali.Tag = "maali";
108        Add(maali);
109    }
110    void LisaaPipe(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject pipe = PhysicsObject.CreateStaticObject(leveys  + 10, korkeus+10);
113        pipe.Position = paikka;
114        pipe.Image = pipeKuva;
115        pipe.Tag = "pipe";
116        Add(pipe);
117    }
118    public void LisaaPipe2(Vector paikka, double leveys, double korkeus)
119    {
120        PhysicsObject pipe2 = PhysicsObject.CreateStaticObject(leveys *2, korkeus *3);
121        pipe2.Position = paikka;
122        pipe2.Image = pipeKuva3;
123        pipe2.Tag = "pipe2";
124        Add(pipe2);
125    }
126    public void LisaaPipe3(Vector paikka, double leveys, double korkeus)
127    {
128        PhysicsObject pipe2 = PhysicsObject.CreateStaticObject(leveys *2, korkeus);
129        pipe2.Position = paikka;
130        pipe2.Image = pipeKuva2;
131        pipe2.Tag = "pipe3";
132        Add(pipe2);
133    }
134    void LisaaTaso2(Vector paikka, double leveys, double korkeus)
135    {
136        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
137        taso2.Position = paikka;
138        taso2.Image = tasoKuva2;
139        taso2.Tag = "taso2";
140        Add(taso2);
141    }
142    void LisaaKuutio(Vector paikka, double leveys, double korkeus)
143    {
144        PhysicsObject kuutio = PhysicsObject.CreateStaticObject(leveys, korkeus);
145        kuutio.Position = paikka;
146        kuutio.Image = kuutioKuva;
147        kuutio.Tag = "kuutio";
148        Add(kuutio);
149    }
150    void LisaaKuutio2(Vector paikka, double leveys, double korkeus)
151    {
152        PhysicsObject kuutio2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
153        kuutio2.Position = paikka;
154        kuutio2.Image = kuutioKuva2;
155        kuutio2.Tag = "kuutio2";
156        Add(kuutio2);
157    }
158    void LisaaKuutio3(Vector paikka, double leveys, double korkeus)
159    {
160        PhysicsObject kuutio3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
161        kuutio3.Position = paikka;
162        kuutio3.Image = kuutioKuva3;
163        kuutio3.Tag = "kuutio3";
164        Add(kuutio3);
165    }
166    void LisaaNakymaton(Vector paikka, double leveys, double korkeus)
167    {
168        PhysicsObject n = PhysicsObject.CreateStaticObject(leveys, korkeus);
169        n.Position = paikka;
170        n.Image = nKuva;
171        n.Tag = "n";
172        Add(n);
173    }
174    void LisaaSieni(Vector paikka, double leveys, double korkeus)
175    {
176        PhysicsObject sieni = PhysicsObject.CreateStaticObject(leveys, korkeus);
177        sieni.Position = paikka;
178        sieni.Image = sieniKuva;
179        sieni.Tag = "sieni";
180        Add(sieni);
181    }
182    void LisaaTahti(Vector paikka, double leveys, double korkeus)
183    {
184        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
185        tahti.IgnoresCollisionResponse = true;
186        tahti.Position = paikka;
187        tahti.Image = tahtiKuva;
188        tahti.Tag = "tahti";
189        Add(tahti);
190    }
191    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
192    {
193        pelaaja1 = new PlatformCharacter(leveys, korkeus);
194        pelaaja1.Position = paikka;
195        pelaaja1.Mass = 4.0;
196        pelaaja1.Image = pelaajanKuva;
197        pelaaja1.Tag = "pelaaja";
198
199        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
200
201        AddCollisionHandler(pelaaja1, "taso", TasoonTippuminen);
202        AddCollisionHandler(pelaaja1, "pipe2", TasoonTippuminen);
203        AddCollisionHandler(pelaaja1, "pipe", TasoonTippuminen);
204        AddCollisionHandler(pelaaja1, "kuutio", TasoonTippuminen);
205        AddCollisionHandler(pelaaja1, "kuutio2", TasoonTippuminen);
206        AddCollisionHandler(pelaaja1, "kuutio3", TasoonTippuminen);
207        AddCollisionHandler(pelaaja1, "n", TasoonTippuminen);
208        AddCollisionHandler(pelaaja1, "taso2", TasoonTippuminen);
209
210        AddCollisionHandler(pelaaja1, "sieni", Hyppy);
211        AddCollisionHandler(pelaaja1, "vihu", TormaaVihuun);
212        AddCollisionHandler(pelaaja1, "kuutio", TormaaKuutioon);
213        AddCollisionHandler(pelaaja1, "pipe", Teleport);
214        AddCollisionHandler(pelaaja1, "pipe2", Teleport2);
215        AddCollisionHandler(pelaaja1, "n", ShowN);
216        AddCollisionHandler(pelaaja1, "alareuna", MarioDie);
217        AddCollisionHandler(pelaaja1, "maali", Voitto);
218
219        Add(pelaaja1);
220    }
221    void Voitto(PhysicsObject hahmo, PhysicsObject maali)
222    {
223        MediaPlayer.Stop();
224        voittoAani.Play();
225
226        Timer.SingleShot(6.2, delegate
227            {
228            kenttaNro++;
229            Aloitus();
230            Level.Background.Color = Color.Black;
231            MediaPlayer.Play("level2");
232        });
233    }
234    void MarioDie(PhysicsObject hahmo, PhysicsObject asia)
235    {
236        MediaPlayer.Stop();
237        asia.Destroy();
238        pelaaja1.Image = hyppyKuva;
239        pelaaja1.ForceJump(1000);
240        dieAani.Play();
241        Timer.SingleShot(3, delegate
242        {
243            pelaaja1.Destroy();
244        });
245       
246    }
247    void ShowN(PhysicsObject pelaaja1, PhysicsObject n)
248    {
249        if (Math.Abs(n.Bottom - pelaaja1.Top) < epsilon)
250        {
251            n.Image = kuutioKuva2;
252        }
253    }
254    void Teleport(PhysicsObject pelaaja1, PhysicsObject pipe)
255    {
256        Timer.SingleShot(1, delegate
257        {
258
259            if (Math.Abs(pelaaja1.Bottom - pipe.Top) < epsilon)
260            {
261                tpAani.Play();
262                pelaaja1.X = pipe.X + 350;
263                pelaaja1.Y = pipe.Y + 200;
264                pelaaja1.Width -= 4;
265                pelaaja1.Height -= 4;
266            }
267        });
268    }
269    void Teleport2(PhysicsObject pelaaja1, PhysicsObject pipe2)
270    {
271        Timer.SingleShot(1, delegate
272        {
273
274            if (Math.Abs(pelaaja1.Bottom - pipe2.Top) < epsilon)
275            {
276                tpAani.Play();
277                pelaaja1.X = pipe2.X + 350;
278                pelaaja1.Y = pipe2.Y + 100;
279                pelaaja1.Width -= 4;
280                pelaaja1.Height -= 4;
281            }
282        });
283    }
284    void TormaaKuutioon(PhysicsObject pelaaja1, PhysicsObject kuutio)
285    {
286        if (suurennos == true)
287        {
288            return;
289        }
290        if (Math.Abs(kuutio.Bottom - pelaaja1.Top) < epsilon)
291        {
292            kuutio.Y += 20;
293
294            pelaaja1.Width += 5;
295            pelaaja1.Height += 5;
296            kuutio.Image = kuutioKuva2;
297            Timer.SingleShot(0.1, delegate
298            {
299                kuutio.Y -= 20;
300                pelaaja1.Width -= 5;
301                pelaaja1.Height -= 5;
302                Timer.SingleShot(0.1, delegate
303                {
304                    pelaaja1.Width += 5;
305                    pelaaja1.Height += 5;
306
307                    Timer.SingleShot(20, delegate
308                    {
309                        pelaaja1.Width = 40;
310                        pelaaja1.Height = 40;
311                        suurennos = false;
312                    });
313                });
314            });
315            kuutioAani.Play();
316            suurennos = true;
317        }
318    }
319    void TormaaVihuun(PhysicsObject hahmo, PhysicsObject vihu)
320    {
321        if (Math.Abs(pelaaja1.Bottom - vihu.Top) < epsilon)
322        {
323            (pelaaja1 as PlatformCharacter).ForceJump(600);
324            vihu.Destroy();
325            killAani.Play();
326        }
327    }
328    void LisaaVihu(Vector paikka, double leveys, double korkeus)
329    {
330        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
331        vihu.Position = paikka;
332        vihu.Image = vihuKuva;
333        vihu.Tag = "vihu";
334
335        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
336        tasoAivot.Speed = 100;
337        tasoAivot.FallsOffPlatforms = false;
338        tasoAivot.TriesToJump = false;
339
340        vihu.Brain = tasoAivot;
341
342        Add(vihu);
343
344    }
345    void Hyppy(PhysicsObject hahmo, PhysicsObject sieni)
346    {
347        pelaaja1.ForceJump(1500);
348    }
349    void LisaaNappaimet()
350    {
351        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
352        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
353
354        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
355        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
356        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
357
358        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
359
360        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
361        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
362        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
363
364        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
365    }
366    void TasoonTippuminen(PhysicsObject hahmo, PhysicsObject taso)
367    {
368        if (Math.Abs(pelaaja1.Bottom - taso.Top) < epsilon)
369        {
370            pelaaja1.Image = pelaajanKuva;
371        }
372    }
373    void Liikuta(PlatformCharacter hahmo, double nopeus)
374    {
375        hahmo.Walk(nopeus);
376    }
377
378    void Hyppaa(PlatformCharacter hahmo, double nopeus)
379    {
380        hahmo.Jump(nopeus);
381        pelaaja1.Image = hyppyKuva;
382        jumpAani.Play();
383    }
384
385    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
386    {
387        coinAani.Play();
388        tahti.Destroy();
389    }
390}
Note: See TracBrowser for help on using the repository browser.