source: 2010/31/vinekova/Battle Of Tanks/Tankkipeli1/Peli.cs @ 1613

Revision 1613, 8.3 KB checked in by vinekova, 9 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using Jypeli.Effects;
6using System.Collections.Generic;
7
8
9public class Tankkipeli : PhysicsGame
10{
11    PhysicsObject vasenReuna;
12    PhysicsObject alaReuna;
13    IntMeter kenttaLaskuri;
14    Tank tankki;
15    Tank tankki2;
16    List<Label> valikonKohdat;
17    const int ruudunLeveys = 50;
18    const int ruudunKorkeus = 50;
19    DoubleMeter voimaMittari;
20
21    IntMeter pisteLaskuri;
22    IntMeter pisteLaskuri2;
23
24    Double PutkenKaantonopeus = 3.0;
25    Double TankinAjovoima = 15.0;
26
27
28
29    protected override void Begin()
30    {
31        Camera.ZoomToLevel();
32        IsFullScreen = true;
33        Valikko();
34
35        voimaMittari = new DoubleMeter(10);
36        voimaMittari.MaxValue = 10;
37        BarGauge voimaPalkki = new BarGauge(20, 150);
38        voimaPalkki.BindTo(voimaMittari);
39        Add(voimaPalkki);
40
41        voimaPalkki.X = (0.8 * Screen.RightSafe);
42        voimaPalkki.Y = (0.8 * Screen.TopSafe);
43        voimaPalkki.BarColor = Color.Green;
44        voimaPalkki.BorderColor = Color.White;
45        voimaPalkki.Angle = Angle.Degrees(90);
46
47        // Kun voima loppuu, kutsutaan VoimaLoppui-aliohjelmaa
48        voimaMittari.LowerLimit += VoimaLoppui;
49
50        Keyboard.Listen(Key.Space, ButtonState.Pressed, VahennaVoimia, "Vähennä pelaajan voimia");
51    }
52
53    void Valikko()
54    {
55        ClearAll();
56        valikonKohdat = new List<Label>();
57
58        Label kohta1 = new Label("Aloita peli");
59        kohta1.Position = new Vector(0, 40);
60        valikonKohdat.Add(kohta1);
61
62        Label kohta2 = new Label("Lopeta peli");
63        kohta2.Position = new Vector(0, -40);
64        valikonKohdat.Add(kohta2);
65
66        foreach (Label valikonKohta in valikonKohdat)
67        {
68            Add(valikonKohta);
69        }
70
71        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
72        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
73
74        Mouse.IsCursorVisible = true;
75        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
76        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
77    }
78
79    void VahennaVoimia()
80    {
81        voimaMittari.Value--;
82    }
83
84    void VoimaLoppui(double mittarinArvo)
85    {
86        MessageDisplay.Add("Voimat loppuivat, voi voi.");
87    }
88
89
90    void ValikossaLiikkuminen(AnalogState hiirenTila)
91    {
92        foreach (Label kohta in valikonKohdat)
93        {
94            if (Mouse.IsCursorOn(kohta))
95            {
96                kohta.TextColor = Color.Red;
97            }
98            else
99            {
100                kohta.TextColor = Color.White;
101            }
102
103        }
104    }
105
106    void AloitaPeli()
107    {
108        ClearAll();
109        SeuraavaKentta(1);
110        AsetaOhjaimet();
111        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
112    }
113
114    void Lopeta()
115    {
116        Exit();
117    }
118
119
120    void LuoKentta1()
121    {
122        Gravity = new Vector(0.0, 1600.0);
123        LuoLaskurit();
124        Level.CreateGround(5, 150, 5);
125    }
126
127    void LuoKentta2()
128    {
129        Level.CreateGround(10, 100, 20, LoadImage("TankkiKenttä2"));
130    }
131
132    void LuoKentta3()
133    {
134        Level.CreateGround(10, 100, 20, LoadImage("TankkiKenttä3"));
135    }
136
137    void TankkiTormasi(PhysicsObject tank, PhysicsObject kohde)
138    {
139        if (kohde == vasenReuna)
140        {
141            kenttaLaskuri.Value++;
142            SeuraavaKentta(kenttaLaskuri.Value);
143        }
144        if (kohde == alaReuna)
145        {
146            SeuraavaKentta(kenttaLaskuri.Value);
147        }
148
149    }
150
151   
152
153    void LuoTankki()
154    {
155        tankki = new Tank(100, 50);
156        tankki.Y = Level.Bottom + 160;
157        tankki.X -= 200;
158        Add(tankki);
159
160        tankki.Cannon.Power.Value = 1000;
161        tankki.Cannon.CannonBallCollision = KuulaOsuu;
162        tankki.Cannon.Ammo.Value = 9999;
163
164        tankki2 = new Tank(100, 50);
165        tankki2.Y = Level.Bottom + 160;
166        tankki2.X += 200;
167        Add(tankki2);
168
169        tankki2.Cannon.Angle += Angle.Degrees(180); 
170        tankki2.Cannon.Power.Value = 1000;
171        tankki2.Cannon.CannonBallCollision = KuulaOsuu;
172        tankki2.Cannon.Ammo.Value = 9999;
173    }
174
175    void AsetaOhjaimet()
176    {
177        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
178        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
179        Keyboard.Listen(Key.A, ButtonState.Down, Aja, "Liiku vasemmalle", tankki, TankinAjovoima);
180        Keyboard.Listen(Key.D, ButtonState.Down, Aja, "Liiku oikealle", tankki, -TankinAjovoima);
181        Keyboard.Listen(Key.W, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(PutkenKaantonopeus));
182        Keyboard.Listen(Key.S, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-PutkenKaantonopeus));
183        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Laukaus, "Ammu");
184
185
186        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
187        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
188        Keyboard.Listen(Key.J, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, TankinAjovoima);
189        Keyboard.Listen(Key.L, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -TankinAjovoima);
190        Keyboard.Listen(Key.I, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(PutkenKaantonopeus));
191        Keyboard.Listen(Key.K, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-PutkenKaantonopeus));
192        Keyboard.Listen(Key.RightControl, ButtonState.Down, Laukaus2, "Ammu");
193    }
194       
195
196
197    void Aja(Tank t, double vaanto)
198    {
199        t.Accelerate(vaanto);
200    }
201    void KaannaPutkea(Tank t, Angle kaanto)
202    {
203        t.Cannon.Angle += kaanto;
204    }
205
206    void KuulaOsuu(PhysicsObject kuula, PhysicsObject toinen)
207    {
208        if (toinen == tankki) 
209        {
210            pisteLaskuri.Value++;
211        }
212        else
213        if (toinen == tankki2)
214        {
215            pisteLaskuri2.Value++;
216        }
217
218
219        kuula.Destroy();
220        Explosion rajahdys = new Explosion(30);
221        rajahdys.Position = kuula.Position;
222        Add(rajahdys);
223    }
224
225
226    void LuoLaskurit()
227    {
228        pisteLaskuri = new IntMeter(0);
229        pisteLaskuri.MaxValue = 3;
230        pisteLaskuri.UpperLimit += laskuriYlarajassa;
231
232        Label pisteNaytto = new Label();
233        pisteNaytto.X = Screen.Right - 200;
234        pisteNaytto.Y = Screen.Top - 100;
235        pisteNaytto.TextColor = Color.Red;
236
237        pisteNaytto.BindTo(pisteLaskuri);
238        Add(pisteNaytto);
239
240
241        pisteLaskuri2 = new IntMeter(0);
242        pisteLaskuri2 = new IntMeter(0);
243        pisteLaskuri2.MaxValue = 3;
244        pisteLaskuri2.UpperLimit += laskuriYlarajassa2;
245
246        Label pisteNaytto2 = new Label();
247        pisteNaytto2.X = Screen.Left + 200;
248        pisteNaytto2.Y = Screen.Top - 100;
249        pisteNaytto2.TextColor = Color.Red;
250
251        pisteNaytto2.BindTo(pisteLaskuri2);
252        Add(pisteNaytto2);
253    }
254
255
256    void laskuriYlarajassa(int arvo)
257    {
258        MessageDisplay.TextColor = Color.Red;
259        MessageDisplay.Add("Vasemmanpuoleinen tankki voitti pelin.");
260    }
261
262    void laskuriYlarajassa2(int arvo)
263    {
264        MessageDisplay.TextColor = Color.Red;
265        MessageDisplay.Add("Oikeanpuoleinen tankki voitti pelin.");
266    }
267
268
269    void Laukaus()
270    {
271        tankki.Cannon.Power.Value = 13000;
272        tankki.Cannon.Use();
273    }
274
275    void Laukaus2()
276    {
277        tankki2.Cannon.Power.Value = 13000;
278        tankki2.Cannon.Use();
279    }
280
281    void SeuraavaKentta(int kentanNro)
282    {
283        ClearAll();
284
285        kenttaLaskuri = new IntMeter(kentanNro);
286
287        vasenReuna = Level.CreateLeftBorder();
288        Level.CreateRightBorder();
289        alaReuna = Level.CreateBottomBorder();
290        Level.CreateTopBorder();
291
292        if (kenttaLaskuri.Value == 1) LuoKentta1();
293        else if (kenttaLaskuri.Value == 2) LuoKentta2();
294        else if (kenttaLaskuri.Value == 3) LuoKentta3();
295        else if (kenttaLaskuri.Value > 3) Exit();
296
297        Gravity = new Vector(1.0, -400);
298        LuoTankki();
299        Camera.ZoomToLevel();
300
301    }
302
303
304}
Note: See TracBrowser for help on using the repository browser.