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

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