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

Revision 673, 7.8 KB checked in by paaaanro, 10 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 = 1800;
33            Level.Height = 1050;
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            char[,] ruudut = Tiles.ReadFromFile("kentta.txt");
84            Tiles.Insert(this, ruudut, merkit, 50, 50);
85
86            /*
87            lisaaTaso(-4200, -500);
88            lisaaTaso(-4100, -400);
89            lisaaTaso(-3900, -350);
90            lisaaTaso(-3700, -250);
91            lisaaTaso(-4500, -500);
92            lisaaTaso(-4400, -500);
93
94
95            lisaaTaso(-3700, -300);
96            lisaaTaso(-3700, -400);
97            lisaaTaso(-3700, -350);
98            lisaaTaso(-3700, -250);
99            lisaaTaso(-4500, -500);
100            lisaaTaso(-4400, -500);
101            */
102            for (int i = 0; i < 10; i++)
103            {
104                lisaaPallo();
105            }
106            lisaaMaali();
107        }
108
109        PhysicsObject lisaaTaso()
110        {
111            PhysicsObject taso = PhysicsObject.CreateStaticObject( 50, 50 );
112            taso.Image = LoadImage("taso");
113            taso.LinearDamping = 1;
114            taso.Tag = "taso";
115            return taso;
116
117        }
118
119        void lisaaPallo()
120        {
121            PhysicsObject pallo = PhysicsObject.CreateStaticObject(25, 25);
122            pallo.Shape = Shapes.Circle;
123            pallo.Image = LoadImage("Untitled");
124            pallo.LinearDamping = 1;
125            pallo.IgnoresCollisionResponse = true;
126            pallo.Tag = "pallo";
127            pallo.X = RandomGen.NextDouble(Level.Left + 60, Level.Right -60);
128            pallo.Y = RandomGen.NextDouble(Level.Top -20, Level.Bottom +20);
129            Add(pallo);
130        }
131
132        PhysicsObject lisaaPelaajat()
133        {
134            pelaaja1 = new PhysicsObject(40, 40, Shapes.Circle);
135            pelaaja1.Mass = 2.0;
136           
137            pelaaja1.Image = LoadImage( "Untitled" );
138            pelaaja1.KineticFriction = 1;
139            pelaaja1.LinearDamping = 0.95;
140            pelaaja1.Restitution = 0.4;
141
142            AddCollisionHandler( pelaaja1, osuiMaaliin );
143            AddCollisionHandler( pelaaja1, lisaaHyppy);
144           
145            return pelaaja1;
146        }
147
148        PhysicsObject lisaaMaali()
149        {
150            PhysicsObject maali = PhysicsObject.CreateStaticObject( 50, 50, Shapes.Circle );
151            maali.Tag = "maali";
152            maali.IgnoresCollisionResponse = true;
153            maali.Image = LoadImage( "tahti" );
154            return maali;
155        }
156
157        void lisaaNappaimet()
158        {
159            Keyboard.Listen( Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet" );
160            Keyboard.Listen( Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä" );
161
162            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
163            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
164            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, new Vector(0, hyppyVoima));
165            Keyboard.Listen(Key.Enter, ButtonState.Pressed, seuraavaKentta, "Restart");
166
167            lisaaGamePadNappaimet( ControllerOne );
168        }
169
170        void lisaaGamePadNappaimet( GamePad controller )
171        {
172            controller.Listen( Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä" );
173
174            controller.Listen( Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, new Vector(-nopeus,0) );
175            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, new Vector(nopeus,0));
176            controller.Listen( Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, new Vector(0, hyppyVoima) );
177        }
178
179        void liikuta( PhysicsObject hahmo, Vector nopeus )
180        {
181            //hahmo.Walk( nopeus ); //Kokeile liikuttamiseen .Push-metodia
182            hahmo.Push(nopeus);
183        }
184
185        void hyppaa( PhysicsObject hahmo, Vector voima )
186        {
187            //hahmo.Jump( voima ); Kokeile hyppäämiseen .Hit()-metodia
188            if (voikoHypata)
189            {
190                hahmo.Hit(voima);
191                voikoHypata = false;
192            }
193        }
194
195
196
197        void osuiMaaliin(PhysicsObject collidingObject, PhysicsObject otherObject)
198        {
199            //MessageDisplay.Add("Levelin bottom: " + Level.Bottom);
200            //MessageDisplay.Add(pelaaja1.Position.Y.ToString());
201            if (otherObject.Tag.ToString() == "maali")
202            {
203                this.PlaySound("maali");
204                int edellisenKentanPisteet = pisteLaskuri.Value;
205                seuraavaKentta();
206                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
207            }
208
209            if (otherObject.Tag.ToString() == "pallo")
210            {
211                Explosion e = new Explosion(500);
212                e.Speed = 500.0;
213                e.Force = 10000;
214
215
216                e.Position = pelaaja1.Position;
217                otherObject.Destroy();
218                Add(e);
219            }
220
221            if (collidingObject.Y < Level.Bottom + 20)
222            {
223                MessageDisplay.Add("Kuolit! Paina Enter yrittääksesi uudestaan");
224                Explosion e = new Explosion(1000);
225                e.Speed = 1000.0;
226                e.Force = 10000;
227
228
229                e.Position = pelaaja1.Position;
230                collidingObject.Destroy();
231                Add(e);
232            }
233
234        }
235           
236
237        void lisaaHyppy(PhysicsObject collidingObject, PhysicsObject otherObject)
238        {
239            if (otherObject.Tag.ToString() == "taso")
240            {
241                voikoHypata = true;
242            }
243        }
244    }
245}
Note: See TracBrowser for help on using the repository browser.