source: 2016/25/SaanaR/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1.cs @ 7494

Revision 7494, 9.0 KB checked in by koannak, 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 Tasohyppelypeli1 : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 850;
13    const int RUUDUN_KOKO = 40;
14    PhysicsObject teleportUlos;
15    PlatformCharacter pelaaja1;
16    int kolikoidenMaara = 0;
17    string[] kentat = new string[] { "kentta1", "kentta2", "kentta3", "kentta4", "kentta5" };
18    int kenttaMenossa = 0;
19    Image pelaajanKuva = LoadImage("kärpänen");
20    Image kolikkoKuva = LoadImage("Piste");
21    Image AmpiaisenKuva = LoadImage("Ampiainen");
22
23    SoundEffect maaliAani = LoadSoundEffect("Kolikko");
24    SoundEffect hyppyAani = LoadSoundEffect("hyppy");
25    Image pilvenreunat = LoadImage("Pilvi");
26    public override void Begin()
27    {
28        IsFullScreen = true;
29        LuoAlkuvalikko();
30       
31    }
32    void LuoAlkuvalikko ()
33    {
34        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
35"Aloita peli", "Lopeta");
36        Add(alkuValikko);
37        alkuValikko.AddItemHandler(0, AloitaPeli);
38        alkuValikko.AddItemHandler(1, Exit);
39        alkuValikko.Color = Color.BlueGray;
40    }
41    void AloitaPeli ()
42    {
43        kolikoidenMaara = 0;
44        Gravity = new Vector(0, -1000);
45        pisteLaskuri.Value = 0;
46
47        LuoKentta();
48        LisaaNappaimet();
49        LuoPistelaskuri();
50
51        Camera.Follow(pelaaja1);
52        Camera.ZoomFactor = 1.2;
53        Camera.StayInLevel = true;
54    }
55    IntMeter pisteLaskuri = new IntMeter(0);
56
57    void LuoPistelaskuri()
58    {
59       
60        Label pisteNaytto = new Label();
61        pisteNaytto.X = Screen.Right - 100;
62        pisteNaytto.Y = Screen.Bottom + 100;
63        pisteNaytto.TextColor = Color.Black;
64        pisteNaytto.Color = Color.White;
65
66        pisteNaytto.BindTo(pisteLaskuri);
67        Add(pisteNaytto);
68    }
69    void LisaaAse (Vector paikka, double leveys, double korkeus)
70    {
71        PhysicsObject ase = new PhysicsObject(leveys, korkeus/3);
72        ase.Position = paikka;
73        ase.Tag = "ase";
74        ase.Image = LoadImage("ase");
75        ase.CollisionIgnoreGroup = 1;
76        Add(ase);
77    }
78    void LuoKentta()
79    {
80        TileMap kentta = TileMap.FromLevelAsset(kentat[kenttaMenossa]);
81        kentta.SetTileMethod('#', LisaaTaso, "taso");
82        kentta.SetTileMethod('*', LisaaKolikko);
83        kentta.SetTileMethod('A', LisaaAmpiainen);
84        kentta.SetTileMethod('N', LisaaPelaaja);
85        kentta.SetTileMethod('-', LisaaAse);
86        kentta.SetTileMethod('T', LisaaTaso, "Teleport");
87        kentta.SetTileMethod('U', LisaaTaso, "TeleportUlos");
88        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
89        Level.CreateBorders();
90        Level.Background.CreateGradient(Color.LightBlue, Color.SkyBlue);
91    }
92    void LisaaAmpiainen(Vector paikka, Double  leveys, double korkeus)
93    {
94        PhysicsObject ampiainen = new PhysicsObject(leveys, korkeus);
95        ampiainen.Position = paikka;
96        ampiainen.IgnoresGravity = true;
97        Add(ampiainen);
98        ampiainen.Image = AmpiaisenKuva;
99        PathFollowerBrain aivot = new PathFollowerBrain(paikka, paikka+new Vector(-680,0));
100        ampiainen.Brain = aivot;
101        ampiainen.Tag = "ampiainen";
102        ampiainen.CollisionIgnoreGroup = 1;
103        aivot.Loop = true;
104    }
105    void LisaaTaso(Vector paikka, double leveys, double korkeus, string tyyppi)
106    {
107        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
108        taso.IgnoresExplosions = true;
109        taso.Position = paikka;
110        taso.Shape = Shape.FromImage(pilvenreunat);
111        taso.Image = pilvenreunat;
112        taso.Color = Color.White;
113        taso.Tag = tyyppi;
114        Add(taso);
115        if (tyyppi.Equals("TeleportUlos")) teleportUlos = taso;
116       
117    }
118
119    void LisaaKolikko(Vector paikka, double leveys, double korkeus)
120    {
121        PhysicsObject kolikko = PhysicsObject.CreateStaticObject(leveys, korkeus);
122        kolikko.IgnoresCollisionResponse = true;
123        kolikko.IgnoresExplosions = true;
124        kolikko.Position = paikka;
125        kolikko.Image = kolikkoKuva;
126        kolikko.Tag = "Piste";
127        kolikoidenMaara++;
128        pisteLaskuri.Value++;
129        Add(kolikko);
130    }
131
132    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
133    {
134        pelaaja1 = new PlatformCharacter(leveys, korkeus);
135        pelaaja1.Position = paikka;
136        pelaaja1.Mass = 4.0;
137        pelaaja1.Image = pelaajanKuva;
138        AddCollisionHandler(pelaaja1, "Piste", TormaaKolikkoon);
139        AddCollisionHandler(pelaaja1, "ampiainen", TörmääAmpiaiseen);
140        AddCollisionHandler(pelaaja1, "ase", OtaAse);
141        AddCollisionHandler(pelaaja1, "Teleport", SiirraPelaajaa);
142
143        Add(pelaaja1);
144    }
145    void SiirraPelaajaa (PhysicsObject pelaaja, PhysicsObject teleport)
146    {
147        pelaaja1.Position = teleportUlos.Position;
148        pelaaja1.X += pelaaja.Height;
149        pelaaja1.Velocity = Vector.Zero;
150    }
151    void OtaAse (PhysicsObject pelaaja, PhysicsObject ase)
152    {
153        pelaaja1.Weapon = new AssaultRifle(20, 10);
154        ase.Destroy();
155        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
156    }
157    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
158    {
159        ammus.Destroy();
160        Explosion ammusRajahdys = new Explosion(100);
161        ammusRajahdys.Position = kohde.Position;
162        Add(ammusRajahdys);
163        ammusRajahdys.Speed = 170.0;
164        ammusRajahdys.Force = 5;
165        if (kohde.Tag.Equals("ampiainen")) kohde.Destroy();
166       
167    }
168    void TörmääAmpiaiseen (PhysicsObject pelaaja, PhysicsObject ampiainen)
169    {
170        AloitaAlusta();
171
172    }
173    void AloitaAlusta ()
174    {
175        ClearAll();
176        Begin();
177    }
178    void LisaaNappaimet()
179
180    {
181        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
182        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
183
184        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
185        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
186        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
187
188        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
189
190        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
191        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
192        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
193        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
194
195        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
196    }
197
198    void Liikuta(PlatformCharacter hahmo, double nopeus)
199    {
200        hahmo.Walk(nopeus);
201    }
202    void AmmuAseella(PlatformCharacter pelaaja)
203    {
204        PhysicsObject ammus = pelaaja.Weapon.Shoot();
205
206        if (ammus != null)
207        {
208            ammus.IgnoresExplosions = true;
209            //ammus.Size *= 3;
210            //ammus.Image = ...
211            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
212        }
213    }
214
215    void Hyppaa(PlatformCharacter hahmo, double nopeus)
216    {
217        hahmo.Jump(nopeus);
218        hyppyAani.Play();
219    }
220
221    void TormaaKolikkoon(PhysicsObject hahmo, PhysicsObject tahti)
222    {
223        maaliAani.Play();
224        MessageDisplay.Add("You get the coin!");
225        tahti.Destroy();
226        kolikoidenMaara--;
227        pisteLaskuri.Value--;
228
229        if (kolikoidenMaara <= 00) SiirrySeuraavaanKenttaan();
230    }
231    void SiirrySeuraavaanKenttaan ()
232    {
233        ClearAll();
234        kenttaMenossa++;
235        if (kenttaMenossa >= kentat.Length) VoititPelin();
236        else AloitaPeli();
237    }
238    void VoititPelin ()
239    {
240        Label tekstikentta = new Label("Voitit pelin");
241        GameObject hymynaama = new GameObject(100, 100);
242        hymynaama.Image = LoadImage("Hymynaama");
243        tekstikentta.Y += 100;
244        Add(hymynaama);
245        //hymynaama.Y -= 100;
246        Add(tekstikentta);
247        tekstikentta.Size = new Vector(50, 200);
248        tekstikentta.TextureFillsShape = true;
249        tekstikentta.TextScale = new Vector(3, 3);
250
251        GameObject alusta = new GameObject(150, 60);
252        alusta.Image = LoadImage("alusta");
253        Add(alusta);
254        alusta.Y -= 100;
255        GameObject lopeta = new GameObject(150, 60);
256        lopeta.Image = LoadImage("lopeta");
257        Add(lopeta);
258        lopeta.Y -= 175;
259        IsMouseVisible = true;
260        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, delegate {
261            if (Mouse.IsCursorOn(alusta)) { ClearAll(); kenttaMenossa = 0; AloitaPeli(); }
262            else if (Mouse.IsCursorOn(lopeta)) ConfirmExit();
263        },null
264               
265        );
266    }
267
268}
Note: See TracBrowser for help on using the repository browser.