source: 2012/23/JimB/NameInPending/NameinPending/NameinPending/NameinPending/NameinPending.cs @ 2814

Revision 2814, 12.0 KB checked in by jijoback, 11 years ago (diff)

Pelin voi jopa voittaa!

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class PeliUkko : PhysicsObject
10{
11    public IntMeter Elamat;
12    public Explosion ViimeisinRajahdys = null;
13    public bool aseValmiina = true;
14    public bool naattiValmiina = true;
15
16    public PeliUkko(double leveys, double korkeus)
17        : base(leveys, korkeus)
18    {
19        Elamat = new IntMeter(50, 0, 100);
20    }
21}
22
23
24
25public class NameinPending : PhysicsGame
26{
27
28    PeliUkko pelaaja1, pelaaja2, pelaaja3, pelaaja4;
29    double ampumisnopeus = 450;
30    ExplosionSystem NaattiPoks;
31    IntMeter Pelaajat = new IntMeter (4);
32    //PhysicsObject naatti;
33
34
35    public override void Begin()
36    {
37        NaattiPoks = new ExplosionSystem(LoadImage("naattishard"), 1500);
38        Add(NaattiPoks);
39        // TODO: Kirjoita ohjelmakoodisi tähän
40        LuoKentta();
41
42        MessageDisplay.Add("F1 - Näytä Ohjaimet");
43        Keyboard.Listen(Key.F1, ButtonState.Pressed, Ohjeet, "Näytä ohjaimet");
44
45        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
46    }
47    void Ohjeet()
48    {
49        MessageDisplay.Add("Pelaaja 1 - WASD - Q ampuminen - E Kranaatti");
50        MessageDisplay.Add("Pelaaja 2 - Nuolet - Numpad0 ampuminen - CTRL Kranaatti");
51        MessageDisplay.Add("Pelaaja 3 - TFGH - R ampuminen - Y Kranaatti");
52        MessageDisplay.Add("Pelaaja 4 - IJKL - U ampuminen - O Kranaatti");
53    }
54    void LuoKentta()
55    {
56        TileMap ruudut = TileMap.FromLevelAsset("level");
57        //TileMap pelaaja = TileMap.FromLevelAsset("level");
58        ruudut.SetTileMethod('=', LuoPalikka);
59        ruudut.SetTileMethod('s', LuoPalikka);
60        ruudut.SetTileMethod('1', LuoPelaaja1);
61        ruudut.SetTileMethod('2', LuoPelaaja2);
62        ruudut.SetTileMethod('3', LuoPelaaja3);
63        ruudut.SetTileMethod('4', LuoPelaaja4);
64        ruudut.Execute(25, 25);
65
66        Level.BackgroundColor = Color.Silver;
67        Camera.ZoomToLevel();
68    }
69    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
70    {
71
72        pelaaja1 = LuoPelaaja(paikka);
73        pelaaja1.Image = LoadImage("Pelaaja1");
74        pelaaja1.CollisionIgnoreGroup = 1;
75
76        LuoHPNaytto(Screen.Left + 50, Screen.Top - 50, pelaaja1.Elamat, Color.Blue);
77
78        Keyboard.Listen(Key.A, ButtonState.Down, Liike, null, pelaaja1, new Vector(-200, 0));
79        Keyboard.Listen(Key.A, ButtonState.Released, Liike, null, pelaaja1, new Vector(0, 0));
80        Keyboard.Listen(Key.D, ButtonState.Down, Liike, null, pelaaja1, new Vector(200, 0));
81        Keyboard.Listen(Key.D, ButtonState.Released, Liike, null, pelaaja1, new Vector(0, 0));
82        Keyboard.Listen(Key.S, ButtonState.Down, Liike, null, pelaaja1, new Vector(0, -200));
83        Keyboard.Listen(Key.S, ButtonState.Released, Liike, null, pelaaja1, new Vector(0, 0));
84        Keyboard.Listen(Key.W, ButtonState.Down, Liike, null, pelaaja1, new Vector(0, 200));
85        Keyboard.Listen(Key.W, ButtonState.Released, Liike, null, pelaaja1, new Vector(0, 0));
86        Keyboard.Listen(Key.Q, ButtonState.Down, Ammu, null, pelaaja1);
87        Keyboard.Listen(Key.E, ButtonState.Down, Heita, null, pelaaja1);
88    }
89    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
90    {
91
92        pelaaja2 = LuoPelaaja(paikka);
93        pelaaja2.Image = LoadImage("Pelaaja2");
94        pelaaja2.CollisionIgnoreGroup = 2;
95        LuoHPNaytto(Screen.Right - 50, Screen.Top - 50, pelaaja2.Elamat, Color.Yellow);
96
97
98        Keyboard.Listen(Key.Left, ButtonState.Down, Liike, null, pelaaja2, new Vector(-200, 0));
99        Keyboard.Listen(Key.Left, ButtonState.Released, Liike, null, pelaaja2, new Vector(0, 0));
100        Keyboard.Listen(Key.Right, ButtonState.Down, Liike, null, pelaaja2, new Vector(200, 0));
101        Keyboard.Listen(Key.Right, ButtonState.Released, Liike, null, pelaaja2, new Vector(0, 0));
102        Keyboard.Listen(Key.Down, ButtonState.Down, Liike, null, pelaaja2, new Vector(0, -200));
103        Keyboard.Listen(Key.Down, ButtonState.Released, Liike, null, pelaaja2, new Vector(0, 0));
104        Keyboard.Listen(Key.Up, ButtonState.Down, Liike, null, pelaaja2, new Vector(0, 200));
105        Keyboard.Listen(Key.Up, ButtonState.Released, Liike, null, pelaaja2, new Vector(0, 0));
106        Keyboard.Listen(Key.NumPad0, ButtonState.Down, Ammu, null, pelaaja2);
107        Keyboard.Listen(Key.RightControl, ButtonState.Down, Heita, null, pelaaja2);
108    }
109    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
110    {
111
112        pelaaja3 = LuoPelaaja(paikka);
113        pelaaja3.Image = LoadImage("Pelaaja3");
114        pelaaja3.CollisionIgnoreGroup = 3;
115        LuoHPNaytto(Screen.Right - 50, Screen.Bottom + 50, pelaaja3.Elamat, Color.Red);
116
117
118        Keyboard.Listen(Key.F, ButtonState.Down, Liike, null, pelaaja3, new Vector(-200, 0));
119        Keyboard.Listen(Key.F, ButtonState.Released, Liike, null, pelaaja3, new Vector(0, 0));
120        Keyboard.Listen(Key.H, ButtonState.Down, Liike, null, pelaaja3, new Vector(200, 0));
121        Keyboard.Listen(Key.H, ButtonState.Released, Liike, null, pelaaja3, new Vector(0, 0));
122        Keyboard.Listen(Key.G, ButtonState.Down, Liike, null, pelaaja3, new Vector(0, -200));
123        Keyboard.Listen(Key.G, ButtonState.Released, Liike, null, pelaaja3, new Vector(0, 0));
124        Keyboard.Listen(Key.T, ButtonState.Down, Liike, null, pelaaja3, new Vector(0, 200));
125        Keyboard.Listen(Key.T, ButtonState.Released, Liike, null, pelaaja3, new Vector(0, 0));
126        Keyboard.Listen(Key.R, ButtonState.Down, Ammu, null, pelaaja3);
127        Keyboard.Listen(Key.Y, ButtonState.Down, Heita, null, pelaaja3);
128    }
129    void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
130    {
131
132        pelaaja4 = LuoPelaaja(paikka);
133        pelaaja4.Image = LoadImage("Pelaaja4");
134        pelaaja4.CollisionIgnoreGroup = 4;
135        LuoHPNaytto(Screen.Left + 50, Screen.Bottom + 50, pelaaja4.Elamat, Color.Purple);
136
137
138
139
140        Keyboard.Listen(Key.J, ButtonState.Down, Liike, null, pelaaja4, new Vector(-200, 0));
141        Keyboard.Listen(Key.J, ButtonState.Released, Liike, null, pelaaja4, new Vector(0, 0));
142        Keyboard.Listen(Key.L, ButtonState.Down, Liike, null, pelaaja4, new Vector(200, 0));
143        Keyboard.Listen(Key.L, ButtonState.Released, Liike, null, pelaaja4, new Vector(0, 0));
144        Keyboard.Listen(Key.K, ButtonState.Down, Liike, null, pelaaja4, new Vector(0, -200));
145        Keyboard.Listen(Key.K, ButtonState.Released, Liike, null, pelaaja4, new Vector(0, 0));
146        Keyboard.Listen(Key.I, ButtonState.Down, Liike, null, pelaaja4, new Vector(0, 200));
147        Keyboard.Listen(Key.I, ButtonState.Released, Liike, null, pelaaja4, new Vector(0, 0));
148        Keyboard.Listen(Key.U, ButtonState.Down, Ammu, null, pelaaja4);
149        Keyboard.Listen(Key.O, ButtonState.Down, Heita, null, pelaaja4);
150    }
151    PeliUkko LuoPelaaja(Vector paikka)
152    {
153        PeliUkko pelaaja = new PeliUkko(18, 18);
154        pelaaja.Restitution = 0;
155        pelaaja.AngularDamping = Double.Epsilon;
156        pelaaja.Position = paikka;
157        pelaaja.Shape = Shape.Circle;
158        Add(pelaaja);
159        AddCollisionHandler<PeliUkko, PhysicsObject>(pelaaja, "bullet", Osuma);
160
161        return pelaaja;
162
163    }
164    void KukaKuoli(PeliUkko ukko)
165    {
166        int PelaajanNumero = 0;
167        Pelaajat.Value -= 1;
168        if (ukko == pelaaja1)
169        {
170            MessageDisplay.Add("Pelaaja 1 kuoli!");
171        }
172        else if (ukko == pelaaja2)
173        {
174            MessageDisplay.Add("Pelaaja 2 kuoli!");
175        }
176        else if (ukko == pelaaja3)
177        {
178            MessageDisplay.Add("Pelaaja 3 kuoli!");
179        }
180        else if (ukko == pelaaja4)
181        {
182            MessageDisplay.Add("Pelaaja 4 kuoli!");
183        }
184        else MessageDisplay.Add("WTF?");
185
186        if (Pelaajat.Value <= 1)
187       
188        {
189            if (!pelaaja1.IsDestroyed) PelaajanNumero = 1;
190            else if (!pelaaja2.IsDestroyed) PelaajanNumero = 2;
191            else if (!pelaaja3.IsDestroyed) PelaajanNumero = 3;
192            else if (!pelaaja4.IsDestroyed) PelaajanNumero = 4;
193            Label Voitto = new Label("Pelaaja" + PelaajanNumero + "Voittaa");
194            Add(Voitto);
195
196        }
197     }
198    void LuoHPNaytto(double x, double y, IntMeter sidottavaMittari, Color taustavari)
199    {
200        Label hp = new Label();
201        hp.Color = taustavari;
202        hp.BindTo(sidottavaMittari);
203        hp.Position = new Vector(x, y);
204        Add(hp);
205    }
206    void Osuma(PeliUkko tormaaja, PhysicsObject ammus)
207    {
208        tormaaja.Elamat.Value -= 1;
209        if (tormaaja.Elamat.Value <= 0)
210        {
211            tormaaja.Destroy();
212            KukaKuoli(tormaaja);
213        }
214        ammus.Destroy();
215    }
216    void Ammu(PeliUkko pelaaja)
217    {
218        if (pelaaja.aseValmiina)
219        {
220            PhysicsObject bullet = new PhysicsObject(LoadImage("bullet"));
221            Add(bullet);
222            bullet.Tag = "bullet";
223            bullet.Restitution = 0;
224            // AddCollisionHandler(bullet, CollisionHandler.ExplodeObject(100, false));
225            AddCollisionHandler(bullet, "Seinä", CollisionHandler.DestroyObject);
226            bullet.Position = pelaaja.Position;
227            bullet.Angle = pelaaja.Angle;
228            bullet.CollisionIgnoreGroup = pelaaja.CollisionIgnoreGroup;
229            Vector suunta = Vector.FromLengthAndAngle(ampumisnopeus, pelaaja.Angle + Angle.RightAngle);
230            bullet.Hit(suunta);
231            pelaaja.aseValmiina = false;
232            Timer.SingleShot(0.5, delegate { pelaaja.aseValmiina = true; });
233        }
234    }
235    void Heita(PeliUkko pelaaja)
236    {
237        if (pelaaja.naattiValmiina)
238        {
239            PhysicsObject naatti = new PhysicsObject(LoadImage("naatti"));
240            Add(naatti);
241            naatti.Tag = "naatti";
242            naatti.Restitution = 0.6;
243            naatti.Position = pelaaja.Position;
244            naatti.Angle = pelaaja.Angle;
245            naatti.CollisionIgnoreGroup = pelaaja.CollisionIgnoreGroup;
246            Vector suunta = Vector.FromLengthAndAngle(ampumisnopeus, pelaaja.Angle + Angle.RightAngle);
247            naatti.Hit(suunta);
248            pelaaja.naattiValmiina = false;
249            Timer.SingleShot(2.5, delegate { KranaattiRajahti(naatti.X, naatti.Y, 375); naatti.Destroy(); });
250            Timer.SingleShot(6.5, delegate { pelaaja.naattiValmiina = true; });
251        }
252
253    }
254    void KranaattiRajahti(double x, double y, int numberOfParticles)
255    {
256        NaattiPoks.X = x;
257        NaattiPoks.Y = y;
258        NaattiPoks.MinScale = 1;
259        NaattiPoks.MaxScale = 10;
260        NaattiPoks.AddEffect(x, y, numberOfParticles);
261        Explosion e = new Explosion(65);
262        Add(e);
263        e.Position = new Vector(x, y);
264        e.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector suunta) { ShockHit(kohde, suunta, e); };
265    }
266    void ShockHit(IPhysicsObject kohde, Vector suunta, Explosion rajahdys)
267    {
268        if (!(kohde is PeliUkko)) return;
269        PeliUkko ukko = kohde as PeliUkko;
270        if (ukko.ViimeisinRajahdys == rajahdys) return;
271
272        double etaisyys = Vector.Distance(ukko.Position, rajahdys.Position);
273        ukko.Elamat.Value -= (int)Math.Floor(1500 / etaisyys);
274        if (ukko.Elamat.Value <= 0)
275        {
276            ukko.Destroy();
277            KukaKuoli(ukko);
278        }
279        ukko.ViimeisinRajahdys = rajahdys;
280    }
281    void Liike(PeliUkko pelaaja, Vector nopeus)
282    {
283        pelaaja.Velocity = nopeus;
284        if (nopeus.Magnitude != 0)
285        {
286            pelaaja.Angle = nopeus.Angle - Angle.RightAngle;
287        }
288    }
289    void LuoPalikka(Vector paikka, double leveys, double korkeus)
290    {
291        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
292        palikka.Position = paikka;
293        palikka.Tag = "Seinä";
294        palikka.Restitution = 0;
295        palikka.Shape = Shape.Rectangle;
296        palikka.Color = Color.White;
297        Add(palikka);
298    }
299}
Note: See TracBrowser for help on using the repository browser.