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

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