source: 2012/26/KasperiK/TheLastBattle/TheLastBattle/TheLastBattle/TheLastBattle.cs @ 10337

Revision 3401, 10.5 KB checked in by jikakuus, 9 years ago (diff)

Talletus.

Line 
1//The Last Battle
2//By: Kasperi Kuusipuro
3//vk26 2012
4
5using System;
6using System.Collections.Generic;
7using Jypeli;
8using Jypeli.Assets;
9using Jypeli.Controls;
10using Jypeli.Effects;
11using Jypeli.Widgets;
12
13public class TheLastBattle : PhysicsGame
14{
15   //Alustetaan Muuttujia
16    PhysicsObject Pelaaja1;
17    PhysicsObject Pelaaja2;
18    PhysicsObject Asteroidi;
19
20    Image IhmisAlus = LoadImage("IhmisAlus");
21    Image AlienAlus = LoadImage("AlienAlus");
22    Image taustaKuva = LoadImage("tausta");
23    Image AlienAlus2 = LoadImage("AlienAlus2");
24    Image IhmisAlus2 = LoadImage("IhmisAlus2");
25    Image AsteroidiKuva = LoadImage("asteroidi");
26
27    PlasmaCannon plasmaTykkiP1;
28    PlasmaCannon plasmaTykkiP2;
29
30    DoubleMeter elkkuMittariP1;
31    DoubleMeter elkkuMittariP2;
32
33    IntMeter pistelaskuriP1;
34    IntMeter pistelaskuriP2;
35
36    int AsteroidiLaskuri = 0;
37
38    public override void Begin()
39    {       
40        SetWindowSize(1024, 768, true);//Vaihdetaan näytön resoluutio
41        IsFullScreen = true;
42
43        //Kutsutaan Pelin luovat aliohjelmat
44        Pelaaja1 = LuoPelaaja(IhmisAlus, Level.Left + 50);
45        Pelaaja2 = LuoPelaaja(AlienAlus, Level.Right - 50);
46        AddCollisionHandler(Pelaaja1, Pelaaja2, PelaajatTormaavat);
47
48        LuoKentta();
49        LisaaOhjaimet();
50               
51        elkkuMittariP1 = LisaaElkut(Screen.Left + 150, Screen.Top - 50, Color.Red);
52        elkkuMittariP2 = LisaaElkut(Screen.Right - 150, Screen.Top - 50, Color.LimeGreen);
53
54        LisaaNaytot();
55        pistelaskuriP1 = LisaaLaskurit(Screen.Left + 100, Screen.Top - 100);
56        pistelaskuriP2 = LisaaLaskurit(Screen.Right - 100, Screen.Top - 100);
57
58        while (AsteroidiLaskuri < 17)
59        {
60            LuoSatunnainenAsteroidi();
61            AsteroidiLaskuri++;
62        }
63    }
64
65   // Luodaan Kenttä
66    void LuoKentta()
67    {
68        Level.CreateBorders(0.5, false);
69        Level.Background.Image = taustaKuva;
70        Level.Background.FitToLevel();
71        Camera.ZoomToLevel();
72
73
74        //Luodaan plasmatykki
75        plasmaTykkiP1 = new PlasmaCannon(20, 5);
76        plasmaTykkiP1.ProjectileCollision = PlasmaPalloOsuu;
77        plasmaTykkiP1.IsVisible = false;
78        plasmaTykkiP1.InfiniteAmmo = true;
79        Pelaaja1.Add(plasmaTykkiP1);
80
81        //Luodaan plasmatykki
82        plasmaTykkiP2 = new PlasmaCannon(20, 5);
83        plasmaTykkiP2.ProjectileCollision = PlasmaPalloOsuu;
84        plasmaTykkiP2.IsVisible = false;
85        plasmaTykkiP2.InfiniteAmmo = true;
86        plasmaTykkiP2.Angle = Angle.StraightAngle;
87        Pelaaja2.Add(plasmaTykkiP2);
88
89    }
90
91    PhysicsObject LuoPelaaja(Image kuva, double x)
92    {
93        PhysicsObject Pelaaja = new PhysicsObject(40, 50);
94        Pelaaja.Image = kuva;
95        Pelaaja.Restitution = 0.5;
96        Pelaaja.X = x;
97        Pelaaja.Mass = 100.0;
98        AddCollisionHandler(Pelaaja, "Asteroidi", PelaajaTormaa);
99
100        Add(Pelaaja);
101        return Pelaaja;
102    }
103
104    void LuoSatunnainenAsteroidi()
105    {
106        double asteroidiX = RandomGen.NextDouble(Level.Left + 100.0, Level.Right - 100.0);
107        double asteroidiy = RandomGen.NextDouble(Level.Bottom, Level.Top);
108        Asteroidi = PhysicsObject.CreateStaticObject(50, 50);
109        Asteroidi.Image = AsteroidiKuva;
110        Asteroidi.X = asteroidiX;
111        Asteroidi.Y = asteroidiy;
112        Asteroidi.Mass = 1000000;
113        Asteroidi.Tag = "Asteroidi";
114        Add(Asteroidi);
115    }
116
117
118    //Aliohjelma elkkumittareiden tekemiseen
119    DoubleMeter LisaaElkut(double x, double y, Color vari)
120    {
121       DoubleMeter mittari = new DoubleMeter(100);
122        mittari.MaxValue = 100;
123        ProgressBar elkkuPalkki = new ProgressBar(200, 25);
124        elkkuPalkki.BindTo(mittari);
125        Add(elkkuPalkki);
126
127        mittari.LowerLimit += elkutLoppu;
128
129        elkkuPalkki.X = x;
130        elkkuPalkki.Y = y;
131        elkkuPalkki.BarColor = vari;
132        elkkuPalkki.BorderColor = vari;
133        return mittari;
134    }
135
136   //Lisätään ohjaimet
137    void LisaaOhjaimet()
138  {
139       Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, "Pelaaja1 kaasu",Pelaaja1, 5000.0, IhmisAlus2);
140       Keyboard.Listen(Key.W, ButtonState.Released, LiikutaPelaajaa, null, Pelaaja1, 0.0, IhmisAlus);
141       Keyboard.Listen(Key.A, ButtonState.Down, KaannaPelaajaa, "Pelaaja1 käänny vasemmalle", Pelaaja1, 3.0);
142       Keyboard.Listen(Key.A, ButtonState.Released, KaannaPelaajaa, null, Pelaaja1, 0.0);
143       Keyboard.Listen(Key.D, ButtonState.Down, KaannaPelaajaa, "Pelaaja1 käänny oikealle", Pelaaja1, -3.0);
144       Keyboard.Listen(Key.D, ButtonState.Released, KaannaPelaajaa, null, Pelaaja1, 0.0);
145       Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Pelaaja1 ammu aseella", plasmaTykkiP1);
146
147       Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, "Pelaaja2 kaasu", Pelaaja2, -5000.0, AlienAlus2);
148       Keyboard.Listen(Key.Up, ButtonState.Released, LiikutaPelaajaa, null, Pelaaja2, 0.0, AlienAlus);
149       Keyboard.Listen(Key.Left, ButtonState.Down, KaannaPelaajaa, "Pelaaja2 käänny vasemmalle", Pelaaja2, 3.0);
150       Keyboard.Listen(Key.Left, ButtonState.Released, KaannaPelaajaa, null, Pelaaja2, 0.0);
151       Keyboard.Listen(Key.Right, ButtonState.Down, KaannaPelaajaa, "Pelaaja2 käänny oikealle", Pelaaja2, -3.0);
152       Keyboard.Listen(Key.Right, ButtonState.Released, KaannaPelaajaa, null, Pelaaja2, 0.0);
153       Keyboard.Listen(Key.RightControl, ButtonState.Down, AmmuAseella, "Pelaaja2 ammu aseella", plasmaTykkiP2);
154
155       Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Ohjeet");
156       PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
157       Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
158    }
159 
160    //Aliohjelma Pelaajan liikuttamiseen
161    void LiikutaPelaajaa(PhysicsObject pelaaja, double nopeus, Image kuva)
162   {
163       Vector pelaajanSuunta = Vector.FromLengthAndAngle(nopeus, pelaaja.Angle);
164       pelaaja.Push(pelaajanSuunta);
165       pelaaja.Image = kuva;
166   }
167
168    //Aliohjelma pelaajan kääntämiseen
169    void KaannaPelaajaa(PhysicsObject pelaaja, double voima)
170   {
171       pelaaja.AngularVelocity = voima;
172   }
173
174   
175    IntMeter LisaaLaskurit( double x, double y)
176    {
177    IntMeter pisteLaskuri = new IntMeter(0);
178    pisteLaskuri.MaxValue = 5;
179    Label pisteNaytto = new Label(); 
180    pisteNaytto.X = x;
181    pisteNaytto.Y = y;
182    pisteNaytto.TextColor = Color.Black;
183    pisteNaytto.Color = Color.White;
184    pisteNaytto.Title = "Pisteet";
185    pisteNaytto.BindTo(pisteLaskuri);
186
187    pisteLaskuri.UpperLimit += Pelaajavoittaa;
188    Add(pisteNaytto);
189    return pisteLaskuri;
190    }
191
192    void PelaajaTormaa(PhysicsObject Pelaaja, PhysicsObject kohde)
193    {
194        if (Pelaaja == Pelaaja1 || kohde == Asteroidi)
195        { elkkuMittariP1.Value -= 5; }
196
197        else if (Pelaaja == Pelaaja2 || kohde == Asteroidi)
198        { elkkuMittariP2.Value -= 5;}
199
200        Explosion rajahdys = new Explosion(100);
201        rajahdys.Position = kohde.Position;
202        rajahdys.Force = 0.0;
203        Add(rajahdys);
204    }
205
206
207    void PelaajatTormaavat(PhysicsObject tormaaja, PhysicsObject kohde)
208    {
209        elkkuMittariP1.Value -= 30;
210        elkkuMittariP2.Value -= 30;
211
212    }
213
214    void LisaaNaytot()
215{
216    Label pelaaja1text = new Label("Pelaaja 1");
217    Label pelaaja2text = new Label("Pelaaja 2");
218    pelaaja1text.X = Screen.Left + 110;
219    pelaaja1text.Y = Screen.Top - 50;
220    pelaaja2text.X = Screen.Right - 110;
221    pelaaja2text.Y = Screen.Top - 50;
222    pelaaja1text.TextColor = Color.White;
223    pelaaja2text.TextColor = Color.White;
224    Add(pelaaja1text);
225    Add(pelaaja2text);
226}
227
228    //Aliohjelma plasmapallon osumiseen
229    void PlasmaPalloOsuu(PhysicsObject ammus, PhysicsObject kohde)
230   {
231       ammus.Destroy();
232       Explosion rajahdys = new Explosion(20);
233       rajahdys.Position = ammus.Position;
234       rajahdys.Force = 10;
235       Add(rajahdys);
236
237       if (kohde == Pelaaja1)
238       {
239           elkkuMittariP1.Value --;
240       }
241       else if (kohde == Pelaaja2)
242       {
243           elkkuMittariP2.Value--;
244       }
245   }
246
247    //Aliohjelma aseella ampumiseen
248    void AmmuAseella(PlasmaCannon tykki)
249   {
250       PhysicsObject ammus = tykki.Shoot();
251
252       if (ammus != null)
253       {
254           ammus.Size *= 1;
255           
256           if (tykki == plasmaTykkiP1)
257           {
258               ammus.Color = Color.Red; // Pelaaja1 ammusten väri vaihdetaan punaiseksi
259           }   
260        }     
261   }
262
263    void elkutLoppu()
264    {
265        if (elkkuMittariP1.Value == 0)
266        {
267            elkkuMittariP1.Value = 100;
268            Remove(Pelaaja1);
269            Explosion rajahdys = new Explosion(100);
270            rajahdys.Position = Pelaaja1.Position;
271            rajahdys.Force = 100;
272            Add(rajahdys);
273            pistelaskuriP2.Value++;
274            if (pistelaskuriP2.Value == 5) { return; }
275            MessageDisplay.Add("Pelaaja1 tuhottu.");
276            Timer.SingleShot(2.0, respaaP1);
277
278        }
279        else if (elkkuMittariP2.Value == 0)
280        {
281            elkkuMittariP2.Value = 100;
282            Remove(Pelaaja2);
283            Explosion rajahdys = new Explosion(100);
284            rajahdys.Position = Pelaaja2.Position;
285            rajahdys.Force = 100;
286            Add(rajahdys);
287            pistelaskuriP1.Value++;
288            if (pistelaskuriP1.Value == 5) { return; }
289            MessageDisplay.Add("Pelaaja2 tuhottu.");
290            Timer.SingleShot(2.0, respaaP2);
291        }
292    }
293
294    void respaaP1()
295    {
296        Pelaaja1.X = Level.Left + 50;
297        Pelaaja1.Y = 0;
298        Pelaaja1.Angle = Angle.Zero;
299        Add(Pelaaja1);
300    }
301    void respaaP2()
302    {
303        Pelaaja2.X = Level.Right - 50;
304        Pelaaja2.Y = 0;
305        Pelaaja2.Angle = Angle.Zero;
306        Add(Pelaaja2);
307    }
308
309    void Pelaajavoittaa()
310    {
311        ClearAll();
312        string voittaja = "";
313        if (pistelaskuriP1.Value == 5)
314        { voittaja = "Pelaaja 1 "; }
315
316        else if (pistelaskuriP2.Value == 5)
317        { voittaja = "Pelaaja 2"; }
318        Level.Background.Image = taustaKuva;
319        Level.Background.FitToLevel();
320
321        Label tekstikentta = new Label(voittaja + " " + "voitti pelin!!!");
322        tekstikentta.TextColor = Color.HotPink;
323        tekstikentta.TextScale = new Vector(3.0, 3.0);
324        Add(tekstikentta);
325
326        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
327        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
328    }
329}
Note: See TracBrowser for help on using the repository browser.