source: 2010/24/Vilvaini/Smile Jump/Peli.cs @ 930

Revision 930, 10.3 KB checked in by vilvaini, 9 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6
7class Tasohyppely : PhysicsGame
8{
9    const double nopeus = 300;
10    const double hyppyVoima = 4000;
11    double tasokorkeus = 0;
12    double tasokorkeutus = 1;
13    double tasoleveys = 150;
14    IntMeter pelaajan1pisteet;
15    IntMeter pelaajan2pisteet;
16
17    PlatformCharacter pelaaja1;
18    PlatformCharacter pelaaja2;
19    PhysicsObject vihollinen;
20    PhysicsObject taso;
21
22    Timer aikaLaskuri;
23
24    PhysicsObject vasenReuna;
25    PhysicsObject alaReuna;
26    PhysicsObject oikeaReuna;
27    PhysicsObject DownReuna;
28    int kenttaNro; // monesko kenttä on menossa
29   
30
31    protected override void Begin()
32    {
33        Level.Width = 1024;
34        Level.Height = 15000;
35        pelaajan1pisteet = new IntMeter(0);
36        pelaajan2pisteet = new IntMeter(0);
37        Camera.StayInLevel = true;
38        seuraavaKentta();
39    }
40
41    void TasoTuho(PhysicsObject taso)
42    {
43        if (pelaaja1.Y > pelaaja2.Y)
44        {
45            if (taso.Y + 1000 < pelaaja1.Y)
46            {
47                taso.Destroy();
48                pelaajan1pisteet.Value += 1;
49            }
50        }
51    }
52
53    void seuraavaKentta()
54    {
55        ClearAll();
56        //pelaajan1pisteet.Reset();
57        lisaaTaso(RandomGen.NextDouble(Level.Left + 50, Level.Right - 50), Level.Bottom + 150, 150);
58
59        vasenReuna = Level.CreateLeftBorder();
60        vasenReuna.Restitution = 0.0;
61        vasenReuna.IsVisible = false;
62
63        alaReuna = Level.CreateBottomBorder();
64        vasenReuna.Restitution = 0.0;
65        vasenReuna.IsVisible = false;
66
67        oikeaReuna = Level.CreateRightBorder();
68        vasenReuna.Restitution = 0.0;
69        vasenReuna.IsVisible = false;
70       
71
72        // luodaan pistelaskunäyttö
73        ValueDisplay pisteNaytto = new ValueDisplay();
74        pisteNaytto.Text = "Pelaaja 1: ";
75        pisteNaytto.X = Screen.Left + 250;
76        pisteNaytto.Y = Screen.Top - 100;
77        pisteNaytto.ValueColor = Color.Red;
78        pisteNaytto.TextColor = Color.Red;
79        pisteNaytto.BindTo(pelaajan1pisteet);
80        Add(pisteNaytto);    // lisätään peliin
81       
82
83        // luodaan pistelaskunäyttö
84        ValueDisplay pisteNaytto2 = new ValueDisplay();
85        pisteNaytto2.Text = "Pelaaja 2: ";
86        pisteNaytto2.X = Screen.Right - 250;
87        pisteNaytto2.Y = Screen.Top - 100;
88        pisteNaytto2.ValueColor = Color.Red;
89        pisteNaytto2.TextColor = Color.Red;
90        pisteNaytto2.BindTo(pelaajan2pisteet);
91        Add(pisteNaytto2);    // lisätään peliin
92
93        kenttaNro += 1; // lisätään kenttänumeroa yhdellä
94        MessageDisplay.Add("Kenttä " + kenttaNro);
95
96        // Asetetaan painovoima
97        Gravity = new Vector(0, -600);
98
99        luoKentta();
100        lisaaNappaimet();
101        //LisaaDownReuna(Camera.Position.Y - 200);
102       
103       
104    }
105
106    void KasittelePallonTormays(PhysicsObject pelaaja1, PhysicsObject kohde)
107    {
108        if (kohde == oikeaReuna)
109        {
110            pelaaja1.X = Level.Left + 30;
111        }
112        else if (kohde == vasenReuna)
113        {
114            pelaaja1.X = Level.Right - 30;
115        }
116    }
117
118    void TasonTormays(PhysicsObject taso, PhysicsObject kohde)
119    {
120        if (kohde == DownReuna)
121        {
122            taso.Destroy();
123        }
124         
125    }
126
127    void p1piste(PhysicsObject p1, PhysicsObject kohde)
128    {
129        if (kohde == DownReuna)
130        {
131            pelaajan2pisteet.Value += 1;
132            p1.Destroy();
133            seuraavaKentta();
134        }
135
136        if (kohde == vihollinen)
137        {
138            pelaajan2pisteet.Value += 1;
139            p1.Destroy();
140            seuraavaKentta();
141        }
142         
143    }
144
145    void VihollisKaantyVR(PhysicsObject vihulainen, PhysicsObject kohde)
146    {
147        if (kohde == vasenReuna)
148        {
149            vihulainen.Velocity = new Vector(150.0, 0.0);
150        }
151
152    }
153
154    void VihollisKaantyOR(PhysicsObject vihulainen, PhysicsObject kohde)
155    {
156        if (kohde == oikeaReuna)
157        {
158            vihulainen.Velocity = new Vector(-150.0, 0.0);
159        }
160
161    }
162
163    void p2piste(PhysicsObject p2, PhysicsObject kohde)
164    {
165        if (kohde == DownReuna)
166        {
167            pelaajan1pisteet.Value += 1;
168            p2.Destroy();
169            seuraavaKentta();
170        }
171
172        if (kohde == vihollinen)
173        {
174            pelaajan1pisteet.Value += 1;
175            p2.Destroy();
176            seuraavaKentta();
177        }
178         
179    }
180    void luoKentta()
181    {
182        MessageDisplay.Add("Pompi pidemmälle kuin toinen pelaaja!");
183        tasokorkeus = 0;
184        tasoleveys = 150;
185        for (int i = 0; i < 145; i++)
186        {
187            tasokorkeus = tasokorkeus + 170 + tasokorkeutus;
188            lisaaTaso(RandomGen.NextDouble(Level.Left + 50, -150), Level.Bottom + tasokorkeus + RandomGen.NextDouble(10.0, 15.0), tasoleveys);
189            lisaaTaso(RandomGen.NextDouble(150, Level.Right - 50), Level.Bottom + tasokorkeus + RandomGen.NextDouble(5.0, 10.0), tasoleveys);
190
191            tasoleveys = tasoleveys - 1;
192        }
193        tasokorkeus = 0;
194        tasoleveys = 150;
195        for (int h = 0; h < 75; h++)
196        {
197            tasokorkeus = tasokorkeus + 170 + tasokorkeutus;
198            lisaaTaso(RandomGen.NextDouble(150, -150), Level.Bottom + tasokorkeus + RandomGen.NextDouble(40.0, 55.0), tasoleveys);
199            tasoleveys = tasoleveys - 2;
200        }
201
202        LisaaDownReuna(Camera.Position.Y - 200);
203
204       
205        Level.Background.CreateGradient(Color.Beige, Color.Wheat);
206
207       
208        lisaaPelaajat();
209
210        aikaLaskuri = new Timer();                     // luodaan uusi ajastin, nimeltä aikaLaskuri
211        aikaLaskuri.Interval = 1;                      // ajastukseksi 5 sekuntia
212        aikaLaskuri.Trigger += new Timer.TriggerHandler(aikaLoppui);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.
213        Add(aikaLaskuri);                       // lisätään aikaLaskuri peliin
214        aikaLaskuri.Start();
215
216        kenttaNro = 0;
217        Level.Width = 1024;
218        Level.Height = 15000;
219
220        LisaaVihollinen(0.0, Level.Bottom + 500);
221        Camera.StayInLevel = true;
222    }
223
224    void lisaaTaso(double x, double y, double leveys)
225    {
226        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, 30);
227        taso.Color = Color.Green;
228        taso.X = x;
229        taso.Y = y;
230        taso.Image = LoadImage("Smile Jump(laatta)");
231        AddCollisionHandler(taso, TasonTormays);
232        Add(taso);
233    }
234
235    void lisaaPelaajat()
236    {
237        pelaaja1 = new PlatformCharacter(40, 40);
238        pelaaja1.Mass = 4.0;
239        pelaaja1.Shape = Shapes.Circle;
240        pelaaja1.Image = LoadImage("smile jump(keltainen pelaaja) (2)");
241        pelaaja1.X = 0;
242        pelaaja1.Y = Level.Bottom + 120;
243
244        pelaaja2 = new PlatformCharacter(40, 40);
245        pelaaja2.Mass = 4.0;
246        pelaaja2.Shape = Shapes.Circle;
247        pelaaja2.Image = LoadImage("smile jump (vihreä pelaaja) (2)");
248        pelaaja2.X = 50;
249        pelaaja2.Y = Level.Bottom + 120;
250
251       
252       
253       
254       
255        AddCollisionHandler(pelaaja1, KasittelePallonTormays);
256        AddCollisionHandler(pelaaja2, KasittelePallonTormays);
257       
258        Add(pelaaja1); 
259        Add(pelaaja2);
260    }
261
262    void LisaaVihollinen(double x, double y)
263    {
264        vihollinen = new PhysicsObject(60, 60);
265        vihollinen.Image = LoadImage("smile jump(vihollinen) (2)");
266        vihollinen.X = x;
267        vihollinen.Y = y;
268        vihollinen.IgnoresCollisionResponse = true;
269        vihollinen.IgnoresPhysicsLogics = true;
270        vihollinen.Velocity = new Vector(150.0, 0.0);
271        Add(vihollinen);
272
273        AddCollisionHandler(vihollinen, VihollisKaantyOR);
274        AddCollisionHandler(vihollinen, VihollisKaantyVR);
275    }
276
277    private void aikaLoppui(Timer sender)
278    {
279        AddCollisionHandler(pelaaja1, p1piste);
280        AddCollisionHandler(pelaaja2, p2piste);
281
282    }
283
284
285
286    void lisaaNappaimet()
287    {
288        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
289        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
290
291        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
292        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
293        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
294
295        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
296        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
297        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja2, hyppyVoima);
298
299        lisaaGamePadNappaimet(ControllerOne);
300    }
301
302    void lisaaGamePadNappaimet(GamePad controller)
303    {
304        controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
305
306        controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
307        controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
308        controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
309    }
310
311    void liikuta(PlatformCharacter hahmo, double nopeus)
312    {
313        hahmo.Walk(nopeus);
314    }
315
316    void hyppaa(PlatformCharacter hahmo, double voima)
317    {
318        hahmo.Jump(voima);
319    }
320
321    void LisaaDownReuna(double y)
322    {
323        DownReuna = new PhysicsObject(2000, 100);
324        DownReuna.X = 0;
325        DownReuna.Y = Level.Bottom + 50;
326        DownReuna.IgnoresCollisionResponse = true;
327        DownReuna.IgnoresGravity = true;
328
329        Add(DownReuna);
330
331
332    }
333   
334   
335   
336   
337   
338   
339    protected override void Update(Time time)
340    {
341        if (pelaaja1.Y > pelaaja2.Y)
342        {
343            Camera.Follow(pelaaja1);
344           
345        }
346        else
347        {
348            Camera.Follow(pelaaja2);
349           
350        }
351
352        DownReuna.Y = Camera.Position.Y - 400;
353       
354
355        base.Update(time);
356
357       
358    }
359}
Note: See TracBrowser for help on using the repository browser.