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

Revision 4887, 6.6 KB checked in by jotapoti, 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
22
23    bool pelikaynnissa = false;
24    //const double LIIKKUVANSEINAN_MIN_NOPEUS = 100;
25
26    public override void Begin()
27    {
28        AlkuValikko();
29    }
30    void AloitaPeli()
31    {
32        IsPaused = false;
33        ClearAll();
34        LuoKentta();
35        LisaaOhjaimet();
36        //IsFullScreen = true;
37        Camera.Position = new Vector(pelaaja.X + 100, 0);
38
39        Level.Background.CreateGradient(Color.Black, Color.Purple);
40
41        Camera.Zoom(2.3);
42        //Camera.Follow(player);
43    }
44    void LisaaOhjaimet()
45    {
46        Keyboard.Listen(Key.Up, ButtonState.Pressed, VaihdaPainovoima, null, "y", painoVoima);
47        Keyboard.Listen(Key.Down, ButtonState.Pressed, VaihdaPainovoima, null, "y", -painoVoima);
48        Keyboard.Listen(Key.Escape, ButtonState.Pressed, PelinJatkovalikko, "Lopeta peli");
49    }
50    void PelinJatkovalikko()
51    {
52        pelikaynnissa = false;
53        Pause();
54        MultiSelectWindow alkuValikko = new MultiSelectWindow("Game Paused", "Resume", "Restart", "Lopeta");
55        Level.Background.CreateGradient(Color.Black, Color.Purple);
56        alkuValikko.BorderColor = Color.Black;
57        alkuValikko.Color = Color.DarkGray;
58        alkuValikko.SetButtonColor(Color.Black);
59        alkuValikko.SetButtonTextColor(Color.Red);
60        Add(alkuValikko);
61        alkuValikko.AddItemHandler(0, delegate { IsPaused = false; });
62        alkuValikko.AddItemHandler(1, AloitaPeli);
63        alkuValikko.AddItemHandler(2, Exit);
64        alkuValikko.DefaultCancel = 0;
65    }
66    void VaihdaPainovoima(string suunta, int voima)
67    {
68        if (pelikaynnissa == false)
69        {
70            Camera.Velocity = new Vector(150, 0);
71            pelikaynnissa = true;
72        }
73        if (suunta == "y")
74        {
75            Gravity = new Vector(0, voima);
76        }
77        else if (suunta == "x")
78        {
79            Gravity = new Vector(voima, 0);
80        }
81    }
82    void LuoKentta()
83    {
84        //1. Luetaan kuva uuteen ColorTileMappiin, kuvan nimen perässä ei .png-päätettä.
85        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Gravity");
86
87        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
88        ruudut.SetTileMethod(new Color(0, 127, 14), LuoSeina);
89        ruudut.SetTileMethod(Color.Red, LuoPiikkiYlos);
90        ruudut.SetTileMethod(Color.Black, LuoHahmo);
91        ruudut.SetTileMethod(new Color(0, 255, 255), LuoPiikkiOikea);
92        ruudut.SetTileMethod(new Color(0, 38, 255), LuoPiikkiVasen);
93        ruudut.SetTileMethod(new Color(178, 0, 255), LuoPiikkiAlas);
94        ruudut.SetTileMethod(new Color(76, 255, 0), LuoMaali);
95
96        //3. Execute luo kentän
97        //   Parametreina leveys ja korkeus
98        ruudut.Execute(20, 20);
99    }
100    void LuoHahmo(Vector paikka, double leveys, double korkeus)
101    {
102        pelaaja = new PhysicsObject(leveys, korkeus);
103        pelaaja.Shape = Shape.Circle;
104        pelaaja.Position = paikka;
105        pelaaja.Color = Color.Aqua;
106        pelaaja.CollisionIgnoreGroup = 2;
107        pelaaja.Restitution = 0.1;
108
109        AddCollisionHandler(pelaaja, "piikki", TormaaPiikkiin);
110
111        Add(pelaaja);
112    }
113    void TormaaPiikkiin(PhysicsObject pelaaja, PhysicsObject piikki)
114    {
115        if (piikki != null) piikki.Destroy();
116        pelikaynnissa = false;
117        ClearAll();
118        AlkuValikko();
119
120    }
121    void AlkuValikko()
122    {
123        MultiSelectWindow alkuValikko = new MultiSelectWindow("Gravity", "Aloita peli", "Lopeta");
124        Level.Background.CreateGradient(Color.Black, Color.Purple);
125        alkuValikko.BorderColor = Color.Black;
126        alkuValikko.Color = Color.DarkGray;
127        alkuValikko.SetButtonColor(Color.Black);
128        alkuValikko.SetButtonTextColor(Color.Red);
129       
130        //TODO miksei toimi?
131        if (alkuValikko.SelectedButton != null) alkuValikko.SelectedButton.Color = Color.DarkGreen;
132       
133        Add(alkuValikko);
134        alkuValikko.AddItemHandler(0, AloitaPeli);
135        alkuValikko.AddItemHandler(1, Exit);
136        alkuValikko.DefaultCancel = 1;
137    }
138    void LuoSeina(Vector paikka, double leveys, double korkeus)
139    {
140        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
141        taso.Position = paikka;
142        taso.Color = Color.Green;
143        taso.Image = seinanKuva;
144        Add(taso);
145        taso.CollisionIgnoreGroup = 1;
146    }
147    void LuoPiikkiYlos(Vector paikka, double leveys, double korkeus)
148    {
149        LuoPiikki(paikka, leveys, korkeus, Angle.FromDegrees(0));
150    }
151    void LuoPiikkiVasen(Vector paikka, double leveys, double korkeus)
152    {
153        LuoPiikki(paikka, leveys, korkeus, Angle.FromDegrees(90));
154    }
155    void LuoPiikkiAlas(Vector paikka, double leveys, double korkeus)
156    {
157        LuoPiikki(paikka, leveys, korkeus, Angle.FromDegrees(180));
158    }
159    void LuoPiikkiOikea(Vector paikka, double leveys, double korkeus)
160    {
161        LuoPiikki(paikka, leveys, korkeus, Angle.FromDegrees(270));
162    }
163   
164    void LuoPiikki(Vector paikka, double leveys, double korkeus, Angle suunta)
165    {
166        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
167        piikki.Position = paikka;
168        piikki.Color = Color.Red;
169        piikki.Image = piikinKuva;
170        piikki.Angle = suunta;
171        piikki.RotateImage = true;
172        piikki.Tag = "piikki";
173        Add(piikki, 1);
174        piikki.CollisionIgnoreGroup = 1;
175    }
176
177    void LuoMaali(Vector paikka, double leveys, double korkeus)
178    {
179        PhysicsObject Maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
180        Maali.Position = paikka;
181        Maali.Color = Color.Yellow;
182        Maali.Image = maalinkuva;
183        Add(Maali);
184        Maali.CollisionIgnoreGroup = 1;
185    }
186
187    protected override void Update(Time time)
188    {
189        if (pelaaja != null && pelikaynnissa) pelaaja.Velocity = new Vector(150, pelaaja.Velocity.Y);
190        if (pelaaja != null && pelikaynnissa)
191            if (pelaaja.Left < Camera.ScreenToWorld(new Vector(Screen.Left, 0)).X) TormaaPiikkiin(pelaaja, null);
192        base.Update(time);
193    }
194}
Note: See TracBrowser for help on using the repository browser.