source: 2015/30/ValtteriT/Labyrintti/Labyrintti/Labyrintti/Labyrintti.cs @ 10335

Revision 7028, 8.0 KB checked in by mivasata, 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 Labyrintti : PhysicsGame
10{
11    const double nopeus = 30000;
12    const double hyppyNopeus = 3000;
13    const int RUUDUN_KOKO = 40;
14
15    AssaultRifle pelaajan1Ase;
16
17    Image PlasmaPanos = LoadImage("PlasmaParticle");
18    //Image LaserBeam = LoadImage("LaserBeam");
19    Image tankinKuva = LoadImage("Tankki");
20
21    PhysicsObject pelaaja1;
22    PhysicsObject CannonBall;
23    IntMeter Elamat;
24
25    int kenttaNro = 1;
26   
27    SoundEffect RajahdysAani = LoadSoundEffect("RajahdysAani");
28
29    public override void Begin()
30    {
31        ClearAll();
32
33        Gravity = new Vector(0, 0);
34
35        LuoKentta();
36        LisaaNappaimet();
37
38        Camera.Follow(pelaaja1);
39        Camera.ZoomFactor = 1.2;
40        Camera.StayInLevel = false;
41    }
42
43    void SeuraavaKentta()
44    {
45        ClearAll();
46
47        if (kenttaNro > 2)
48        {
49            Exit(); //Voitto
50        }
51        else
52        {
53            Begin();
54        }
55       
56
57    }
58
59
60    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
61    {
62        //Kasvatetaan kenttänumeroa yhdellä ja siirrytään seuraavaan kenttään:
63        kenttaNro++;
64        SeuraavaKentta();
65    }
66
67
68
69    void LuoKentta()
70    {
71        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttaNro);
72        kentta.SetTileMethod('#', LisaaTaso);
73        kentta.SetTileMethod('3', LisaaTaso2);
74        kentta.SetTileMethod('N', LisaaPelaaja);
75        kentta.SetTileMethod('4', LisaaMiina);
76        kentta.SetTileMethod('5', LisaaMaali);
77        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
78        Level.CreateBorders();
79        Level.Background.Color = Color.White;
80    }
81
82    void LisaaMaali(Vector paikka, double leveys, double korkeus)
83    {
84        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
85        taso.Position = paikka;
86        taso.Tag = "maali";
87        taso.Color = Color.Aqua;
88        Add(taso);
89    }
90
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       
99    }
100
101    void LisaaTaso2(Vector paikka, double leveys, double korkeus)
102    {
103        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
104        taso.Position = paikka;
105        taso.Color = Color.Gray;
106        taso.IgnoresExplosions = true;
107        Add(taso);
108    }
109
110    void LisaaMiina(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject Miina = PhysicsObject.CreateStaticObject(30, 30);
113        Miina.Size = new Vector(30, 30);
114        Miina.Position = paikka;
115        Miina.Color = Color.LightGray;
116        Miina.Tag = "Miina";
117        Add (Miina);
118
119        AddCollisionHandler(Miina, "CannonBall", AmmuitMiinan);
120    }
121
122    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
123    {
124        pelaaja1 = new PhysicsObject(20, 20);
125        pelaaja1.Position = paikka;
126        pelaaja1.Restitution = 0.5;
127        pelaaja1.Mass = 2.5;
128        pelaaja1.KineticFriction = 1;
129        pelaaja1.LinearDamping = 0.1;
130        pelaaja1.Image = tankinKuva;
131        pelaaja1.Tag = "tankki";
132        AddCollisionHandler(pelaaja1, "Miina", TormaaMiinaan);
133        AddCollisionHandler(pelaaja1, "maali", TormasiMaaliin);
134
135        Add(pelaaja1);
136
137        Elamat = new IntMeter(3, 0, 3);
138        Elamat.LowerLimit += delegate { pelaaja1.Destroy(); };
139        ProgressBar elamaPalkki = new ProgressBar(150, 20);
140        elamaPalkki.X = Screen.Left + 150;
141        elamaPalkki.Y = Screen.Top - 20;
142        elamaPalkki.BindTo(Elamat);
143        Add(elamaPalkki);
144       
145        pelaajan1Ase = new AssaultRifle(60, 10);
146        pelaajan1Ase.IsVisible = false;
147        pelaajan1Ase.CanHitOwner = false;
148        pelaajan1Ase.FireRate = 10;
149        pelaajan1Ase.Power.DefaultValue = 150;
150        //pelaajan1Ase.ProjectileCollision = AmmusOsui;
151        pelaajan1Ase.Ammo.Value = 25;
152        pelaajan1Ase.X = 20.0;
153        //pelaajan1Ase.ProjectileCollision = CollisionHandler.DestroyTarget;
154        //pelaajan1Ase.ProjectileCollision = AmmuitMiinan;
155
156        pelaaja1.Add(pelaajan1Ase);
157    }
158    void AmmusOsui(PhysicsObject ammus, PhysicsObject Miina)
159
160    {
161        //Miina.Destroy();
162        //ammus.Destroy();   
163    }
164
165    void LisaaNappaimet()
166    {
167        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
168        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
169        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Begin, "Aloita alusta");
170       
171        Mouse.ListenMovement(0.0, Tahtaa, "Tahtaa aseella");
172        IsMouseVisible = true;
173        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
174        Keyboard.Listen(Key.Space, ButtonState.Down, Liiku, "Liikkuu", pelaaja1);
175
176        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector (-nopeus, 0));
177        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(nopeus, 0));
178        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikkuu eteenpäin", pelaaja1, new Vector(0, nopeus));
179        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikkuu taaksepäin", pelaaja1, new Vector(0, -nopeus));
180        Keyboard.Listen(Key.Up, ButtonState.Up, Liikuta, "Ei liiku", pelaaja1, new Vector(0, 0));
181       
182        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
183       
184        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, new Vector (-nopeus, 0));
185        ControllerOne.Listen(Button.X, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, new Vector (nopeus, 0));
186        ControllerOne.Listen(Button.Y, ButtonState.Down, Liikuta, "Pelaaja liikkuu eteenpäin", pelaaja1, new Vector (0, nopeus));
187        ControllerOne.Listen(Button.A, ButtonState.Down, Liikuta, "Pelaaja liikkuu taaksepäin", pelaaja1, new Vector (0, -nopeus));
188
189        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
190    }
191    void Liiku(PhysicsObject hahmo)
192    {
193        hahmo.Push(Vector.FromLengthAndAngle(nopeus, hahmo.Angle));
194    }
195
196
197    void Liikuta(PhysicsObject hahmo, Vector nopeus)
198    {
199        hahmo.Push(nopeus);
200    }
201
202    void EteenJaTaaksePain(PhysicsObject hahmo, double nopeus)
203    {
204        //hahmo.(nopeus);
205    }
206
207    void TormaaMiinaan(PhysicsObject hahmo, PhysicsObject Miina)
208    {
209        MessageDisplay.Add("!");
210        Miina.Destroy();
211        Explosion rajahdys = new Explosion(50);
212        rajahdys.Position = Miina.Position;
213        rajahdys.Speed = 250.0;
214        rajahdys.Force = 65;
215        Add(rajahdys);
216
217        Elamat.Value--;
218    }
219
220    void AmmuitMiinan(PhysicsObject ammus, PhysicsObject Miina)
221    {
222        MessageDisplay.Add("Tuhosit miinan!");
223        Miina.Destroy();
224        ammus.Destroy();
225        Explosion rajahdys = new Explosion(50);
226        rajahdys.Position = Miina.Position;
227        rajahdys.Speed = 250.0;
228        rajahdys.Force = 65;
229        Add(rajahdys);
230    }
231
232    void Tahtaa(AnalogState hiirenLiike)
233    {
234        Vector suunta = (Mouse.PositionOnWorld - pelaaja1.AbsolutePosition).Normalize();
235        pelaaja1.Angle = suunta.Angle;
236    }
237
238    void AmmuAseella(AssaultRifle ase)
239    {
240    CannonBall = ase.Shoot();
241
242        if(CannonBall != null)
243        {
244        CannonBall.Size *= 1.5;
245        CannonBall.Image = PlasmaPanos;
246            CannonBall.MaximumLifetime = TimeSpan.FromSeconds(2.5);
247            CannonBall.Restitution = 1.0;
248            CannonBall.Tag = "CannonBall";
249            CannonBall.IgnoresExplosions = false;
250            CannonBall.IgnoresPhysicsLogics = true;
251        }
252    }
253
254
255
256
257
258
259}
Note: See TracBrowser for help on using the repository browser.