source: 2010/23/teematma/Tasohyppely2/Peli.cs @ 645

Revision 645, 7.6 KB checked in by paaaanro, 11 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6
7namespace Tasohyppely2
8{
9    class Tasohyppely : PhysicsGame
10    {
11        const double nopeus = 2000;
12        const double hyppyVoima = 2000;
13
14        IntMeter pisteLaskuri;
15        ValueDisplay pisteNaytto;
16
17        PhysicsObject pelaaja1;
18
19        int kenttaNro; // monesko kenttä on menossa
20
21        bool voikoHypata;
22
23
24        protected override void Begin()
25        {
26            kenttaNro = 0;
27            Level.Width = 9000;
28            Level.Height = 1000;
29
30            // Luodaan pistelaskuri
31            pisteLaskuri = new IntMeter( 0 );
32
33            // luodaan pistelaskunäyttö
34            pisteNaytto = new ValueDisplay();
35            pisteNaytto.Text = "Pisteitä: ";
36            pisteNaytto.X = Screen.RightSafe - 250;
37            pisteNaytto.Y = Screen.TopSafe - 50;
38            pisteNaytto.BindTo( pisteLaskuri );
39            Add( pisteNaytto );    // lisätään peliin
40
41            // Zoomataan lähemmäksi
42            Camera.ZoomFactor = 2.0;
43
44            Camera.StayInLevel = true;
45
46            seuraavaKentta();
47            MessageDisplay.Add( "Etsi iso tähti!" );
48        }
49
50        void seuraavaKentta()
51        {
52            ClearAll();
53            pisteLaskuri.Reset();
54
55            voikoHypata = true;
56
57            //kenttaNro += 1;  lisätään kenttänumeroa yhdellä
58            MessageDisplay.Add( "Kenttä " + kenttaNro );
59
60            // Asetetaan painovoima
61            Gravity = new Vector( 0, -2000 );
62
63            luoKentta();
64            lisaaNappaimet();
65            Camera.Follow( pelaaja1 );
66        }
67
68        void luoKentta()
69        {
70            Level.CreateBorders();
71            Level.Background.CreateGradient( Color.LightYellow, Color.DarkMagenta );
72
73            lisaaTaso(-4200, -500);
74            lisaaTaso(-4100, -400);
75            lisaaTaso(-3900, -350);
76            lisaaTaso(-3700, -250);
77            lisaaTaso(-4500, -500);
78            lisaaTaso(-4400, -500);
79
80
81            lisaaTaso(-3700, -300);
82            lisaaTaso(-3700, -400);
83            lisaaTaso(-3700, -350);
84            lisaaTaso(-3700, -250);
85            lisaaTaso(-4500, -500);
86            lisaaTaso(-4400, -500);
87
88            for (int i = 0; i < 1000; i++)
89            {
90                lisaaPallo();
91            }
92            lisaaMaali();
93            lisaaPelaajat();
94        }
95
96        void lisaaTaso( double x, double y )
97        {
98            PhysicsObject taso = PhysicsObject.CreateStaticObject( 100, 50 );
99            taso.Color = Color.DarkCyan;
100            taso.LinearDamping = 1;
101            taso.Tag = "taso";
102            taso.X = x;
103            taso.Y = y;
104            Add( taso );
105        }
106
107        void lisaaPallo()
108        {
109            PhysicsObject pallo = PhysicsObject.CreateStaticObject(25, 25);
110            pallo.Shape = Shapes.Circle;
111            pallo.Image = LoadImage("Untitled");
112            pallo.LinearDamping = 1;
113            pallo.IgnoresCollisionResponse = true;
114            pallo.Tag = "pallo";
115            pallo.X = RandomGen.NextDouble(Level.Left + 60, Level.Right -60);
116            pallo.Y = RandomGen.NextDouble(Level.Top -20, Level.Bottom +20);
117            Add(pallo);
118        }
119
120        void lisaaPelaajat()
121        {
122            //pelaaja1 = new PlatformCharacter( 40, 40 );
123            pelaaja1 = new PhysicsObject(40, 40, Shapes.Circle);
124            pelaaja1.Mass = 2.0;
125           
126            pelaaja1.Image = LoadImage( "Untitled" );
127            pelaaja1.KineticFriction = 1;
128            pelaaja1.LinearDamping = 0.95;
129
130            pelaaja1.X = Level.Left + 120;
131            pelaaja1.Y = Level.Bottom + 120;
132
133            AddCollisionHandler( pelaaja1, osuiMaaliin );
134            AddCollisionHandler(pelaaja1, lisaaHyppy);
135           
136            Add( pelaaja1 );
137        }
138
139        void lisaaMaali()
140        {
141            PhysicsObject maali = PhysicsObject.CreateStaticObject( 50, 50, Shapes.Circle );
142            maali.Tag = "maali";
143            maali.IgnoresCollisionResponse = true;
144            maali.X = 30;
145            maali.Y = -60;
146            maali.Image = LoadImage( "tahti" );
147            Add( maali );
148        }
149
150        void lisaaNappaimet()
151        {
152            Keyboard.Listen( Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet" );
153            Keyboard.Listen( Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä" );
154
155            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
156            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
157            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, new Vector(0, hyppyVoima));
158            Keyboard.Listen(Key.Enter, ButtonState.Pressed, seuraavaKentta, "Restart");
159
160            lisaaGamePadNappaimet( ControllerOne );
161        }
162
163        void lisaaGamePadNappaimet( GamePad controller )
164        {
165            controller.Listen( Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä" );
166
167            controller.Listen( Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, new Vector(-nopeus,0) );
168            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, new Vector(nopeus,0));
169            controller.Listen( Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, new Vector(0, hyppyVoima) );
170        }
171
172        void liikuta( PhysicsObject hahmo, Vector nopeus )
173        {
174            //hahmo.Walk( nopeus ); Kokeile liikuttamiseen .Push-metodia
175            hahmo.Push(nopeus);
176        }
177
178        void hyppaa( PhysicsObject hahmo, Vector voima )
179        {
180            //hahmo.Jump( voima ); Kokeile hyppäämiseen .Hit()-metodia
181            if (voikoHypata)
182            {
183                hahmo.Hit(voima);
184                voikoHypata = false;
185            }
186        }
187
188
189
190        void osuiMaaliin(PhysicsObject collidingObject, PhysicsObject otherObject)
191        {
192            //MessageDisplay.Add("Levelin bottom: " + Level.Bottom);
193            //MessageDisplay.Add(pelaaja1.Position.Y.ToString());
194            if (otherObject.Tag.ToString() == "maali")
195            {
196                this.PlaySound("maali");
197                int edellisenKentanPisteet = pisteLaskuri.Value;
198                seuraavaKentta();
199                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
200            }
201
202            if (otherObject.Tag.ToString() == "pallo")
203            {
204                Explosion e = new Explosion(500);
205                e.Speed = 500.0;
206                e.Force = 10000;
207
208
209                e.Position = pelaaja1.Position;
210                otherObject.Destroy();
211                Add(e);
212            }
213
214            if (collidingObject.Y < Level.Bottom + 20)
215            {
216                MessageDisplay.Add("Kuolit! Paina Enter yrittääksesi uudestaan");
217                Explosion e = new Explosion(1000);
218                e.Speed = 1000.0;
219                e.Force = 10000;
220
221
222                e.Position = pelaaja1.Position;
223                collidingObject.Destroy();
224                Add(e);
225            }
226
227        }
228           
229
230        void lisaaHyppy(PhysicsObject collidingObject, PhysicsObject otherObject)
231        {
232            if (otherObject.Tag.ToString() == "taso")
233            {
234                voikoHypata = true;
235            }
236        }
237    }
238}
Note: See TracBrowser for help on using the repository browser.