source: 2010/23/lavevake/Rise of darkness/Peli.cs @ 643

Revision 643, 9.2 KB checked in by lavevake, 12 years ago (diff)

Tein Rise of darknessia eteenpäin energialaskuriin.

Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6
7namespace Rise_of_darkness
8{
9    class Tasohyppely : PhysicsGame
10    {
11        const double nopeus = 200;
12        const double hyppyVoima = 4000;
13
14        IntMeter pisteLaskuri;
15        ValueDisplay pisteNaytto;
16        Timer laskuri;
17
18
19        const double virtaMaara = 5000;
20
21        DoubleMeter virtaLaskuri;
22        ValueDisplay virtaNaytto;
23        BarGauge virtaNayttoBar;
24
25        PlatformCharacter pelaaja1;
26        PlatformCharacter hirviö;
27        PhysicsObject aurinko;
28        int kenttaNro; // monesko kenttä on menossa
29
30
31        protected override void Begin()
32        {
33            kenttaNro = 0;
34            Level.Width = 2000;
35            Level.Height = 1000;
36
37            // Luodaan pistelaskuri
38            pisteLaskuri = new IntMeter(0);
39
40           
41
42           
43
44
45            // luodaan pistelaskunäyttö
46            pisteNaytto = new ValueDisplay();
47            pisteNaytto.Text = "Pisteitä: ";
48            pisteNaytto.X = Screen.RightSafe - 250;
49            pisteNaytto.Y = Screen.TopSafe - 50;
50            pisteNaytto.BindTo(pisteLaskuri);
51            Add(pisteNaytto);    // lisätään peliin
52
53            // Zoomataan lähemmäksi
54            Camera.ZoomFactor = 2.0;
55
56            Camera.StayInLevel = true;
57
58            seuraavaKentta();
59            MessageDisplay.Add("Pääse koneelle ennen kuin energia loppuu!");
60        }
61
62        void vahennaVirtaa(Timer t)
63        {
64            virtaLaskuri.Value -= 100;
65        }
66
67        void seuraavaKentta()
68        {
69            ClearAll();
70            pisteLaskuri.Reset();
71           
72
73            kenttaNro += 1; // lisätään kenttänumeroa yhdellä
74            MessageDisplay.Add("Kenttä " + kenttaNro);
75
76            // Asetetaan painovoima
77            Gravity = new Vector(0, -1000);
78
79            luoKentta();
80            lisaaNappaimet();
81            Camera.Follow(pelaaja1);
82            LuoNaytot();
83            laskuri = new Timer();
84            laskuri.Interval = 0.1;
85            laskuri.Trigger += vahennaVirtaa;
86            Add(laskuri);
87            laskuri.Start();
88        }
89
90        void luoKentta()
91        {
92            Level.CreateBorders();
93            Level.Background.CreateGradient(Color.Black, Color.SkyBlue);
94
95            lisaaTaso(-200, -350);
96            lisaaTaso(0, -200);
97            lisaaTaso(100, -100);
98
99            lisaaMaali();
100            lisaaPelaajat();
101        }
102
103        void lisaaTaso(double x, double y)
104        {
105            PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30);
106            taso.Color = Color.Green;
107            taso.X = x;
108            taso.Y = y;
109            Add(taso);
110        }
111
112        void lisaaPelaajat()
113        {
114            pelaaja1 = new PlatformCharacter(40, 40);
115            pelaaja1.Mass = 4.0;
116            pelaaja1.Image = LoadImage("Ukko 2");
117            pelaaja1.X = 0;
118            pelaaja1.Y = Level.Bottom;
119
120            hirviö = new PlatformCharacter(80, 80);
121            hirviö.Mass = 4.0;
122            hirviö.Image = LoadImage("hirviö");
123            hirviö.X = 100;
124            hirviö.Y = -120;
125
126            aurinko = new PhysicsObject(40, 40);
127            aurinko.Mass = 4.0;
128            aurinko.Image = LoadImage("aurinko");
129            aurinko.X = int luku.RandomGen.NextInt(-300,300) ;
130            aurinko.Y = -150;
131
132            AddCollisionHandler(pelaaja1, osuiMaaliin);
133
134            AddCollisionHandler(pelaaja1, KasitteleTormays);
135
136            Add(pelaaja1);
137            Add(hirviö);
138            Add(aurinko);
139        }
140
141        void lisaaMaali()
142        {
143            PhysicsObject maali = PhysicsObject.CreateStaticObject(50, 50, Shapes.Circle);
144            maali.Tag = "maali";
145            maali.IgnoresCollisionResponse = true;
146            maali.X = 100;
147            maali.Y = -60;
148            maali.Image = LoadImage("Kone 2");
149            Add(maali);
150        }
151
152        void lisaaNappaimet()
153        {
154            Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
155            Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
156
157            Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
158            Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
159            Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
160
161            lisaaGamePadNappaimet(ControllerOne);
162        }
163
164        void lisaaGamePadNappaimet(GamePad controller)
165        {
166            controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
167
168            controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
169            controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
170            controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyVoima);
171        }
172
173        void liikuta(PlatformCharacter hahmo, double nopeus)
174        {
175            hahmo.Walk(nopeus);
176        }
177
178        void hyppaa(PlatformCharacter hahmo, double voima)
179        {
180            hahmo.Jump(voima);
181        }
182
183        void osuiMaaliin(PhysicsObject collidingObject, PhysicsObject otherObject)
184        {
185            if (otherObject.Tag.ToString() == "maali")
186            {
187                this.PlaySound("maali");
188                int edellisenKentanPisteet = pisteLaskuri.Value;
189                seuraavaKentta();
190                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
191            }
192        }
193
194        void lopetaPeli(Timer sender)
195        {
196            Exit();
197        }
198
199        void KasitteleTormays(PhysicsObject pelaaja1, PhysicsObject toinen)
200        {
201            if (toinen == hirviö)
202            {
203                TextDisplay loppu = new TextDisplay();
204                loppu.Position = Screen.Center;
205                loppu.TextColor = Color.Red;
206                Add(loppu);
207                loppu.Text = "Kuolit.Peli loppu";
208
209                Timer lopetus = new Timer();
210                lopetus.Interval = 2;
211                lopetus.Trigger += new Timer.TriggerHandler(lopetaPeli);
212                Add(lopetus);
213                lopetus.Enabled = true;
214
215            }
216            else if (toinen == aurinko)
217            {
218                virtaLaskuri.Value += 1000;
219                MessageDisplay.Add("Sait lisää energiaa.");
220                aurinko.Destroy();
221            }
222        }
223       
224        void LuoNaytot()
225        {
226            // viestinäytön väri valkoiseksi, jotta näkyy
227            MessageDisplay.TextColor = Color.White;
228
229            // polttoainelaskuri ja näytöt
230            virtaLaskuri = new DoubleMeter(virtaMaara);
231            virtaLaskuri.MaxValue = virtaMaara;
232            virtaLaskuri.LowerAlertValue = 750;
233            virtaLaskuri.DefaultValue = virtaMaara;
234            virtaLaskuri.LowerAlertValue = 1500;
235            virtaLaskuri.LowerAlert += virtaUhkaaLoppua;
236            virtaLaskuri.LowerLimit += virtaLoppui;
237
238            virtaNayttoBar = new BarGauge();
239            virtaNayttoBar.HorizontalOrigin = HorizontalAlignment.Left;
240            virtaNayttoBar.VerticalOrigin = VerticalAlignment.Top;
241            virtaNayttoBar.ValueColor = Color.Green;
242            virtaNayttoBar.Max = virtaMaara;
243            virtaNayttoBar.X = Screen.RightSafe -20 ;
244            virtaNayttoBar.Y = Screen.TopSafe -20 ;
245            virtaNayttoBar.Width = 30;
246            virtaNayttoBar.Height = 200;
247            virtaNayttoBar.BindTo(virtaLaskuri);
248            Add(virtaNayttoBar);
249
250            virtaNaytto = new ValueDisplay();
251            virtaNaytto.HorizontalOrigin = HorizontalAlignment.Left;
252            virtaNaytto.VerticalOrigin = VerticalAlignment.Top;
253            virtaNaytto.TextColor = Color.Wheat;
254            virtaNaytto.ValueColor = Color.Wheat;
255            virtaNaytto.X = Screen.RightSafe - 330;
256            virtaNaytto.Y = Screen.TopSafe;
257            virtaNaytto.BindTo(virtaLaskuri);
258            virtaNaytto.Text = "Virtaa jäljellä: ";
259            Add(virtaNaytto);
260        }
261       
262        void virtaUhkaaLoppua(double maara)
263        {
264            virtaNaytto.ValueColor = Color.Red;
265            virtaNayttoBar.ValueColor = Color.Red;
266            MessageDisplay.Add("Varoitus: virta alkaa olla vähissä!");
267        }
268       
269        void virtaLoppui(double polttoAineMaara)
270        {
271            MessageDisplay.Add("Virta loppui!");
272            TextDisplay loppu = new TextDisplay();
273            loppu.Position = Screen.Center;
274            loppu.TextColor = Color.Red;
275            Add(loppu);
276            loppu.Text = "Epäonnistuit tehtävässäsi. Tohtori X:n suunnitelma on toteutunut ja maailma on peittynyt pimeyteen. Peli loppu";
277
278            Timer lopetus = new Timer();
279            lopetus.Interval = 2;
280            lopetus.Trigger += new Timer.TriggerHandler(lopetaPeli);
281            Add(lopetus);
282            lopetus.Enabled = true;
283        }
284    }
285}
Note: See TracBrowser for help on using the repository browser.