source: 2010/23/leperoih/Tasohyppely2/Peli.cs @ 659

Revision 659, 7.3 KB checked in by leperoih, 12 years ago (diff)

muokkailin vähä

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
13        const double nopeus = 200;
14        const double hyppyVoima = 10000;
15        const int ruudunLeveys = 50;
16        const int ruudunKorkeus = 50;
17
18        IntMeter pisteLaskuri;
19        ValueDisplay pisteNaytto;
20
21        PlatformCharacter pelaaja1;
22        PhysicsObject pahikset;
23
24        int kenttaNro; // monesko kenttä on menossa
25
26
27        protected override void Begin()
28        {
29            Timer ajastin = new Timer();
30            ajastin.Interval = 1;
31            ajastin.Trigger += new Timer.TriggerHandler(VihollinenLyo);
32            Add(ajastin);
33            ajastin.Start();
34            kenttaNro = 0;
35            Level.Width = 2000;
36            Level.Height = 1000;
37
38            // Luodaan pistelaskuri
39            pisteLaskuri = new IntMeter(0);
40
41            // luodaan pistelaskunäyttö
42            pisteNaytto = new ValueDisplay();
43            pisteNaytto.Text = "Pisteitä: ";
44            pisteNaytto.X = Screen.RightSafe - 250;
45            pisteNaytto.Y = Screen.TopSafe - 50;
46            pisteNaytto.BindTo(pisteLaskuri);
47            Add(pisteNaytto);    // lisätään peliin
48
49            // Zoomataan lähemmäksi
50            Camera.ZoomFactor = 2.0;
51
52            Camera.StayInLevel = true;
53
54            seuraavaKentta();
55            MessageDisplay.Add("Etsi iso portaali!");
56        }
57
58        protected override void Update(Time time)
59        {
60            onkoPelaajaLahella();
61            base.Update(time);
62        }
63
64        void seuraavaKentta()
65        {
66            ClearAll();
67            pisteLaskuri.Reset();
68
69            kenttaNro += 1; // lisätään kenttänumeroa yhdellä
70            MessageDisplay.Add("Kenttä " + kenttaNro);
71
72            // Asetetaan painovoima
73            Gravity = new Vector(0, -1000);
74
75            luoKentta();
76            lisaaNappaimet();
77            Camera.Follow(pelaaja1);
78        }
79
80        void luoKentta()
81        {
82            var merkit = new Dictionary<char, ObjectCreator>();
83            merkit['='] = LuoPalikka;
84            merkit['*'] = lisaaMaali;
85            char[,] ruudut = Tiles.ReadFromFile("kentta.txt");
86            Tiles.Insert(this, ruudut, merkit, ruudunLeveys, ruudunKorkeus);
87
88            Level.CreateBorders();
89            Level.Background.CreateGradient(Color.Orange, Color.Red);
90
91            lisaaPelaajat();
92        }
93
94        PhysicsObject LuoPalikka()
95        {
96            PhysicsObject palikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
97            return palikka;
98        }
99
100        PhysicsObject LuoTahti()
101        {
102            PhysicsObject tahti = PhysicsObject.CreateStaticObject(25.0, 25.0);
103            return tahti;
104        }
105
106
107        void luoKentta2()
108        {
109            Level.CreateBorders();
110        }
111
112        void lisaaTaso(double x, double y)
113        {
114            PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30);
115            taso.Color = Color.Green;
116            taso.X = x;
117            taso.Y = y;
118            Add(taso);
119        }
120
121        void lisaaPelaajat()
122        {
123            pelaaja1 = new PlatformCharacter(40, 80);
124            pelaaja1.Mass = 14.0;
125            //pelaaja1.Image = LoadImage("My char");
126            pelaaja1.X = 0;
127            pelaaja1.Y = Level.Bottom + 120;
128            Juokseminen();
129
130            AddCollisionHandler(pelaaja1, osuiMaaliin);
131
132            Add(pelaaja1);
133
134            pahikset = new PhysicsObject(40, 80);
135            pahikset.Image = LoadImage("pedobear");
136            pahikset.CanRotate = false;
137            pahikset.StaticFriction = 0.1;
138            pahikset.Mass = 10.0;
139            Add(pahikset);
140        }
141
142        void Juokseminen()
143        {
144            Image[] tekstuurit = LoadImages("oikealleliikkuu", "oikealleliikkuu2");
145            Animation KavelyTekstuuri = new Animation( tekstuurit );
146            KavelyTekstuuri.FPS = 5;
147            pelaaja1.RightWalkingAnimation = KavelyTekstuuri;
148            pelaaja1.LeftWalkingAnimation = Animation.Mirror( KavelyTekstuuri );
149            pelaaja1.RightIdleAnimation = new Animation( LoadImage( "My char" ) );
150            pelaaja1.LeftIdleAnimation = new Animation( Image.Mirror( LoadImage( "My char" ) ) );
151        }
152
153        void onkoPelaajaLahella()
154        {
155            if (Math.Abs(pelaaja1.X - pahikset.X) < 400 && pelaaja1.Y >= pahikset.Y)
156            {
157                pahikset.Hit(pelaaja1.Position - pahikset.Position);
158            }
159        }
160
161        void VihollinenLyo(Timer sender)
162        {
163            MessageDisplay.Add("vihollinenLyo");
164        }
165        PhysicsObject lisaaMaali()
166        {
167            PhysicsObject maali = PhysicsObject.CreateStaticObject(50, 50, Shapes.Triangle);
168            maali.Tag = "maali";
169            maali.IgnoresCollisionResponse = true;
170            maali.Image = LoadImage("portaali");
171            Add(maali);
172            return maali;
173        }
174
175        void lisaaNappaimet()
176        {
177            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
178            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
179
180            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
181            Keyboard.Listen(Key.Left, ButtonState.Released, liikuta, "Liikkuu vasemmalle", pelaaja1, 0.0);
182            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
183            Keyboard.Listen(Key.Right, ButtonState.Released, liikuta, "Liikkuu oikealle", pelaaja1, 0.0);
184            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
185
186            lisaaGamePadNappaimet(ControllerOne);
187        }
188
189        void lisaaGamePadNappaimet(GamePad controller)
190        {
191            controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
192
193            controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
194            controller.Listen(Button.DPadLeft, ButtonState.Released, liikuta, "Liikkuu vasemmalle", pelaaja1, 0.0);
195            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
196            controller.Listen(Button.DPadRight, ButtonState.Released, liikuta, "Liikkuu oikealle", pelaaja1, 0.0);
197            controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
198        }
199
200        void liikuta(PlatformCharacter hahmo, double nopeus)
201        {
202            hahmo.Walk(nopeus);
203        }
204
205        void hyppaa(PlatformCharacter hahmo, double voima)
206        {
207            hahmo.Jump(voima);
208        }
209
210        void osuiMaaliin(PhysicsObject collidingObject, PhysicsObject otherObject)
211        {
212            if (otherObject.Tag.ToString() == "maali")
213            {
214                this.PlaySound("maali");
215                int edellisenKentanPisteet = pisteLaskuri.Value;
216                seuraavaKentta();
217                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
218            }
219        }
220    }
221}
Note: See TracBrowser for help on using the repository browser.