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

Revision 723, 7.5 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 BombsAway : 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            SetWindowSize(true);
51
52            seuraavaKentta();
53            MessageDisplay.Add( "Etsi iso tähti!" );
54        }
55
56        void seuraavaKentta()
57        {
58            ClearAll();
59            pisteLaskuri.Reset();
60
61            voikoHypata = true;
62
63            //kenttaNro += 1;  lisätään kenttänumeroa yhdellä
64            MessageDisplay.Add( "Kenttä " + kenttaNro );
65
66            // Asetetaan painovoima
67            Gravity = new Vector( 0, -2000 );
68
69            luoKentta();
70            lisaaNappaimet();
71            Camera.Follow( pelaaja1 );
72        }
73
74        void luoKentta()
75        {
76            Level.CreateBorders(1.0, false);
77            Level.Background.CreateGradient( Color.Gray, Color.DarkGray );
78
79            var merkit = new Dictionary<char, ObjectCreator>();
80            merkit['X'] = lisaaTaso;
81            merkit['M'] = lisaaMaali;
82            merkit['P'] = lisaaPelaajat;
83            merkit['O'] = lisaaTaso2;
84
85
86            char[,] ruudut = Tiles.ReadFromFile("kentta.txt");
87            Tiles.Insert(this, ruudut, merkit, 50, 50);
88
89       
90            for (int i = 0; i < 30; i++)
91            {
92                lisaaPallo();
93            }
94            lisaaMaali();
95        }
96
97        PhysicsObject lisaaTaso()
98        {
99            PhysicsObject taso = PhysicsObject.CreateStaticObject( 50, 50 );
100            taso.Image = LoadImage("CUBE");
101            taso.LinearDamping = 1;
102            taso.Tag = "taso";
103            return taso;
104
105        }
106
107        PhysicsObject lisaaTaso2()
108        {
109            PhysicsObject taso = PhysicsObject.CreateStaticObject(50, 50);
110            taso.Image = LoadImage("taso");
111            taso.LinearDamping = 1;
112            taso.Tag = "taso2";
113            return taso;
114
115        }
116
117
118        void lisaaPallo()
119        {
120            PhysicsObject pallo = PhysicsObject.CreateStaticObject(25, 25);
121            pallo.Shape = Shapes.Circle;
122            pallo.Image = LoadImage("Untitled");
123            pallo.LinearDamping = 1;
124            pallo.IgnoresCollisionResponse = true;
125            pallo.Tag = "pallo";
126            pallo.X = RandomGen.NextDouble(Level.Left + 60, Level.Right -60);
127            pallo.Y = RandomGen.NextDouble(Level.Top -20, Level.Bottom +20);
128            Add(pallo);
129        }
130
131        PhysicsObject lisaaPelaajat()
132        {
133            pelaaja1 = new PhysicsObject(40, 40, Shapes.Circle);
134            pelaaja1.Mass = 2.0;
135           
136            pelaaja1.Image = LoadImage( "Untitled" );
137            pelaaja1.KineticFriction = 1;
138            pelaaja1.LinearDamping = 0.95;
139            pelaaja1.Restitution = 0.4;
140
141            AddCollisionHandler( pelaaja1, osuiMaaliin );
142            AddCollisionHandler( pelaaja1, lisaaHyppy);
143           
144            return pelaaja1;
145        }
146
147        PhysicsObject lisaaMaali()
148        {
149            PhysicsObject maali = PhysicsObject.CreateStaticObject( 50, 50, Shapes.Circle );
150            maali.Tag = "maali";
151            maali.IgnoresCollisionResponse = true;
152            maali.Image = LoadImage( "tahti" );
153            return maali;
154        }
155
156        void lisaaNappaimet()
157        {
158            Keyboard.Listen( Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet" );
159            Keyboard.Listen( Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä" );
160
161            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
162            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
163            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, new Vector(0, hyppyVoima));
164            Keyboard.Listen(Key.Enter, ButtonState.Pressed, seuraavaKentta, "Restart");
165
166        }
167
168        void liikuta( PhysicsObject hahmo, Vector nopeus )
169        {
170            //hahmo.Walk( nopeus ); //Kokeile liikuttamiseen .Push-metodia
171            hahmo.Push(nopeus);
172        }
173
174        void hyppaa( PhysicsObject hahmo, Vector voima )
175        {
176            //hahmo.Jump( voima ); Kokeile hyppäämiseen .Hit()-metodia
177            if (voikoHypata)
178            {
179                hahmo.Hit(voima);
180                voikoHypata = false;
181            }
182        }
183
184
185
186        void osuiMaaliin(PhysicsObject collidingObject, PhysicsObject otherObject)
187        {
188            //MessageDisplay.Add("Levelin bottom: " + Level.Bottom);
189            //MessageDisplay.Add(pelaaja1.Position.Y.ToString());
190            if (otherObject.Tag.ToString() == "maali")
191            {
192                this.PlaySound("maali");
193                int edellisenKentanPisteet = pisteLaskuri.Value;
194                seuraavaKentta();
195                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
196            }
197
198            if (otherObject.Tag.ToString() == "pallo")
199            {
200                Explosion e = new Explosion(500);
201                e.Speed = 500.0;
202                e.Force = 5000;
203
204
205                e.Position = pelaaja1.Position;
206                otherObject.Destroy();
207                Add(e);
208            }
209
210            if (collidingObject.Y < Level.Bottom + 20)
211            {
212                MessageDisplay.Add("Kuolit! Paina Enter yrittääksesi uudestaan");
213                Explosion e = new Explosion(1000);
214                e.Speed = 1000.0;
215                e.Force = 10000;
216
217
218                e.Position = pelaaja1.Position;
219                collidingObject.Destroy();
220                Add(e);
221            }
222
223          if (otherObject.Tag.ToString() == "taso2")
224            {
225                MessageDisplay.Add("Kuolit! Paina Enter yrittääksesi uudestaan");
226                Explosion e = new Explosion(1000);
227                e.Speed = 1000.0;
228                e.Force = 10000;
229
230
231                e.Position = pelaaja1.Position;
232                collidingObject.Destroy();
233                Add(e);
234            }
235
236        }
237           
238
239        void lisaaHyppy(PhysicsObject collidingObject, PhysicsObject otherObject)
240        {
241            if (otherObject.Tag.ToString() == "taso")
242            {
243                voikoHypata = true;
244            }
245        }
246    }
247}
Note: See TracBrowser for help on using the repository browser.