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

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