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

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