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

Revision 612, 7.1 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.Red, 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            lisaaPallo(-4495, -460);
89
90            lisaaMaali();
91            lisaaPelaajat();
92        }
93
94        void lisaaTaso( double x, double y )
95        {
96            PhysicsObject taso = PhysicsObject.CreateStaticObject( 100, 50 );
97            taso.Color = Color.Orange;
98            taso.LinearDamping = 1;
99            taso.Tag = "taso";
100            taso.X = x;
101            taso.Y = y;
102            Add( taso );
103        }
104        void lisaaPallo(double x, double y)
105        {
106            PhysicsObject pallo = PhysicsObject.CreateStaticObject(25, 25);
107            pallo.Shape = Shapes.Circle;
108            pallo.Color = Color.Orange;
109            pallo.LinearDamping = 1;
110            pallo.IgnoresCollisionResponse = true;
111            pallo.Tag = "pallo";
112            pallo.X = x;
113            pallo.Y = y;
114            Add(pallo);
115        }
116
117        void lisaaPelaajat()
118        {
119            //pelaaja1 = new PlatformCharacter( 40, 40 );
120            pelaaja1 = new PhysicsObject(40, 40, Shapes.Circle);
121            pelaaja1.Mass = 2.0;
122           
123            pelaaja1.Image = LoadImage( "kuu" );
124            pelaaja1.KineticFriction = 1;
125            pelaaja1.LinearDamping = 0.95;
126
127            pelaaja1.X = Level.Left + 120;
128            pelaaja1.Y = Level.Bottom + 120;
129
130            AddCollisionHandler( pelaaja1, osuiMaaliin );
131            AddCollisionHandler(pelaaja1, lisaaHyppy);
132           
133            Add( pelaaja1 );
134        }
135
136        void lisaaMaali()
137        {
138            PhysicsObject maali = PhysicsObject.CreateStaticObject( 50, 50, Shapes.Circle );
139            maali.Tag = "maali";
140            maali.IgnoresCollisionResponse = true;
141            maali.X = 30;
142            maali.Y = -60;
143            maali.Image = LoadImage( "tahti" );
144            Add( maali );
145        }
146
147        void lisaaNappaimet()
148        {
149            Keyboard.Listen( Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet" );
150            Keyboard.Listen( Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä" );
151
152            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
153            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
154            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, new Vector(0, hyppyVoima));
155            Keyboard.Listen(Key.Enter, ButtonState.Pressed, seuraavaKentta, "Restart");
156
157            lisaaGamePadNappaimet( ControllerOne );
158        }
159
160        void lisaaGamePadNappaimet( GamePad controller )
161        {
162            controller.Listen( Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä" );
163
164            controller.Listen( Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, new Vector(-nopeus,0) );
165            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, new Vector(nopeus,0));
166            controller.Listen( Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, new Vector(0, hyppyVoima) );
167        }
168
169        void liikuta( PhysicsObject hahmo, Vector nopeus )
170        {
171            //hahmo.Walk( nopeus ); Kokeile liikuttamiseen .Push-metodia
172            hahmo.Push(nopeus);
173        }
174
175        void hyppaa( PhysicsObject hahmo, Vector voima )
176        {
177            //hahmo.Jump( voima ); Kokeile hyppäämiseen .Hit()-metodia
178            if (voikoHypata)
179            {
180                hahmo.Hit(voima);
181                voikoHypata = false;
182            }
183        }
184
185
186
187        void osuiMaaliin( PhysicsObject collidingObject, PhysicsObject otherObject )
188        {
189            //MessageDisplay.Add("Levelin bottom: " + Level.Bottom);
190            //MessageDisplay.Add(pelaaja1.Position.Y.ToString());
191            if ( otherObject.Tag.ToString() == "maali" )
192            {
193                this.PlaySound( "maali" );
194                int edellisenKentanPisteet = pisteLaskuri.Value;
195                seuraavaKentta();
196                MessageDisplay.Add( "Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet );
197            }
198
199            if (collidingObject.Y < Level.Bottom + 20)
200            {
201                MessageDisplay.Add("Kuolit! Paina Enter yrittääksesi uudestaan");
202                Explosion e = new Explosion(500);
203                e.Speed = 500.0;
204                e.Force = 10000;
205
206
207                e.Position = pelaaja1.Position;
208                collidingObject.Destroy();
209                Add(e);
210            }
211        }
212
213        void lisaaHyppy(PhysicsObject collidingObject, PhysicsObject otherObject)
214        {
215            if (otherObject.Tag.ToString() == "taso")
216            {
217                voikoHypata = true;
218            }
219        }
220    }
221}
Note: See TracBrowser for help on using the repository browser.