source: 2014/koodauskerho/38/VilhoP/Lapsylintu/Lapsylintu/Lapsylintu/Lapsylintu.cs @ 5753

Revision 5753, 6.1 KB checked in by jotapoti, 7 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 Lapsylintu : PhysicsGame
10{
11    const double nopeus = 10000;
12
13    const double hyppyNopeus = 500;
14    const int RUUDUN_KOKO = 40;
15
16    PlatformCharacter pelaaja1;
17
18    Image pelaajanKuva = LoadImage("ukko2");
19    Image tahtiKuva = LoadImage("tahti");
20    Image[] pelaajanHyppykuvat = LoadImages("ukko2hyppy", "ukko2");
21    Image[] pelaajanPutoamiskuva = LoadImages("lintu");
22    Image pelaajanKuolemakuva = LoadImage("ukkokuollut");
23    Image vihollisenKuva = LoadImage("vihollinen1");
24
25    SoundEffect maaliAani = LoadSoundEffect("tilu2");
26    SoundEffect kuolema = LoadSoundEffect("tuomio");
27
28    bool peliKaynnissa = false;
29
30    Timer liikutusajastin;
31
32    public override void Begin()
33        {
34            SetWindowSize(1280, 720);
35        Gravity = new Vector(0, -1000);
36
37        LuoKentta();
38        LisaaNappaimet();
39
40        Camera.Follow(pelaaja1);
41        Camera.ZoomFactor = 1.2;
42        Camera.StayInLevel = true;
43        Camera.FollowOffset = new Vector(Screen.Width / 5 - RUUDUN_KOKO, 0.0);
44
45        liikutusajastin = new Timer();
46        liikutusajastin.Interval = 0.01;
47        liikutusajastin.Timeout += SiirraPelaajaaOikeammalle;
48        liikutusajastin.Start();
49        peliKaynnissa = true;
50    }
51
52    void SiirraPelaajaaOikeammalle()
53    {
54        pelaaja1.Push(new Vector(nopeus, 1000));
55
56    }
57
58
59    void LuoKentta()
60    {
61        TileMap kentta = TileMap.FromLevelAsset("kentta1");
62        kentta.SetTileMethod('#', LisaaTaso);
63        kentta.SetTileMethod('*', LisaaTahti);
64        kentta.SetTileMethod('L', LisaaPelaaja);
65        kentta.SetTileMethod('v', LisaaVihollinen);
66        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
67       
68        // Level.CreateBorders();
69        Level.CreateLeftBorder();
70        Level.CreateTopBorder();
71        Level.CreateBottomBorder();
72        PhysicsObject oikeaReuna = Level.CreateRightBorder();
73        oikeaReuna.Tag = "oikea";
74       
75        Level.Background.CreateGradient(Color.Red, Color.SkyBlue);
76    }
77
78    void LisaaTaso(Vector paikka, double leveys, double korkeus)
79    {
80        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
81        taso.Position = paikka;
82        taso.Color = (Color.Blue);
83        taso.Tag = "seina";
84        Add(taso);
85    }
86
87    void LisaaTahti(Vector paikka, double leveys, double korkeus)
88    {
89        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
90        tahti.IgnoresCollisionResponse = true;
91        tahti.Position = paikka;
92        tahti.Image = tahtiKuva;
93        tahti.Tag = "tahti";
94        Add(tahti);
95    }
96
97    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
98    {
99        pelaaja1 = new PlatformCharacter(leveys, korkeus);
100        pelaaja1.Position = paikka;
101        pelaaja1.Mass = 4.0;
102        pelaaja1.Image = pelaajanKuva;
103        pelaaja1.AnimJump = new Animation(pelaajanHyppykuvat);
104        pelaaja1.AnimFall = new Animation(pelaajanKuva);
105
106        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
107        Add(pelaaja1);
108        AddCollisionHandler(pelaaja1, "seina", TormaaKuolettavaan);
109        AddCollisionHandler(pelaaja1, "vihu", TormaaKuolettavaan);
110
111        AddCollisionHandler(pelaaja1, "oikea", TormaaOikeaanReunaan);
112    }
113
114    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
115    {
116        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
117        vihollinen.Position = paikka;
118        Add(vihollinen);
119        vihollinen.IgnoresGravity = true;
120        vihollinen.CanRotate = false;
121        vihollinen.IgnoresCollisionResponse = true;
122        vihollinen.Image =vihollisenKuva;
123        vihollinen.Tag = "vihu";
124       
125        //Asetetaan vihollinen liikkumaan ylös-alas:
126        vihollinen.Oscillate(new Vector(1, 1), korkeus * 1.5, 0.3);
127    }
128
129    void TormaaKuolettavaan(PhysicsObject tormaaja, PhysicsObject kohde)
130    {
131        if (peliKaynnissa)
132        {
133            kuolema.Play();
134
135            // Asetetaan pelaajan normaali kuva kuolemiskuvaksi:
136            pelaaja1.Image = pelaajanKuolemakuva;
137
138            //Asetetaan pelaajan animaatiot kuolemisen animaatioksi (voi sisältää useammankin kuvan):
139            Animation kuolemisanimaatio = new Animation(pelaajanKuolemakuva);
140            pelaaja1.AnimFall = kuolemisanimaatio;
141            pelaaja1.AnimJump = kuolemisanimaatio;
142
143            MessageDisplay.Add("Hahahahaa!KUOLIT!Muhahahaa! >:D");
144            liikutusajastin.Stop();
145            peliKaynnissa = false;
146            PoistaPelaamisnappaimet();
147        }
148   
149   
150}
151
152    void LisaaNappaimet()
153    {
154        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
155        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
156        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
157
158        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
159        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
160
161        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
162    }
163
164    void PoistaPelaamisnappaimet()
165    {
166        Keyboard.Disable(Key.Space);
167        ControllerOne.Disable(Button.A);
168    }
169
170    void Liikuta(PlatformCharacter hahmo, double nopeus)
171    {
172        hahmo.Walk(nopeus);
173    }
174
175    void Hyppaa(PlatformCharacter hahmo, double nopeus)
176    {
177        hahmo.ForceJump(nopeus);
178    }
179
180    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
181    {
182        maaliAani.Play();
183        MessageDisplay.Add("Keräsit tähden!");
184        tahti.Destroy();
185    }
186
187    void TormaaOikeaanReunaan(PhysicsObject tormaaja, PhysicsObject kohde)
188    {
189        MessageDisplay.Add("Voitit!");
190        Gravity = Vector.Zero; // Pelaaja ei enää putoa alas
191        StopAll(); // Pysäyttää kaikki oliot mm. vihollisen liikkeen
192        PoistaPelaamisnappaimet();
193    }
194}
Note: See TracBrowser for help on using the repository browser.