source: 2017/24/TuukkaV/TankkiBoiiii/TankkiBoiiii/TankkiBoiiii/TankkiBoiiii.cs @ 8699

Revision 8699, 7.6 KB checked in by npo17_25, 2 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 Tankkipeli_opetus_9 : PhysicsGame
10{
11    Tank tankki1;
12    Tank tankki2;
13    Vector vauhti1;
14    Vector vauhti2;
15    ExplosionSystem rajahdyssysteemi;
16    Image rajahdyskuva = LoadImage("exp");
17    SoundEffect rajahdysaani = LoadSoundEffect("bazooka");
18    IntMeter tankki1elamalaskuri;
19    IntMeter tankki2elamalaskuri;
20    Label tankki1elamateksti;
21    Label tankki2elamateksti;
22    List<Label> valikonKohdat;
23
24    public override void Begin()
25    {
26        Valikko();
27    }
28
29    void aloitapeli()
30    {
31        //Resetoidaan kaikki
32        ClearAll();
33
34        //Luodaan pelikenttä
35        luoKentta();
36
37        //Luodaan tankit
38        luotankki1();
39        luotankki2();
40
41        //Luodaan vauhtivektorit
42        vauhti1 = new Vector(-90, 0);
43        vauhti2 = new Vector(90, 0);
44
45        //Asetetaan peliohjaimet
46        AsetaOhjaimet();
47
48        //Alustetaan räjähdys
49        AlustaRajahdys();
50
51        //Luodaan elämämittarit
52        elamamittarit();
53    }
54
55    void luotankki1()
56    {
57        tankki1 = new Tank(200, 70);
58        tankki1.Y = -250;
59        tankki1.X = -350;
60        tankki1.Mass = 1000;
61        tankki1.Cannon.Angle = Angle.FromDegrees(90);
62        tankki1.Cannon.ProjectileCollision = new OldCollisionHandler(rajaytys);
63        Add(tankki1);
64    }
65
66    void luotankki2()
67    {
68        tankki2 = new Tank(200, 70);
69        tankki2.Y = -250;
70        tankki2.X = 350;
71        tankki2.Mass = 1000;
72        tankki2.Cannon.Angle = Angle.FromDegrees(120);
73        tankki2.Cannon.ProjectileCollision = new OldCollisionHandler(rajaytys);
74        Add(tankki2);
75    }
76
77    void luoKentta()
78    {
79        Level.CreateBottomBorder();
80        Gravity = new Vector(0, -1500);
81    }
82
83    void AsetaOhjaimet()
84    {
85        //Asetetaan Esc-nappi sulkemaan peli
86        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
87
88        //Tankin 1 liikuttaminen
89        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaTankki, null, tankki1, vauhti1);
90        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaTankki, null, tankki1, vauhti2);
91
92        //Tankin 2 liikuttaminen
93        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaTankki, null, tankki2, vauhti1);
94        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaTankki, null, tankki2, vauhti2);
95
96        //Tankkien ampumisnapit
97        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, null, tankki1);
98        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, null, tankki2);
99
100        //Tykkien kääntönapit
101        Keyboard.Listen(Key.W, ButtonState.Down, KaannaTykki, null, tankki1, 2);
102        Keyboard.Listen(Key.S, ButtonState.Down, KaannaTykki, null, tankki1, -2);
103
104        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaTykki, null, tankki2, -2);
105        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaTykki, null, tankki2, 2);
106
107        //Tankkien keulimisnapit
108        Keyboard.Listen(Key.LeftShift, ButtonState.Down, keuli, null, tankki1, 200000000);
109        Keyboard.Listen(Key.RightShift, ButtonState.Down, keuli, null, tankki2, -200000000);
110    }
111
112    void AlustaRajahdys()
113    {
114        rajahdyssysteemi = new ExplosionSystem(rajahdyskuva, 5000);
115        rajahdyssysteemi.MinScale = 5;
116        rajahdyssysteemi.MaxScale = 20;
117        Add(rajahdyssysteemi);
118    }
119
120    void rajaytys(PhysicsObject ammus, PhysicsObject kohde)
121    {
122        // Jos ammus törmää tankki1:een
123        if (kohde == tankki1)
124        {
125            tankki1elamalaskuri.Value = tankki1elamalaskuri.Value - 1;
126
127            if (tankki1elamalaskuri.Value == 0)
128            {
129                rajahdyssysteemi.AddEffect(tankki1.Position, 500);
130                rajahdysaani.Play();
131                tankki1.Destroy();
132            }
133        }
134        // Jos ammus törmää tankki2:een
135        else if (kohde == tankki2)
136        {
137            tankki2elamalaskuri.Value = tankki2elamalaskuri.Value - 1;
138
139            if (tankki2elamalaskuri.Value == 0)
140            {
141                rajahdyssysteemi.AddEffect(tankki2.Position, 500);
142                rajahdysaani.Play();
143                tankki2.Destroy();
144            }
145        }
146        // Tuhotaan ammus
147        ammus.Destroy();
148    }
149
150    void LiikutaTankki(Tank kumpitankki, Vector suunta)
151    {
152        kumpitankki.Velocity = kumpitankki.Velocity + suunta;
153    }
154
155    void Ammu(Tank kumpitankki)
156    {
157        kumpitankki.Shoot(50000);
158    }
159
160    void KaannaTykki(Tank kumpitankki, int suunta)
161    {
162        // Muutetaan tykin olemassaolevaa kulmaa 2:lla asteella oikealle
163        double tykinkulma = kumpitankki.Cannon.Angle.Degrees;
164        double uusikulma = tykinkulma + suunta;
165        if (uusikulma <= 180)
166        {
167            if (uusikulma >= 0)
168            {
169                kumpitankki.Cannon.Angle = Angle.FromDegrees(uusikulma);
170            }
171        }
172    }
173
174    void keuli(Tank kumpitankki, int suunta)
175    {
176        kumpitankki.ApplyTorque(suunta);
177    }
178
179    void elamamittarit()
180    {
181        tankki1elamalaskuri = new IntMeter(10);
182        tankki2elamalaskuri = new IntMeter(10);
183
184        tankki1elamateksti = new Label();
185        tankki2elamateksti = new Label();
186
187        tankki1elamateksti.BindTo(tankki1elamalaskuri);
188        tankki2elamateksti.BindTo(tankki2elamalaskuri);
189
190        tankki1elamateksti.Y = 480;
191        tankki2elamateksti.Y = 480;
192
193        tankki1elamateksti.X = -550;
194        tankki2elamateksti.X = 550;
195
196
197        Add(tankki1elamateksti);
198        Add(tankki2elamateksti);
199    }
200
201    void Valikko()
202    {
203        ClearAll();
204
205        valikonKohdat = new List<Label>();
206
207        Label kohta1 = new Label("Aloita peli");
208        kohta1.Position = new Vector(0, 40);
209        valikonKohdat.Add(kohta1);
210
211        Label kohta2 = new Label("Ohjeet");
212        kohta2.Position = new Vector(0, -40);
213        valikonKohdat.Add(kohta2);
214
215        Label kohta3 = new Label("Lopeta");
216        kohta3.Position = new Vector(0, -80);
217        valikonKohdat.Add(kohta3);
218
219        foreach (Label valikonKohta in valikonKohdat)
220        {
221            Add(valikonKohta);
222        }
223
224        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, aloitapeli, null);
225        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Ohjeet, null);
226        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
227
228        Mouse.IsCursorVisible = true;
229        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
230        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
231    }
232
233    void ValikossaLiikkuminen(AnalogState hiirenTila)
234    {
235        foreach (Label kohta in valikonKohdat)
236        {
237            if (Mouse.IsCursorOn(kohta))
238            {
239                kohta.TextColor = Color.Red;
240            }
241            else
242            {
243                kohta.TextColor = Color.Black;
244            }
245
246        }
247    }
248
249    void Ohjeet()
250    {
251        ClearAll();
252        Label ohjelabel1 = new Label("Pelissä on tarkoitus tuhota vastustajan tankki oman tankin tykkiä käyttäen");
253        Label ohjelabel2 = new Label("Pelaaja 1 näppäimet: W, A, S, D, Space, Vasen shift");
254        Label ohjelabel3 = new Label("Pelaaja 2 näppäimet: Ylös, Alas, Vasen, Oikea, Oikea ctrl, Oikea shift");
255
256        ohjelabel2.Y = -30;
257        ohjelabel3.Y = -60;
258
259        Add(ohjelabel1);
260        Add(ohjelabel2);
261        Add(ohjelabel3);
262        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, null);
263    }
264}
Note: See TracBrowser for help on using the repository browser.