source: 2014/23/MitjaL/Gravity/Gravity/Gravity/Gravity.cs @ 4897

Revision 4897, 9.9 KB checked in by anlakane, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Gravity : PhysicsGame
10{
11    const int painoVoima = 500;
12    const int suunta = 200;
13
14    PhysicsObject pelaaja;
15    //PhysicsObject liikkuvaseina;
16
17    Image piikinKuva = LoadImage("Piikki");
18    Image seinanKuva = LoadImage("seina");
19    Image maalinkuva = LoadImage("Maali");
20
21    int helppo = 110;
22    int normaali = 140;
23    int vaikea = 170;
24
25    int vaikeusTaso = 140;
26
27    bool pelikaynnissa = false;
28    //const double LIIKKUVANSEINAN_MIN_NOPEUS = 100;
29
30    DoubleMeter etenemisMittari = new DoubleMeter(0, 0, 100);
31
32    public override void Begin()
33    {
34        SmoothTextures = false;
35        AlkuValikko();
36    }
37    void AloitaPeli()
38    {
39        IsPaused = false;
40        ClearAll();
41        LuoKentta();
42        LisaaOhjaimet();
43        //IsFullScreen = true;
44
45        Label prosentteina = new Label();
46        prosentteina.Position = new Vector(Screen.Right - 50, Screen.Top - 50);
47        prosentteina.Color = new Color(255, 255, 255, 100);
48        prosentteina.TextColor = Color.Black;
49        Add(prosentteina);
50        prosentteina.IntFormatString = "Olet edennyt {0:D1} %";
51        prosentteina.BindTo(etenemisMittari);
52
53        Camera.Position = new Vector(pelaaja.X + 100, 0);
54
55        Level.Background.CreateGradient(Color.Black, Color.Purple);
56
57        Camera.Zoom(2.3);
58        //Camera.Follow(player);
59    }
60    void LisaaOhjaimet()
61    {
62        Keyboard.Listen(Key.Up, ButtonState.Pressed, VaihdaPainovoima, null, "y", painoVoima);
63        Keyboard.Listen(Key.Down, ButtonState.Pressed, VaihdaPainovoima, null, "y", -painoVoima);
64        Keyboard.Listen(Key.Escape, ButtonState.Pressed, PelinJatkovalikko, "Lopeta peli");
65    }
66    void PelinJatkovalikko()
67    {
68        pelikaynnissa = false;
69        Pause();
70        MultiSelectWindow alkuValikko = new MultiSelectWindow("Game Paused", "Play Again", "Change Difficulty", "Exit");
71        Level.Background.CreateGradient(Color.Black, Color.Purple);
72        alkuValikko.BorderColor = Color.Black;
73        alkuValikko.Color = Color.DarkGray;
74        alkuValikko.SetButtonColor(Color.Black);
75        alkuValikko.SetButtonTextColor(Color.Red);
76        Add(alkuValikko);
77        alkuValikko.AddItemHandler(0, AloitaPeli);
78        alkuValikko.AddItemHandler(1, VaikeustasoValikko);
79        alkuValikko.AddItemHandler(2, Exit);
80        alkuValikko.DefaultCancel = 0;
81    }
82    void VaihdaPainovoima(string suunta, int voima)
83    {
84        if (pelikaynnissa == false)
85        {
86            Camera.Velocity = new Vector(vaikeusTaso, 0);
87            pelikaynnissa = true;
88        }
89        if (suunta == "y")
90        {
91            Gravity = new Vector(0, voima);
92        }
93        else if (suunta == "x")
94        {
95            Gravity = new Vector(voima, 0);
96        }
97    }
98    void LuoKentta()
99    {
100        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
101        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Gravity");
102
103        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
104        ruudut.SetTileMethod(new Color(0, 127, 14), LuoSeina);
105        ruudut.SetTileMethod(Color.Red, LuoPiikkiYlos);
106        ruudut.SetTileMethod(Color.Black, LuoHahmo);
107        ruudut.SetTileMethod(new Color(0, 255, 255), LuoPiikkiOikea);
108        ruudut.SetTileMethod(new Color(0, 38, 255), LuoPiikkiVasen);
109        ruudut.SetTileMethod(new Color(178, 0, 255), LuoPiikkiAlas);
110        ruudut.SetTileMethod(Color.FromHexCode("FFD800"), LuoMaali);
111
112        //3. Execute luo kentän
113        //   Parametreina leveys ja korkeus
114        ruudut.Execute(20, 20);
115    }
116    void LuoHahmo(Vector paikka, double leveys, double korkeus)
117    {
118        pelaaja = new PhysicsObject(leveys, korkeus);
119        pelaaja.Shape = Shape.Circle;
120        pelaaja.Position = paikka;
121        pelaaja.Color = Color.Gray;
122        pelaaja.CollisionIgnoreGroup = 2;
123        pelaaja.Restitution = 0.1;
124
125
126        AddCollisionHandler(pelaaja, "maali", PaaseeMaaliin);
127
128        AddCollisionHandler(pelaaja, "piikki", TormaaPiikkiin);
129
130        Add(pelaaja);
131    }
132    void TormaaPiikkiin(PhysicsObject pelaaja, PhysicsObject piikki)
133    {
134        if (piikki != null) piikki.Destroy();
135        pelikaynnissa = false;
136        ClearAll();
137        HavioValikko();
138    }
139    void PaaseeMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
140    {
141        pelikaynnissa = false;
142        ClearAll();
143        Maalivalikko();
144    }
145    void Maalivalikko()
146    {
147        MultiSelectWindow Maalivalikko = new MultiSelectWindow("You Won!", "Restart", "Change Difficulty", "Exit");
148        Level.Background.CreateGradient(Color.Black, Color.Purple);
149        Maalivalikko.BorderColor = Color.Black;
150        Maalivalikko.Color = Color.DarkGray;
151        Maalivalikko.SetButtonColor(Color.Black);
152        Maalivalikko.SetButtonTextColor(Color.Red);
153
154        Add(Maalivalikko);
155        Maalivalikko.AddItemHandler(0, AloitaPeli);
156        Maalivalikko.AddItemHandler(1, VaikeustasoValikko);
157        Maalivalikko.AddItemHandler(2, Exit);
158        Maalivalikko.DefaultCancel = 1;
159    }
160    void AlkuValikko()
161    {
162        MultiSelectWindow alkuValikko = new MultiSelectWindow("Gravity", "Start Game", "Exit");
163        Level.Background.CreateGradient(Color.Black, Color.Purple);
164        alkuValikko.BorderColor = Color.Black;
165        alkuValikko.Color = Color.DarkGray;
166        alkuValikko.SetButtonColor(Color.Black);
167        alkuValikko.SetButtonTextColor(Color.Red);
168       
169        //TODO miksei toimi?
170        if (alkuValikko.SelectedButton != null) alkuValikko.SelectedButton.Color = Color.DarkGreen;
171       
172        Add(alkuValikko);
173        alkuValikko.AddItemHandler(0, VaikeustasoValikko);
174        alkuValikko.AddItemHandler(1, Exit);
175        alkuValikko.DefaultCancel = 1;
176    }
177    void HavioValikko()
178    {
179        MultiSelectWindow HavioValikko = new MultiSelectWindow("You Failed!", "Play Again", "Change Difficulty", "Exit");
180        Level.Background.CreateGradient(Color.Black, Color.Purple);
181        HavioValikko.BorderColor = Color.Black;
182        HavioValikko.Color = Color.DarkGray;
183        HavioValikko.SetButtonColor(Color.Black);
184        HavioValikko.SetButtonTextColor(Color.Red);
185        Add(HavioValikko);
186        HavioValikko.AddItemHandler(0, AloitaPeli);
187        HavioValikko.AddItemHandler(1, VaikeustasoValikko);
188        HavioValikko.AddItemHandler(2, Exit);
189        HavioValikko.DefaultCancel = 1;
190    }
191    void VaikeustasoValikko()
192    {
193        MultiSelectWindow VaikeustasoValikko = new MultiSelectWindow("Difficulty","Easy", "Normal", "Hard", "Back");
194        Level.Background.CreateGradient(Color.Black, Color.Purple);
195        VaikeustasoValikko.BorderColor = Color.Black;
196        VaikeustasoValikko.Color = Color.DarkGray;
197        VaikeustasoValikko.SetButtonColor(Color.Black);
198        VaikeustasoValikko.SetButtonTextColor(Color.Red);
199        Add(VaikeustasoValikko);
200        VaikeustasoValikko.AddItemHandler(0, LuoHelppo);
201        VaikeustasoValikko.AddItemHandler(1, LuoNormaali);
202        VaikeustasoValikko.AddItemHandler(2, LuoVaikea);
203        VaikeustasoValikko.AddItemHandler(3, AlkuValikko);
204        VaikeustasoValikko.DefaultCancel = 1;
205    }
206    void LuoHelppo()
207    {
208        vaikeusTaso = helppo;
209        AloitaPeli();
210    }
211    void LuoNormaali()
212    {
213        vaikeusTaso = normaali;
214        AloitaPeli();
215    }
216    void LuoVaikea()
217    {
218        vaikeusTaso = vaikea;
219        AloitaPeli();
220    }
221    void LuoSeina(Vector paikka, double leveys, double korkeus)
222    {
223        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
224        taso.Position = paikka;
225        taso.Color = Color.Green;
226        taso.Image = seinanKuva;
227        Add(taso);
228        taso.CollisionIgnoreGroup = 1;
229    }
230    void LuoPiikkiYlos(Vector paikka, double leveys, double korkeus)
231    {
232        LuoPiikki(paikka, leveys, korkeus, Angle.FromDegrees(0));
233    }
234    void LuoPiikkiVasen(Vector paikka, double leveys, double korkeus)
235    {
236        LuoPiikki(paikka, leveys, korkeus, Angle.FromDegrees(90));
237    }
238    void LuoPiikkiAlas(Vector paikka, double leveys, double korkeus)
239    {
240        LuoPiikki(paikka, leveys, korkeus, Angle.FromDegrees(180));
241    }
242    void LuoPiikkiOikea(Vector paikka, double leveys, double korkeus)
243    {
244        LuoPiikki(paikka, leveys, korkeus, Angle.FromDegrees(270));
245    }
246   
247    void LuoPiikki(Vector paikka, double leveys, double korkeus, Angle suunta)
248    {
249        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
250        piikki.Position = paikka;
251        piikki.Color = Color.Red;
252        piikki.Image = piikinKuva;
253        piikki.Angle = suunta;
254        piikki.RotateImage = true;
255        piikki.Tag = "piikki";
256        Add(piikki, 1);
257        piikki.CollisionIgnoreGroup = 1;
258    }
259
260    void LuoMaali(Vector paikka, double leveys, double korkeus)
261    {
262        PhysicsObject Maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
263        Maali.Position = paikka;
264        Maali.Color = Color.FromHexCode("FFD800");
265        Maali.Image = maalinkuva;
266        Add(Maali);
267        Maali.CollisionIgnoreGroup = 1;
268        Maali.Tag = "maali";
269    }
270
271    protected override void Update(Time time)
272    {
273        if (pelaaja != null && pelikaynnissa)
274        {
275            pelaaja.Velocity = new Vector(vaikeusTaso, pelaaja.Velocity.Y);
276            etenemisMittari.Value = (Math.Abs(pelaaja.X - Level.Left)) / Level.Width * 100;
277        }
278
279        if (pelaaja != null && pelikaynnissa)
280            if (pelaaja.Left < Camera.ScreenToWorld(new Vector(Screen.Left, 0)).X) TormaaPiikkiin(pelaaja, null);
281        base.Update(time);
282    }
283}
Note: See TracBrowser for help on using the repository browser.