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

Revision 6688, 6.6 KB checked in by misakana, 5 years ago (diff)

Kaikki toimii.

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
21    IntMeter pisteLaskuri = new IntMeter(0,0,0);
22
23
24    SoundEffect maaliAani = LoadSoundEffect("maali");
25
26    public override void Begin()
27    {
28        AlkuValikko();
29    }
30
31
32    void AlkuValikko()
33    {
34        MultiSelectWindow alkuValikko = new MultiSelectWindow (
35       "Pelin alkuvalikko","Aloita peli", "Lopeta");
36        Add(alkuValikko);
37
38        alkuValikko.AddItemHandler(0, AloitaPeli);
39        alkuValikko.AddItemHandler(1, Exit);
40
41
42    }
43    void AloitaPeli()
44    {
45        ClearAll();
46        IsPaused = false;
47        Gravity = new Vector(0, -1000);
48
49        LuoKentta();
50        LisaaNappaimet();
51        LuoPistelaskuri();
52        Camera.Follow(pelaaja1);
53        Camera.ZoomFactor = 1.2;
54        Camera.StayInLevel = true;
55    }
56
57    void LuoKentta()
58    {
59        TileMap kentta = TileMap.FromLevelAsset("kentta1");
60        kentta.SetTileMethod('#', LisaaTaso);
61        kentta.SetTileMethod('*', LisaaPommi);
62        kentta.SetTileMethod('S', LisaaPelaaja);
63        kentta.SetTileMethod('V', LisaaVihollinen);
64        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
65        Level.CreateBorders();
66        Level.Background.CreateGradient(Color.White, Color.Red);
67    }
68
69    void LisaaTaso(Vector paikka, double leveys, double korkeus)
70    {
71        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
72        taso.Position = paikka;
73        taso.Color = Color.Green;
74        Add(taso);
75    }
76
77    void LisaaPommi(Vector paikka, double leveys, double korkeus)
78    {
79        PhysicsObject pommi = PhysicsObject.CreateStaticObject(leveys, korkeus);
80        pommi.IgnoresCollisionResponse = true;
81        pommi.Position = paikka;
82        pommi.Image = pommiKuva;
83        pommi.Tag = "pommi";
84        Add(pommi);
85
86        pisteLaskuri.MaxValue++;
87    }
88
89    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
90    {
91        pelaaja1 = new PlatformCharacter(leveys, korkeus);
92        pelaaja1.Position = paikka;
93        pelaaja1.Mass = 6.0;
94        pelaaja1.Image = pelaajanKuva;
95        AddCollisionHandler(pelaaja1, "pommi", TormaaPommiin);
96        AddCollisionHandler(pelaaja1, "vihollinen", TormaaViholliseen);
97        Add(pelaaja1);
98
99        pelaaja1.Weapon = new AssaultRifle(20.0, 20.0);
100        pelaaja1.Weapon.IsVisible = false;
101    }
102
103    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
104    {
105        PlatformCharacter vihollinen = new PlatformCharacter(leveys, korkeus);
106        vihollinen.Position = paikka;
107        vihollinen.Image = vihollisenKuva;
108        vihollinen.Tag = "vihollinen";
109        Add(vihollinen);
110
111        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
112        tasoAivot.Speed = 100;
113
114        vihollinen.Brain = tasoAivot;
115        tasoAivot.FallsOffPlatforms = true;
116
117        tasoAivot.JumpSpeed = 700;
118        tasoAivot.TriesToJump = true;
119    }
120
121    void LisaaNappaimet()
122    {
123        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
124        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
125
126        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
127        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
128        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
129
130        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ampuu aseella", (AssaultRifle) pelaaja1.Weapon);
131
132        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
133
134        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
135        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
136        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
137    }
138
139    void Liikuta(PlatformCharacter hahmo, double nopeus)
140    {
141        hahmo.Walk(nopeus); 
142    }
143
144    void Hyppaa(PlatformCharacter hahmo, double nopeus)
145    {
146        hahmo.Jump(nopeus);
147    }
148
149    void AmmusTormaaPommiin(PhysicsObject sotilas, PhysicsObject pommi)
150    {
151        maaliAani.Play();
152        MessageDisplay.Add("Kaboom!");
153
154        pisteLaskuri.Value += 1;
155
156        Explosion räjähdys = new Explosion(50);
157        räjähdys.Position = pommi.Position;
158        Add(räjähdys);
159        pommi.Destroy();
160    }
161
162    void AmmuAseella(AssaultRifle ase)
163    {
164
165        PhysicsObject ammus = ase.Shoot();
166        if (ammus != null)
167        {
168            ammus.LifetimeLeft = new TimeSpan(0, 0, 2);
169            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject b)
170            {
171                a.Destroy();
172            });
173            AddCollisionHandler(ammus, "pommi", AmmusTormaaPommiin);
174
175        }
176
177
178
179    }
180
181    void LuoPistelaskuri()
182    {
183        pisteLaskuri.UpperLimit += Exit;
184
185        Label pisteNaytto = new Label();
186        pisteNaytto.X = Screen.Right -300;
187        pisteNaytto.Y = Screen.Top - 100;
188        pisteNaytto.TextColor = Color.Black;
189        pisteNaytto.TextScale *= 3;
190        pisteNaytto.Color = Color.White;
191
192        pisteNaytto.BindTo(pisteLaskuri);
193        Add(pisteNaytto);
194    }
195
196    void TormaaPommiin(PhysicsObject sotilas, PhysicsObject pommi)
197    {
198        Explosion räjähdys = new Explosion(50);
199        räjähdys.Position = pommi.Position;
200        Add(räjähdys);
201        pommi.Destroy();
202
203        PelaajaKuolee();
204    }
205
206    void TormaaViholliseen(PhysicsObject sotilas, PhysicsObject pommi)
207    {
208        PelaajaKuolee();
209    }
210
211
212    void PelaajaKuolee()
213    {
214        pelaaja1.Destroy();
215        IsPaused = true;
216        //Timer.SingleShot(1,AlkuValikko);
217        Timer loppuAjastin = new Timer();
218        loppuAjastin.Interval = 1.0;
219        loppuAjastin.IgnorePause = true;
220        loppuAjastin.Timeout += delegate
221        {
222           
223            AlkuValikko();
224        };
225        loppuAjastin.Start(1);
226    }
227
228}
Note: See TracBrowser for help on using the repository browser.