source: 2010/24/arhetaka/FysiikkaPeli1/FysiikkaPeli1/Peli.cs @ 817

Revision 817, 10.9 KB checked in by arhetaka, 9 years ago (diff)

luotiin uusi peli

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6public class Peli : PhysicsGame
7{
8    Vector nopeusYlos = new Vector(0, 200);
9    Vector nopeusAlas = new Vector(0, -200);
10
11    PhysicsObject pallo;
12    PhysicsObject alus1;
13    PhysicsObject alus2;
14
15    PhysicsObject vasenReuna;
16    PhysicsObject oikeaReuna;
17    PhysicsObject alaReuna;
18    PhysicsObject ylaReuna;
19
20    IntMeter pelaajan1Pisteet;
21    IntMeter pelaajan2Pisteet;
22
23    Animation alus1_kaasu_tekst;
24    Animation alus2_kaasu_tekst;
25
26    double resolutionX;
27    double resolutionY;
28
29    bool alus1_kaasuttaa = false;
30    bool alus2_kaasuttaa = false;   
31
32    protected override void Begin()
33    {
34        LuoKentta();       
35        AsetaOhjaimet();
36        LisaaLaskurit();
37        AloitaPeli();
38    }
39
40    void LuoKentta()
41    {
42 
43        alus1 = LuoAlus(1, Level.Left + 20.0, 0.0);
44        alus1.Tag = "alus1";
45        alus1.Image = LoadImage("alus1");
46
47        Image[] alus_kaasu1 = LoadImages(
48        "alus1",       
49        "alus1_kaasuttaa"
50        );
51        alus1_kaasu_tekst = new Animation(alus_kaasu1);
52        alus1_kaasu_tekst.FPS = 5;
53        alus1.Animation = alus1_kaasu_tekst;
54       
55        alus2 = LuoAlus(2, Level.Right - 20.0, 0.0);
56        alus2.Tag = "alus2";       
57        alus2.Image = LoadImage("alus2");
58
59        Image[] alus_kaasu2 = LoadImages(
60        "alus2",       
61        "alus2_kaasuttaa"
62        );       
63
64        alus2_kaasu_tekst = new Animation(alus_kaasu2);
65        alus2_kaasu_tekst.FPS = 5;
66        alus2.Animation = alus2_kaasu_tekst;
67        alus2.Angle = Angle.StraightAngle;
68        //TeeAjoviivaa();
69
70        resolutionX = Screen.Width;
71        resolutionY = Screen.Height;
72
73
74        vasenReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500);
75        vasenReuna.IgnoresPhysicsLogics = true;
76        vasenReuna.Color = Color.White;
77        vasenReuna.X = -(resolutionX / 2) - 50;       
78        vasenReuna.Restitution = 1.0;
79        vasenReuna.IsVisible = true;
80        vasenReuna.Tag = "vasenreuna";
81        vasenReuna.IgnoresCollisionResponse = true;
82        AddCollisionHandler(vasenReuna, ReunaanOsuu);
83        Add(vasenReuna);
84
85        oikeaReuna = PhysicsObject.CreateStaticObject(5, resolutionX + 500);
86        oikeaReuna.IgnoresPhysicsLogics = true;
87        oikeaReuna.Color = Color.White;
88        oikeaReuna.X = (resolutionX / 2) + 50;
89        oikeaReuna.Restitution = 1.0;
90        oikeaReuna.IsVisible = true;
91        oikeaReuna.Tag = "oikeareuna";
92        oikeaReuna.IgnoresCollisionResponse = true;
93        AddCollisionHandler(oikeaReuna, ReunaanOsuu);
94        Add(oikeaReuna);
95
96        ylaReuna = PhysicsObject.CreateStaticObject(resolutionY + 500, 5);
97        ylaReuna.IgnoresPhysicsLogics = true;
98        ylaReuna.Color = Color.White;
99        ylaReuna.Y = (resolutionY / 2) + 50;
100        ylaReuna.Restitution = 0.0;
101        ylaReuna.IsVisible = true;
102        ylaReuna.Tag = "ylareuna";
103        ylaReuna.IgnoresCollisionResponse = true;
104        AddCollisionHandler(ylaReuna, ReunaanOsuu);
105        Add(ylaReuna);
106
107        alaReuna = PhysicsObject.CreateStaticObject(resolutionY + 500, 5);
108        alaReuna.IgnoresPhysicsLogics = true;
109        alaReuna.Color = Color.White;
110        alaReuna.Y = -(resolutionY / 2) -50;
111        alaReuna.Restitution = 0.0;
112        alaReuna.IsVisible = true;
113        alaReuna.Tag = "alareuna";
114        alaReuna.IgnoresCollisionResponse = true;
115        AddCollisionHandler(alaReuna, ReunaanOsuu);
116        Add(alaReuna);
117       
118        Level.Background.CreateStars(1000);
119        Camera.ZoomToLevel();
120    }
121
122    PhysicsObject LuoAlus(int kumpi, double x, double y)
123    {
124        PhysicsObject alus = new PhysicsObject(30.0, 20.0);
125        alus.Shape = Shapes.Rectangle;
126        alus.X = x;
127        alus.Y = y;
128        alus.Mass = 10;
129        alus.Restitution = 1.0;
130        alus.CanRotate = true;
131        alus.IgnoresCollisionResponse = false;
132        //AddCollisionHandler(alus, AlusOsuu);
133        Add(alus);
134        return alus;
135    }
136
137    void LisaaLaskurit()
138    {
139        pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
140        pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
141    }
142
143    IntMeter LuoPisteLaskuri(double x, double y)
144    {
145        IntMeter laskuri = new IntMeter(0);
146        laskuri.MaxValue = 100;
147        ValueDisplay naytto = new ValueDisplay();
148        naytto.BindTo(laskuri);
149        naytto.X = x;
150        naytto.Y = y;
151        naytto.ValueColor = Color.White;
152        Add(naytto);
153        return laskuri;
154    }
155
156    void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
157    {
158        if (kohde == oikeaReuna)
159        {
160            pelaajan1Pisteet.Value += 1;
161        }
162        else if (kohde == vasenReuna)
163        {
164            pelaajan2Pisteet.Value += 1;
165        }
166    }
167
168    void AloitaPeli()
169    {
170   
171    }
172
173    void AsetaOhjaimet()
174    {
175
176        Keyboard.Listen(Key.A, ButtonState.Down, kaannaVasen, "käännä alusta vasemmalle", alus1,  1);
177        Keyboard.Listen(Key.A, ButtonState.Released, pysaytaPyoriminen, null, alus1, 1);
178        Keyboard.Listen(Key.D, ButtonState.Down, kaannaOikea, "käännä alusta oikealle", alus1, 1);
179        Keyboard.Listen(Key.D, ButtonState.Released, pysaytaPyoriminen, null, alus1, 1);
180        Keyboard.Listen(Key.W, ButtonState.Down, kaasua, "kaasu", alus1, 1);
181        Keyboard.Listen(Key.W, ButtonState.Released, eikaasua, null, alus1, 1);
182        Keyboard.Listen(Key.Tab, ButtonState.Pressed, ammu, null, alus1, 1);
183
184        Keyboard.Listen(Key.Left, ButtonState.Down, kaannaVasen, "käännä alusta vasemmalle", alus2, 1);
185        Keyboard.Listen(Key.Left, ButtonState.Released, pysaytaPyoriminen, null, alus2, 1);
186        Keyboard.Listen(Key.Right, ButtonState.Down, kaannaOikea, "käännä alusta oikealle", alus2, 1);
187        Keyboard.Listen(Key.Right, ButtonState.Released, pysaytaPyoriminen, null, alus2, 1);
188        Keyboard.Listen(Key.Up, ButtonState.Down, kaasua, "kaasu", alus2, 1);
189        Keyboard.Listen(Key.Up, ButtonState.Released, eikaasua, null, alus2, 1);
190        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, ammu, null, alus2, 1);
191
192
193        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
194        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
195     
196        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
197        ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
198    }
199
200   
201    void kaannaVasen(PhysicsObject alus, int nopeus)
202    {
203        alus.AngularVelocity = 4;
204    }
205    void kaannaOikea(PhysicsObject alus, int nopeus)
206    {
207        alus.AngularVelocity = -4;
208    }
209    void pysaytaPyoriminen(PhysicsObject alus, int nopeus)
210    {
211        alus.AngularVelocity = 0;
212    }
213
214    void kaasua(PhysicsObject alus, int nopeus)
215    {
216        Angle aluksenKulma = alus.Angle;
217        Vector impulssi = Vector.FromLengthAndAngle(2000, aluksenKulma);       
218        double aluksenAste = aluksenKulma.Degree;   
219        alus.Push(impulssi);       
220        alus.Animation.Resume();
221        if (alus.Tag == "alus1")
222        {
223            alus1_kaasuttaa = true;
224        }
225        if (alus.Tag == "alus2")
226        {
227            alus2_kaasuttaa = true;
228        }
229
230    }
231    void eikaasua(PhysicsObject alus, int nopeus)
232    {
233        alus.Animation.Stop();
234        if (alus.Tag == "alus1")
235        {
236            alus1_kaasuttaa = false;
237        }
238        if (alus.Tag == "alus2")
239        {
240            alus2_kaasuttaa = false;
241        }
242    }
243    void ammu(PhysicsObject alus, int nopeus)
244    {
245       
246            PhysicsObject ammus = new PhysicsObject(3, 3);
247            ammus.Shape = Shapes.Circle;
248            ammus.Color = Color.YellowGreen;
249            ammus.X = alus.X;
250            ammus.Y = alus.Y;
251            ammus.IgnoresCollisionResponse = true;
252            TimeSpan elinaika = new TimeSpan(20000000);
253            ammus.MaximumLifetime = elinaika;
254            ammus.Tag = alus.Tag;
255            AddCollisionHandler(ammus, AmmusOsuu);
256            Add(ammus);
257            Angle aluksenKulma = alus.Angle;
258            Vector impulssi = Vector.FromLengthAndAngle(500, aluksenKulma);
259            ammus.Hit(impulssi);
260    }
261    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
262    {
263        if (ammus.Tag != kohde.Tag && kohde.Tag != "ajopiste")
264        {
265            ammus.Destroy();
266            Explosion rajahdys = new Explosion(20);
267            rajahdys.Position = ammus.Position;
268            Add(rajahdys);
269            if (kohde.Tag == "alus2")
270            {
271                pelaajan1Pisteet.Value += 1;
272            }
273            else if (kohde.Tag == "alus1")
274            {
275                pelaajan2Pisteet.Value += 1;
276            }
277        }
278    }
279    void AlusOsuu(PhysicsObject alus, PhysicsObject kohde)
280    {
281       
282    }
283   
284    void TeeAjoviivaa()
285    {
286        Timer aikaLaskuri = new Timer();                     // luodaan uusi ajastin, nimeltä aikaLaskuri
287        aikaLaskuri.Interval = 0.1;                      // ajastukseksi 5 sekuntia
288        aikaLaskuri.Trigger += new Timer.TriggerHandler(PudotaAjopiste);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.
289        Add(aikaLaskuri);                       // lisätään aikaLaskuri peliin
290        aikaLaskuri.Start();                           // käynnistetään aikaLaskuri     
291    }
292
293    private void PudotaAjopiste(Timer sender)
294    {
295        if (alus1_kaasuttaa)
296        {
297            PhysicsObject piste = teeAjopiste(alus1);
298            Add(piste);
299        }
300        if (alus2_kaasuttaa)
301        {
302            PhysicsObject piste = teeAjopiste(alus2);
303            Add(piste);
304        }
305    }
306    PhysicsObject teeAjopiste(PhysicsObject alus)
307    {
308        PhysicsObject piste = new PhysicsObject(2, 2);
309        piste.Shape = Shapes.Circle;
310        piste.Color = Color.Yellow;piste.IgnoresCollisionResponse = true;
311        piste.Tag = "ajopiste";
312        piste.X = alus.X;
313        piste.Y = alus.Y;
314        TimeSpan elinaika = new TimeSpan(20000000);
315        piste.MaximumLifetime = elinaika;
316        Angle aluksenKulma = alus.Angle + Angle.StraightAngle;
317        Vector impulssi = Vector.FromLengthAndAngle(50, aluksenKulma);
318        piste.Hit(impulssi);
319        return piste;
320    }
321
322    void ReunaanOsuu(PhysicsObject reuna, PhysicsObject osuja)
323    {
324        if (reuna.Tag == "ylareuna")
325        {
326            osuja.Y = alaReuna.Y + 80;
327        }
328
329        if (reuna.Tag == "alareuna")
330        {
331            osuja.Y = ylaReuna.Y - 80;
332        }
333        if (reuna.Tag == "vasenreuna")
334        {
335            osuja.X = (oikeaReuna.X - 80);
336        }
337
338        if (reuna.Tag == "oikeareuna")
339        {
340            osuja.X = (vasenReuna.X + 80);
341        }
342    }
343
344}
Note: See TracBrowser for help on using the repository browser.