source: 2015/27/SampoR/Pommipeli/Pommipeli/Pommipeli/Pommipeli.cs @ 6759

Revision 6759, 7.9 KB checked in by saraivio, 6 years ago (diff)

Valmis Bomb Squad.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Pommipeli : PhysicsGame
10{
11    const double nopeus = 250;
12    const double hyppyNopeus = 780;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16
17    Image pelaajanKuva = LoadImage("sotilas");
18    Image pommiKuva = LoadImage("pommi");
19    Image vihollisenKuva = LoadImage("Vihollinen");
20    Image otsikkoKuva = LoadImage("Otsikko");
21
22    IntMeter pisteLaskuri = new IntMeter(0,0,0);
23
24
25    SoundEffect maaliAani = LoadSoundEffect("maali");
26
27    bool pelinNimeaEiOleNaytetty = true;
28
29    public override void Begin()
30    {
31        AlkuValikko();
32    }
33
34
35    void AlkuValikko()
36    {
37        MediaPlayer.Play("Survival");
38        MediaPlayer.IsRepeating = true;
39
40        Level.Background.Color = Color.Yellow;
41
42        MultiSelectWindow alkuValikko = new MultiSelectWindow (
43       "Pelin alkuvalikko","Aloita peli", "Lopeta");
44        Add(alkuValikko);
45
46        alkuValikko.AddItemHandler(0, AloitaPeli);
47        alkuValikko.AddItemHandler(1, Exit);
48
49        if (pelinNimeaEiOleNaytetty) // Näyttää pelin nimen ainoastaan ekassa alkuvalikossa.
50        {
51            GameObject pelinnimi = new GameObject(Level.Width, Level.Height / 3);
52            pelinnimi.Image = otsikkoKuva;
53            pelinnimi.Y = alkuValikko.Top + pelinnimi.Height * 0.65;
54            Add(pelinnimi);
55            pelinNimeaEiOleNaytetty = false;
56
57            Label tekijannimi = new Label("Made By Sampo-Tapio Raivio");
58            tekijannimi.Y = Level.Bottom + alkuValikko.Height;
59            Add(tekijannimi);
60        }
61
62    }
63    void AloitaPeli()
64    {
65        ClearAll();
66        MediaPlayer.Play("NeverGo");
67        MediaPlayer.IsRepeating = true;
68        pisteLaskuri.Value = 0;
69        pisteLaskuri.MaxValue = 0;
70        IsPaused = false;
71        Gravity = new Vector(0, -1000);
72
73        LuoKentta();
74        LisaaNappaimet();
75        LuoPistelaskuri();
76        Camera.Follow(pelaaja1);
77        Camera.ZoomFactor = 1.2;
78        Camera.StayInLevel = true;
79    }
80
81    void LuoKentta()
82    {
83        TileMap kentta = TileMap.FromLevelAsset("kentta1");
84        kentta.SetTileMethod('#', LisaaTaso);
85        kentta.SetTileMethod('*', LisaaPommi);
86        kentta.SetTileMethod('S', LisaaPelaaja);
87        kentta.SetTileMethod('V', LisaaVihollinen);
88        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
89        Level.CreateBorders();
90        Level.Background.CreateGradient(Color.White, Color.Red);
91    }
92
93    void LisaaTaso(Vector paikka, double leveys, double korkeus)
94    {
95        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
96        taso.Position = paikka;
97        taso.Color = Color.Green;
98        Add(taso);
99    }
100
101    void LisaaPommi(Vector paikka, double leveys, double korkeus)
102    {
103        PhysicsObject pommi = PhysicsObject.CreateStaticObject(leveys, korkeus);
104        pommi.IgnoresCollisionResponse = true;
105        pommi.Position = paikka;
106        pommi.Image = pommiKuva;
107        pommi.Tag = "pommi";
108        Add(pommi);
109
110        pisteLaskuri.MaxValue++;
111    }
112
113    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
114    {
115        pelaaja1 = new PlatformCharacter(leveys, korkeus);
116        pelaaja1.Position = paikka;
117        pelaaja1.Mass = 6.0;
118        pelaaja1.Image = pelaajanKuva;
119        AddCollisionHandler(pelaaja1, "pommi", TormaaPommiin);
120        AddCollisionHandler(pelaaja1, "vihollinen", TormaaViholliseen);
121        Add(pelaaja1);
122
123        pelaaja1.Weapon = new AssaultRifle(20.0, 20.0);
124        pelaaja1.Weapon.IsVisible = false;
125    }
126
127    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
128    {
129        PlatformCharacter vihollinen = new PlatformCharacter(leveys, korkeus);
130        vihollinen.Position = paikka;
131        vihollinen.Image = vihollisenKuva;
132        vihollinen.Tag = "vihollinen";
133        Add(vihollinen);
134
135        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
136        tasoAivot.Speed = 100;
137
138        vihollinen.Brain = tasoAivot;
139        tasoAivot.FallsOffPlatforms = true;
140
141        tasoAivot.JumpSpeed = 700;
142        tasoAivot.TriesToJump = true;
143    }
144
145    void LisaaNappaimet()
146    {
147        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
148        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
149
150        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
151        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
152        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
153
154        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ampuu aseella", (AssaultRifle) pelaaja1.Weapon);
155
156        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
157
158        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
159        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
160        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
161    }
162
163    void Liikuta(PlatformCharacter hahmo, double nopeus)
164    {
165        hahmo.Walk(nopeus); 
166    }
167
168    void Hyppaa(PlatformCharacter hahmo, double nopeus)
169    {
170        hahmo.Jump(nopeus);
171    }
172
173    void AmmusTormaaPommiin(PhysicsObject sotilas, PhysicsObject pommi)
174    {
175        maaliAani.Play();
176        MessageDisplay.Add("Kaboom!");
177
178        pisteLaskuri.Value += 1;
179
180        Explosion räjähdys = new Explosion(50);
181        räjähdys.Position = pommi.Position;
182        Add(räjähdys);
183        pommi.Destroy();
184        //if (pisteLaskuri.Value > 18)
185
186        //{
187           
188        //    Timer.SingleShot(0.3, delegate
189        //    {
190        //        IsPaused = true;
191        //        AlkuValikko();
192        //    });
193        //}
194    }
195
196    void AmmuAseella(AssaultRifle ase)
197
198    {
199
200        PhysicsObject ammus = ase.Shoot();
201        if (ammus != null)
202        {
203            ammus.LifetimeLeft = new TimeSpan(0, 0, 2);
204            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
205            {
206                a.Destroy();
207            });
208            AddCollisionHandler(ammus, "pommi", AmmusTormaaPommiin);
209
210        }
211
212
213
214    }
215
216    void LuoPistelaskuri()
217    {
218        //pisteLaskuri.MaxValue = 19;
219        pisteLaskuri.UpperLimit += delegate
220        {
221            Timer.SingleShot(0.3, delegate
222            {
223                IsPaused = true;
224                AlkuValikko();
225            });
226        };
227
228        Label pisteNaytto = new Label();
229        pisteNaytto.X = Screen.Right -300;
230        pisteNaytto.Y = Screen.Top - 100;
231        pisteNaytto.TextColor = Color.Black;
232        pisteNaytto.TextScale *= 3;
233        pisteNaytto.Color = Color.White;
234
235        pisteNaytto.BindTo(pisteLaskuri);
236        Add(pisteNaytto);
237    }
238
239    void TormaaPommiin(PhysicsObject sotilas, PhysicsObject pommi)
240    {
241        Explosion räjähdys = new Explosion(50);
242        räjähdys.Position = pommi.Position;
243        Add(räjähdys);
244        pommi.Destroy();
245        Timer.SingleShot(0.2, PelaajaKuolee);
246    }
247
248    void TormaaViholliseen(PhysicsObject sotilas, PhysicsObject pommi)
249    {
250        PelaajaKuolee();
251    }
252
253
254    void PelaajaKuolee()
255    {
256        pelaaja1.Destroy();
257        IsPaused = true;
258        //Timer.SingleShot(1,AlkuValikko);
259        Timer loppuAjastin = new Timer();
260        loppuAjastin.Interval = 1.0;
261        loppuAjastin.IgnorePause = true;
262        loppuAjastin.Timeout += delegate
263        {
264           
265            AlkuValikko();
266        };
267        loppuAjastin.Start(1);
268    }
269
270}
Note: See TracBrowser for help on using the repository browser.