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

Revision 982, 10.5 KB checked in by joaamaka, 13 years ago (diff)

Oma peli valmis. (Vielä silti ehkä jotain tekemistä jäljellä + Jypelin bugit(?))

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