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

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