source: 2010/23/eearleht/Siikapeli/Peli.cs @ 10337

Revision 755, 7.6 KB checked in by eearleht, 10 years ago (diff)

Saimme Siikapelin valmiiksi!!!!!!!!!!!!!!

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5using System.Collections.Generic;
6
7
8namespace Siikapeli
9{
10    class Tasohyppely : PhysicsGame
11    {
12        const int ruudunLeveys = 50;
13        const int ruudunKorkeus = 50; 
14        const double nopeus = 200;
15        const double hyppyVoima =3000;
16
17        IntMeter pisteLaskuri;
18        ValueDisplay pisteNaytto;
19
20        PlatformCharacter pelaaja1;
21
22        int kenttaNro; // monesko kenttä on menossa
23
24
25        protected override void Begin()
26        {
27            kenttaNro = 0;
28            Level.Width = 2000;
29            Level.Height = 1000;
30
31            // Luodaan pistelaskuri
32            pisteLaskuri = new IntMeter(0);
33
34            // luodaan pistelaskunäyttö
35            pisteNaytto = new ValueDisplay();
36            pisteNaytto.Text = "Pisteitä: ";
37            pisteNaytto.X = Screen.RightSafe - 250;
38            pisteNaytto.Y = Screen.TopSafe - 50;
39            pisteNaytto.BindTo(pisteLaskuri);
40            Add(pisteNaytto);    // lisätään peliin
41
42            // Zoomataan lähemmäksi
43            Camera.ZoomFactor = 2.0;
44
45            Camera.StayInLevel = true;
46
47            seuraavaKentta();
48            MessageDisplay.Add("Löydä Pilkkireikä ja vie Siika kotiin");
49        }
50
51        void seuraavaKentta()
52        {
53            ClearAll();
54            pisteLaskuri.Reset();
55
56            kenttaNro += 1; // lisätään kenttänumeroa yhdellä
57            MessageDisplay.Add("Kenttä " + kenttaNro);
58
59            // Asetetaan painovoima
60            Gravity = new Vector(0, -1000);
61
62            luoKentta();
63            lisaaNappaimet();
64            lisaaMaali();
65            Camera.Follow(pelaaja1);
66        }
67
68        void luoKentta()
69        {
70            //Level.CreateBorders();
71            Level.Background.CreateGradient(Color.White, Color.White);
72            Level.Background.Image = LoadImage("Ice fishing");
73            lisaaPelaajat();
74
75            var merkit = new Dictionary<char, ObjectCreator>();
76            merkit['x'] = LuoPalikka;
77            merkit['i'] = LuoHauki;
78            merkit['y'] = LuoHai;
79            merkit['p'] = LuoPiikkikala;
80
81            char[,] ruudut = Tiles.ReadFromFile("kentta1.txt");
82            Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
83           
84        }
85
86        PhysicsObject LuoPalikka()
87        {
88            PhysicsObject palikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
89            palikka.Tag = "palikka";
90            return palikka;
91        }
92
93        PhysicsObject LuoHauki()
94        {
95            PhysicsObject Hauki = new PhysicsObject(50,50);
96            Hauki.IgnoresGravity = true;
97            Hauki.IgnoresCollisionResponse = true;
98            Hauki.Image = LoadImage("Hauki");
99            Hauki.Velocity = new Vector(-500, 0);
100            Hauki.Tag = "vihollinen";
101
102            AddCollisionHandler(Hauki, kaannaHauki);
103            return Hauki;
104           
105        }
106
107        void kaannaHauki(PhysicsObject kala, PhysicsObject seina)
108        {
109            if (!(seina.Y < kala.Y))
110            kala.Velocity = -kala.Velocity;
111        }
112
113        PhysicsObject LuoHai()
114        {
115            PhysicsObject Hai = new PhysicsObject(100.0, 100.0);
116            Hai.Image = LoadImage("Hai");
117            Hai.IgnoresGravity = true;
118            Hai.IgnoresCollisionResponse = true;
119            Hai.Image = LoadImage("Hai");
120            Hai.Velocity = new Vector(-500, 0);
121            Hai.Tag = "vihollinen";
122
123            AddCollisionHandler(Hai, kaannaHai);
124            return Hai;
125        }
126       
127        void kaannaHai(PhysicsObject kala, PhysicsObject seina)
128        {
129            if ((seina.Tag.ToString() == "palikka") && (seina.Y == kala.Y))
130                kala.Velocity = -kala.Velocity;
131        }
132
133        PhysicsObject LuoPiikkikala()
134        {
135            PhysicsObject Piikkikala = new PhysicsObject(75.0, 75.0);
136            Piikkikala.Image = LoadImage("Piikkikala");
137            Piikkikala.IgnoresGravity = true;
138            Piikkikala.IgnoresCollisionResponse = true;
139            Piikkikala.Image = LoadImage("Piikkikala");
140            Piikkikala.Velocity = new Vector(-500, 0);
141            Piikkikala.Tag = "vihollinen";
142
143            AddCollisionHandler(Piikkikala, kaannaPiikkikala);
144            return Piikkikala;
145        }
146
147        void kaannaPiikkikala(PhysicsObject kala, PhysicsObject seina)
148        {
149            if ((seina.Tag.ToString() == "palikka") && (seina.Y == kala.Y))
150                kala.Velocity = -kala.Velocity;
151        }
152
153        void lisaaTaso(double x, double y)
154        {   
155            PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30);
156            taso.Color = Color.Black;
157            taso.X = x;
158            taso.Y = y;
159            Add(taso);
160        }
161
162        void lisaaPelaajat()
163        {
164            pelaaja1 = new PlatformCharacter(40, 40);
165            pelaaja1.Mass = 4.0;
166            pelaaja1.Image = LoadImage("Siika");
167            pelaaja1.X = -5250;
168            pelaaja1.Y = Level.Bottom + 125;
169
170            AddCollisionHandler(pelaaja1, osuiMaaliin);
171
172            Add(pelaaja1);
173        }
174
175        void lisaaMaali()
176        {
177            PhysicsObject maali = PhysicsObject.CreateStaticObject(50, 50, Shapes.Circle);
178            maali.Tag = "maali";
179            maali.IgnoresCollisionResponse = true;
180            maali.X = 5600;
181            maali.Y = -425;
182            maali.Image = LoadImage("Pilkkireika");
183            Add(maali);
184        }
185
186        void lisaaNappaimet()
187        {
188            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
189            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
190
191            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
192            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
193            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
194
195            lisaaGamePadNappaimet(ControllerOne);
196        }
197
198        void lisaaGamePadNappaimet(GamePad controller)
199        {
200            controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
201
202            controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
203            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
204            controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
205        }
206
207        void liikuta(PlatformCharacter hahmo, double nopeus)
208        {
209            hahmo.Walk(nopeus);
210        }
211
212        void hyppaa(PlatformCharacter hahmo, double voima)
213        {
214            hahmo.Jump(voima);
215        }
216
217        void osuiMaaliin(PhysicsObject collidingObject, PhysicsObject otherObject)
218        {
219            if (otherObject.Tag.ToString() == "maali")
220            {
221                this.PlaySound("maali");
222                int edellisenKentanPisteet = pisteLaskuri.Value;
223                //seuraavaKentta();
224                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
225                Level.Background.Image = LoadImage("VOITTO");
226            }
227
228
229            if (otherObject.Tag.ToString() == "vihollinen")
230            {
231                collidingObject.Destroy();
232                seuraavaKentta();
233            }
234        }
235    }
236}
Note: See TracBrowser for help on using the repository browser.