source: 2014/koodauskerho/38/EetuR/Läpsylintu/Läpsylintu/Läpsylintu/Läpsylintu.cs @ 5796

Revision 5796, 7.6 KB checked in by hesahave, 8 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 Läpsylintu : PhysicsGame
10{
11    const double nopeus = 10000;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    int kenttaNro = 1;
17    Image pelaajanKuva = LoadImage("lintu");
18    Image[] pelaajanHyppykuvat = LoadImages("lapsy", "lintu");
19    Image tahtiKuva = LoadImage("tahti");
20    Image vihollisenKuva = LoadImage("vihollinen");
21    Image pelaajanKuolemakuva = LoadImage("kuollutlintu");
22    Image PahaKuva = LoadImage("paha");
23    SoundEffect maaliAani = LoadSoundEffect("maali");
24    Image Tulipallo = LoadImage("Tulipallo");
25    bool peliKaynnissa = false;
26   
27    Timer liikutusajastin;
28
29    public override void Begin()
30    {
31       
32
33        SeuraavaKentta();
34       
35
36       
37    }
38    void SeuraavaKentta()
39    {
40        ClearAll();
41        Gravity = new Vector(0, -1000);
42        if (kenttaNro == 1) LuoKentta("kentta1");
43        else if (kenttaNro == 2) LuoKentta("kentta2");
44        else if (kenttaNro == 3) LuoKentta("kentta3");
45        else if (kenttaNro > 3) Exit();
46
47        LisaaNappaimet();
48        Camera.Follow(pelaaja1);
49        Camera.ZoomFactor = 1.2;
50        Camera.FollowOffset = new Vector(Screen.Width / 2.5 - RUUDUN_KOKO, 0.0);
51        Camera.StayInLevel = true;
52        liikutusajastin = new Timer();
53        liikutusajastin.Interval = 0.01;
54        liikutusajastin.Timeout += SiirraPelaajaaOikeammalle;
55        liikutusajastin.Start();
56        peliKaynnissa = true;
57    }
58    void SiirraPelaajaaOikeammalle()
59    {
60        pelaaja1.Push(new Vector(nopeus, 0.0));
61
62    }
63
64    void LuoKentta(string kenttaTiedostonNimi)
65    {
66        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi);
67        kentta.SetTileMethod('#', LisaaTaso);
68        kentta.SetTileMethod('*', LisaaTahti);
69        kentta.SetTileMethod('L', LisaaPelaaja);
70        kentta.SetTileMethod('v', LisaaVihollinen);
71        kentta.SetTileMethod('p', LisaaPaha);
72        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
73        //Level.CreateBorders();
74        Level.CreateLeftBorder();
75        Level.CreateTopBorder();
76        Level.CreateBottomBorder();
77        PhysicsObject oikeaReuna = Level.CreateRightBorder();
78        oikeaReuna.Tag = "oikea";
79
80        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
81    }
82    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
83    {
84        LisaaEste(paikka, leveys, korkeus, vihollisenKuva);
85    }
86    void LisaaPaha(Vector paikka, double leveys, double korkeus)
87    {
88        PhysicsObject paha=LisaaEste(paikka, leveys, korkeus, PahaKuva);
89        AssaultRifle pahatykki = new AssaultRifle(15, 15);
90        pahatykki.Angle = Angle.FromDegrees(180); 
91        pahatykki.ProjectileCollision = AmmusOsui;
92        pahatykki.Power.DefaultValue = 48;
93        paha.Add(pahatykki);
94        pahatykki.Image = null;
95        pahatykki.Color = Color.Transparent;
96        Timer ajastin = new Timer();
97        ajastin.Interval = 1.5;
98        ajastin.Timeout += delegate { AmmuAseella(pahatykki); };
99        ajastin.Start();
100    }
101    PhysicsObject LisaaEste(Vector paikka, double leveys, double korkeus, Image kuva)
102    {
103        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
104        vihollinen.Position = paikka;
105        vihollinen.IgnoresGravity = true;
106        Add(vihollinen);
107        vihollinen.CanRotate = false;
108        // Asetetaan vihollinen liikkumaan ylös-alas:
109        vihollinen.Oscillate(new Vector(0, 1), korkeus * 1.5, 0.3);
110        vihollinen.Image = kuva;
111        vihollinen.Tag = "vihu";
112        return vihollinen;
113    }
114    void AmmuAseella(AssaultRifle ase)
115    {
116        PhysicsObject ammus = ase.Shoot();
117        if (ammus != null)
118        {
119            ammus.Tag = "ammus";
120            ammus.Size *= 5;
121            ammus.Image = Tulipallo;
122            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.5);
123        }
124    }
125    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
126    {
127        ammus.Destroy();
128    }
129    void LisaaTaso(Vector paikka, double leveys, double korkeus)
130    {
131        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
132        taso.Position = paikka;
133        taso.Color = Color.Green; taso.Tag = "seina";
134        Add(taso);
135    }
136
137    void LisaaTahti(Vector paikka, double leveys, double korkeus)
138    {
139        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
140        tahti.IgnoresCollisionResponse = true;
141        tahti.Position = paikka;
142        tahti.Image = tahtiKuva;
143        tahti.Tag = "tahti";
144        Add(tahti);
145    }
146
147    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
148    {
149        pelaaja1 = new PlatformCharacter(leveys, korkeus);
150        pelaaja1.Position = paikka;
151        pelaaja1.Mass = 4.0;
152        pelaaja1.Image = pelaajanKuva;
153        pelaaja1.AnimJump = new Animation(pelaajanHyppykuvat);
154        pelaaja1.AnimFall = new Animation(pelaajanKuva);
155        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
156        AddCollisionHandler(pelaaja1, "seina", TormaaKuolettavaan);
157        AddCollisionHandler(pelaaja1, "vihu", TormaaKuolettavaan);
158        AddCollisionHandler(pelaaja1, "ammus", TormaaKuolettavaan);
159        Add(pelaaja1);
160        AddCollisionHandler(pelaaja1, "oikea", TormaaOikeaanReunaan);
161    }
162
163
164    void TormaaKuolettavaan(PhysicsObject tormaaja, PhysicsObject kohde)
165    {
166        if (peliKaynnissa)
167        {// Asetetaan pelaajan normaali kuva kuolemiskuvaksi:
168            pelaaja1.Image = pelaajanKuolemakuva;
169
170            // Asetetaan pelaajan animaatiot kuolemisen animaatioksi (voi sisältää useammankin kuvan):
171            Animation kuolemisanimaatio = new Animation(pelaajanKuolemakuva);
172            pelaaja1.AnimFall = kuolemisanimaatio;
173            pelaaja1.AnimJump = kuolemisanimaatio;
174
175            MessageDisplay.Add("Kuolit! :(");
176            PoistaPelaamisnappaimet();
177            liikutusajastin.Stop();
178            peliKaynnissa = false;
179        }
180    }
181
182
183    void LisaaNappaimet()
184    {
185        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
186        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
187
188     
189     
190        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
191
192        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
193
194       
195       
196        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
197
198        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
199    }
200
201    void Liikuta(PlatformCharacter hahmo, double nopeus)
202    {
203        hahmo.Walk(nopeus);
204    }
205
206    void Hyppaa(PlatformCharacter hahmo, double nopeus)
207    {
208        hahmo.ForceJump(nopeus);
209    }
210
211    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
212    {
213        maaliAani.Play();
214        MessageDisplay.Add("Keräsit tähden!");
215        tahti.Destroy();
216    }
217   
218    void TormaaOikeaanReunaan(PhysicsObject tormaaja, PhysicsObject kohde)
219    {
220        MessageDisplay.Add("Pääsit kentän läpi!");
221        Gravity = Vector.Zero; // Pelaaja ei enää putoa alas
222        StopAll(); // Pysäyttää kaikki oliot, mm. vihollisten liikkeen
223        PoistaPelaamisnappaimet();
224        kenttaNro += 1;
225        SeuraavaKentta();
226    }
227    void PoistaPelaamisnappaimet()
228    {
229        Keyboard.Disable(Key.Up);
230    }
231}
Note: See TracBrowser for help on using the repository browser.