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

Revision 765, 8.7 KB checked in by leperoih, 11 years ago (diff)

kaikki on valmizta.

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