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

Revision 950, 8.4 KB checked in by joaamaka, 13 years ago (diff)

Tein omaa peliä.

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    int vaikeustaso = new int();
14
15    GameObject helppo = new GameObject(300, 100);
16    GameObject keski = new GameObject(300, 100);
17    GameObject vaikea = new GameObject(300, 100);
18    GameObject loppu = new GameObject(100, 100);
19
20    PlatformCharacter olio;
21    Vector aloituspaikka;
22    TextDisplay mittari;
23     
24    const int ruudunLeveys = 100;
25    const int ruudunKorkeus = 50;
26   
27    protected override void Begin()
28    {
29        Level.Width = 1500;
30        Level.Height = 1000;
31
32        alkuvalikko();
33
34        // Zoomataan lähemmäksi
35        Camera.ZoomFactor = 1.0;
36
37        Camera.StayInLevel = true;
38
39        Mouse.Enabled = true;
40        Mouse.IsCursorVisible = true;
41
42        seuraavaKentta();
43        MessageDisplay.Add("Hyppää kuiluun!");
44    }
45
46    void alkuvalikko()
47    {
48        ClearAll();
49        Mouse.Enabled = true;
50        Mouse.IsCursorVisible = true;
51        Camera.Position = new Vector(0,0);
52        Camera.StayInLevel = true;
53        Camera.FollowedObject = null;
54
55        helppo = new GameObject(300, 100);
56        keski = new GameObject(300, 100);
57        vaikea = new GameObject(300, 100);
58        loppu = new GameObject(100, 100);
59
60        Mouse.ListenOn(helppo, MouseButton.Left, ButtonState.Pressed, valitse, "", 0);
61        Mouse.ListenOn(keski, MouseButton.Left, ButtonState.Pressed, valitse, "", 1);
62        Mouse.ListenOn(vaikea, MouseButton.Left, ButtonState.Pressed, valitse, "", 2);
63        Mouse.ListenOn(loppu, MouseButton.Left, ButtonState.Pressed, Exit, "");
64
65       
66        helppo.Image = LoadImage("vtaso");
67        keski.Image = LoadImage("vtaso2");
68        vaikea.Image = LoadImage("vtaso3");
69        loppu.Image = LoadImage("loppu");
70       
71        helppo.X = 100;
72        helppo.Y = 200;
73        keski.X = 100;
74        keski.Y = 0;
75        vaikea.X = 100;
76        vaikea.Y = -200;
77        loppu.X = -200;
78        loppu.Y = 200;
79       
80        Add(helppo);
81        Add(keski);
82        Add(vaikea); 
83        Add(loppu);
84        Level.Background.CreateGradient(Color.Gray, Color.White);
85    }
86
87    void valitse(int valittutaso)
88    {
89        if (valittutaso == 0)
90        {
91            vaikeustaso = 0;
92            Camera.ZoomFactor = 1.0;
93        }
94        else if (valittutaso == 1) 
95        {
96            vaikeustaso = 1; 
97            Camera.ZoomFactor = 1.5;
98        }
99        else if (valittutaso == 2)
100        {
101            vaikeustaso = 2;
102            Camera.ZoomFactor = 2.0;
103        }
104
105        Mouse.IsCursorVisible = false;
106        Mouse.Enabled = false;
107        seuraavaKentta();
108    }
109   
110    void seuraavaKentta()
111    {
112        ClearAll();
113
114        // Asetetaan painovoima
115        Gravity = new Vector(0, -700);
116        luoKentta();
117        lisaaNappaimet();
118        Camera.Follow(olio);
119         
120        Timer korkeusAjastin = new Timer(); 
121        korkeusAjastin.Interval = 0.1; 
122        korkeusAjastin.Trigger += NaytaKorkeus; 
123        Add( korkeusAjastin ); 
124        korkeusAjastin.Start(); 
125    }
126
127    void luoKentta()
128    {
129        Level.Background.CreateGradient(Color.Gray, Color.White);
130       
131        TileMap ruudut = TileMap.FromFile("TextFile1.txt");
132        ruudut['-'] = lisaaTaso;
133        ruudut['|'] = lisaaSeina;
134        ruudut['_'] = lisaaNuoli;
135        ruudut['.'] = lisaaNuoli2;
136        ruudut['!'] = lisaaOhje;
137        ruudut[':'] = lisaaVaroitus;
138        ruudut['*'] = lisaaPelaajat;
139        ruudut['x'] = Arvonta;
140        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
141        aloituspaikka = olio.Position;
142        Level.CreateBorders();
143        AddCollisionHandler(olio, KasitteleOlionTormays);
144
145        mittari = new TextDisplay();
146        Add(mittari);
147        mittari.Text = "Syvyys: " + korkeus; 
148    }
149
150    PhysicsObject lisaaTaso()
151    {
152        PhysicsObject taso = PhysicsObject.CreateStaticObject(100,30);
153        Image image = Image.CreateGradient(150, 30, Color.White, Color.Gray);
154        taso.Image = image;
155        return taso;
156    }
157   
158    PhysicsObject lisaaSeina()
159    {
160        PhysicsObject seina = PhysicsObject.CreateStaticObject(30, 130);
161        Image image = Image.CreateGradient(100, 30, Color.White, Color.Gray);
162        seina.Image = image;
163        return seina;
164    }
165
166    PhysicsObject lisaaNuoli2()
167    {
168        PhysicsObject nuoli2 = new PhysicsObject(50, 50, Shapes.Rectangle);
169        nuoli2.IgnoresGravity = true;
170        nuoli2.IgnoresCollisionResponse = true;
171        nuoli2.X = 100;
172        nuoli2.Y = 50;
173        nuoli2.Image = LoadImage("nuoli2");
174        return nuoli2;
175    }
176
177    PhysicsObject lisaaOhje()
178    {
179        PhysicsObject ohje = new PhysicsObject(225, 75, Shapes.Rectangle);
180        ohje.IgnoresGravity = true;
181        ohje.IgnoresCollisionResponse = true;
182        ohje.X = -100;
183        ohje.Y = 50;
184        ohje.Image = LoadImage("ohje");
185        return ohje;
186    }
187
188    PhysicsObject lisaaVaroitus()
189    {
190        PhysicsObject varoitus = new PhysicsObject(150, 75, Shapes.Rectangle);
191        varoitus.IgnoresGravity = true;
192        varoitus.IgnoresCollisionResponse = true;
193        varoitus.X = -100;
194        varoitus.Y = 70;
195        varoitus.Image = LoadImage("warning");
196        return varoitus;
197    }
198
199    PhysicsObject lisaaPiikit()
200    {
201        PhysicsObject piikit = new PhysicsObject(100, 30, Shapes.Rectangle);
202        piikit.Tag = "piikki";
203        piikit.IgnoresGravity = true;
204        piikit.IgnoresCollisionResponse = true;
205        piikit.X = 100;
206        piikit.Y = 50;
207        piikit.Image = LoadImage("Spikes");
208        return piikit;
209    }
210   
211    void KasitteleOlionTormays(PhysicsObject olio, PhysicsObject kohde)
212    {
213        if (kohde.Tag.ToString() == "piikki")
214        {
215            olio.Position = aloituspaikka;
216            seuraavaKentta();
217
218        }
219        //tähän kirjoitetaan mitä halutaan tehdä, kun pallo törmää johonkin
220    }
221     
222    void NaytaKorkeus( Timer sender ) 
223    { 
224        korkeus = Math.Round((aloituspaikka.Y - olio.Y), 1);
225        mittari.Text = "Syvyys: " + korkeus; 
226        mittari.X = 100;
227        mittari.Y = 100;
228   }
229
230    PhysicsObject Arvonta()
231    {
232        int ruutu= RandomGen.NextInt(1, 3);
233        if (ruutu == 1)
234        {
235            return lisaaPiikit();
236        }
237        if (ruutu == 2)
238        {
239            return lisaaTaso();
240        }
241        else
242        {
243            PhysicsObject tyhja = new PhysicsObject(40, 40);
244            tyhja.IgnoresCollisionResponse = true;
245            tyhja.IsVisible = false;
246            return tyhja;
247        }
248    }
249
250
251    PhysicsObject lisaaNuoli()
252    {
253        PhysicsObject nuoli = new PhysicsObject(50, 50, Shapes.Rectangle);
254        nuoli.IgnoresGravity = true;
255        nuoli.IgnoresCollisionResponse = true;
256        nuoli.X = 100;
257        nuoli.Y = 50;
258        nuoli.Image = LoadImage("nuoli");
259        return nuoli;
260    }
261
262    void lisaaNappaimet()
263    {
264        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, null);
265        Keyboard.Listen(Key.Escape, ButtonState.Pressed, alkuvalikko, "Poistu valikkoon");
266
267        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", olio, -nopeus);
268        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", olio, nopeus);
269        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", olio, hyppyVoima);
270        Keyboard.Listen(Key.R, ButtonState.Pressed, palauta, "Palauttaa olion alkuun", olio);
271    }
272
273
274    void liikuta(PlatformCharacter hahmo, double nopeus)
275    {
276        hahmo.Push(new Vector (nopeus, 0));
277    }
278
279    void hyppaa(PlatformCharacter hahmo, double voima)
280    {
281        hahmo.Jump(voima);
282    }
283
284    void palauta(PlatformCharacter hahmo)
285    {
286        hahmo.Position = aloituspaikka;
287        seuraavaKentta();
288    }
289
290
291    PhysicsObject lisaaPelaajat()
292    {
293        olio = new PlatformCharacter(40, 40);
294        olio.Shape = Shapes.Rectangle;
295        olio.Color = Color.Black;
296        olio.Size = new Vector(40, 40);
297        olio.Y = 100;
298        olio.CanRotate = true;
299        olio.KineticFriction = 0.0;
300        olio.StaticFriction = 0.0;
301        olio.Mass = 1.0;
302        return olio;
303    }
304
305}
Note: See TracBrowser for help on using the repository browser.