source: 2010/24/joaamaka/The hole/Peli.cs @ 943

Revision 943, 6.6 KB checked in by joaamaka, 12 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6
7class Tasohyppely : PhysicsGame
8{
9    const double nopeus = 1000;
10    const double hyppyVoima = 500;
11    double korkeus;
12
13    PlatformCharacter olio;
14    Vector aloituspaikka;
15    TextDisplay mittari;
16     
17    const int ruudunLeveys = 100;
18    const int ruudunKorkeus = 30;
19   
20    protected override void Begin()
21    {
22        Level.Width = 1500;
23        Level.Height = 1000;
24
25        // Zoomataan lähemmäksi
26        Camera.ZoomFactor = 2.0;
27
28        Camera.StayInLevel = true;
29
30        seuraavaKentta();
31        MessageDisplay.Add("Hyppää kuiluun!");
32    }
33
34    void seuraavaKentta()
35    {
36        ClearAll();
37
38        // Asetetaan painovoima
39        Gravity = new Vector(0, -700);
40
41        luoKentta();
42        lisaaNappaimet();
43        Camera.Follow(olio);
44         
45        Timer korkeusAjastin = new Timer(); 
46        korkeusAjastin.Interval = 0.1; 
47        korkeusAjastin.Trigger += NaytaKorkeus; 
48        Add( korkeusAjastin ); 
49        korkeusAjastin.Start(); 
50
51    }
52
53    void luoKentta()
54    {
55        Level.Background.CreateGradient(Color.Gray, Color.White);
56
57        TileMap ruudut = TileMap.FromFile("TextFile1.txt");
58        ruudut['-'] = lisaaTaso;
59        ruudut['_'] = lisaaTaso2;
60        ruudut['.'] = lisaaTaso3;
61        ruudut['!'] = lisaaTaso4;
62        ruudut[':'] = lisaaTaso5;
63        ruudut[','] = lisaaPiikit;
64        ruudut['*'] = lisaaPelaajat;
65        ruudut['x'] = Arvonta;
66        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
67        aloituspaikka = olio.Position;
68        Level.CreateBorders();
69        AddCollisionHandler(olio, KasitteleOlionTormays);
70
71        mittari = new TextDisplay();
72        Add(mittari);
73        mittari.Text = "Syvyys: " + korkeus; 
74    }
75
76    PhysicsObject lisaaTaso()
77    {
78        PhysicsObject taso = PhysicsObject.CreateStaticObject(150,30);
79        Image image = Image.CreateGradient(150, 30, Color.White, Color.Gray);
80        taso.Image = image;
81        return taso;
82    }
83
84    PhysicsObject lisaaTaso3()
85    {
86        PhysicsObject nuoli2 = new PhysicsObject(50, 50, Shapes.Rectangle);
87        nuoli2.IgnoresGravity = true;
88        nuoli2.IgnoresCollisionResponse = true;
89        nuoli2.X = 100;
90        nuoli2.Y = 50;
91        nuoli2.Image = LoadImage("nuoli2");
92        return nuoli2;
93    }
94
95    PhysicsObject lisaaTaso4()
96    {
97        PhysicsObject ohje = new PhysicsObject(150, 50, Shapes.Rectangle);
98        ohje.IgnoresGravity = true;
99        ohje.IgnoresCollisionResponse = true;
100        ohje.X = -100;
101        ohje.Y = 50;
102        ohje.Image = LoadImage("ohje");
103        return ohje;
104    }
105
106    PhysicsObject lisaaTaso5()
107    {
108        PhysicsObject varoitus = new PhysicsObject(100, 50, Shapes.Rectangle);
109        varoitus.IgnoresGravity = true;
110        varoitus.IgnoresCollisionResponse = true;
111        varoitus.X = -100;
112        varoitus.Y = 50;
113        varoitus.Image = LoadImage("warning");
114        return varoitus;
115    }
116
117    PhysicsObject lisaaPiikit()
118    {
119        PhysicsObject piikit = new PhysicsObject(100, 50, Shapes.Rectangle);
120        piikit.Tag = "piikki";
121        piikit.IgnoresGravity = true;
122        piikit.IgnoresCollisionResponse = true;
123        piikit.X = 100;
124        piikit.Y = 50;
125        piikit.Image = LoadImage("Spikes");
126        return piikit;
127    }
128   
129    void KasitteleOlionTormays(PhysicsObject olio, PhysicsObject kohde)
130    {
131        if (kohde.Tag.ToString() == "piikki")
132        {
133            olio.Position = aloituspaikka;
134            ControllerOne.Vibrate(100.0, 100.0, 15.0, 15.0, 1.0);
135            seuraavaKentta();
136
137        }
138        //tähän kirjoitetaan mitä halutaan tehdä, kun pallo törmää johonkin
139    }
140     
141    void NaytaKorkeus( Timer sender ) 
142    { 
143        korkeus = Math.Round((aloituspaikka.Y - olio.Y), 1);
144        mittari.Text = "Syvyys: " + korkeus; 
145        mittari.X = 100;
146        mittari.Y = 100;
147   }
148
149    PhysicsObject Arvonta()
150    {
151        int ruutu= RandomGen.NextInt(1, 3);
152        if (ruutu == 1)
153        {
154            return lisaaPiikit();
155        }
156        if (ruutu == 2)
157        {
158            return lisaaTaso();
159        }
160        else
161        {
162            PhysicsObject tyhja = new PhysicsObject(40, 40);
163            tyhja.IgnoresCollisionResponse = true;
164            tyhja.IsVisible = false;
165            return tyhja;
166        }
167    }
168
169
170    PhysicsObject lisaaTaso2()
171    {
172        PhysicsObject nuoli = new PhysicsObject(50, 50, Shapes.Rectangle);
173        nuoli.IgnoresGravity = true;
174        nuoli.IgnoresCollisionResponse = true;
175        nuoli.X = 100;
176        nuoli.Y = 50;
177        nuoli.Image = LoadImage("nuoli");
178        return nuoli;
179    }
180
181    void lisaaNappaimet()
182    {
183        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, null);
184        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
185
186        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", olio, -nopeus);
187        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", olio, nopeus);
188        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", olio, hyppyVoima);
189        Keyboard.Listen(Key.R, ButtonState.Pressed, palauta, "Palauttaa olion alkuun", olio);
190
191        ControllerOne.Listen(Button.Start, ButtonState.Pressed, ShowControlHelp, null);
192        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
193
194        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Liikkuu vasemmalle", olio, -nopeus);
195        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Liikkuu oikealle", olio, nopeus);
196        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Hyppää", olio, hyppyVoima);
197        ControllerOne.Listen(Button.Y, ButtonState.Pressed, palauta, "Palauttaa olion alkuun", olio);
198    }
199
200
201    void liikuta(PlatformCharacter hahmo, double nopeus)
202    {
203        hahmo.Push(new Vector (nopeus, 0));
204    }
205
206    void hyppaa(PlatformCharacter hahmo, double voima)
207    {
208        hahmo.Jump(voima);
209    }
210
211    void palauta(PlatformCharacter hahmo)
212    {
213        hahmo.Position = aloituspaikka;
214    }
215
216
217    PhysicsObject lisaaPelaajat()
218    {
219        olio = new PlatformCharacter(40, 40);
220        olio.Shape = Shapes.Rectangle;
221        olio.Color = Color.Black;
222        olio.Size = new Vector(40, 40);
223        olio.Y = 100;
224        olio.CanRotate = true;
225        olio.KineticFriction = 0.0;
226        olio.StaticFriction = 0.0;
227        olio.Mass = 1.0;
228        return olio;
229    }
230
231}
Note: See TracBrowser for help on using the repository browser.