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

Revision 607, 8.8 KB checked in by lavevake, 11 years ago (diff)

Tein Rise of darkness- peliin melkein virtamittarin.

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