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

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