source: 2010/23/teematma/BombsAway/Peli.cs @ 775

Revision 775, 7.7 KB checked in by tekrjant, 10 years ago (diff)

Uusin versio talteen.

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