source: 2016/koodauskerho/JereM/MurkkuPeli/MurkkuPeli/MurkkuPeli/MurkkuPeli.cs @ 9443

Revision 9443, 8.6 KB checked in by npo17_80, 21 months ago (diff)

Tehtiin toimiva animaatio.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class MurkkuPeli : PhysicsGame
10{
11    PhysicsObject isomurkku;
12    Image taustakuva = LoadImage("taustakuva");
13
14    Image OlionKuva = LoadImage("isomurkku");
15
16    Image OlionKuva2 = LoadImage("pienimurkku");
17
18    DoubleMeter elamalaskuri;
19
20    AssaultRifle ase;
21
22    Timer peliaikaLaskuri;
23
24    Image[] syontikuvat = LoadImages("isomurkku", "isomurkku2");
25
26
27    public override void Begin()
28    {
29        LuoAlkuvalikko();
30        MediaPlayer.Play("Cyborg Ninja");
31
32       
33
34
35    }
36
37   
38
39    void luoElamaLaskuri ()
40    {
41
42        elamalaskuri = new DoubleMeter(10);
43        elamalaskuri.MaxValue = 20;
44        elamalaskuri.LowerLimit += ElamaLoppui;
45
46        ProgressBar elamaPalkki = new ProgressBar(150, 20);
47        elamaPalkki.X = Screen.Left + 150;
48        elamaPalkki.Y = Screen.Top - 50;
49        elamaPalkki.BindTo(elamalaskuri);
50        Add(elamaPalkki);
51
52       
53
54
55    }
56
57    void ElamaLoppui()
58    {
59    MessageDisplay. Add("Kuolit");
60        peliaikaLaskuri.Stop();
61        isomurkku.Destroy();
62
63        LuoLopetusValikko();
64       
65
66
67
68    }
69    void LuoAlkuvalikko()
70    {
71        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
72"Aloita peli", "Lopeta");
73
74        alkuValikko.AddItemHandler(0, AloitaPeli);
75        alkuValikko.AddItemHandler(1, Exit);
76
77        Add(alkuValikko);
78
79       
80
81 
82   
83    }
84
85    void AloitaPeli()
86    {
87
88        ClearAll();
89        Level.Width = 1500;
90        Level.Height = 1500;
91
92        LuoAikaLaskuri();
93
94        Level.Background.Image = taustakuva;
95        Level.Background.FitToLevel();
96
97        Camera.StayInLevel = true;
98        isomurkku = new PhysicsObject(100.0, 100.0);
99        Add(isomurkku);
100        isomurkku.CanRotate = false;
101        isomurkku.Image = OlionKuva;
102        isomurkku.Animation = new Animation(OlionKuva);
103        isomurkku.Animation.Start();
104        isomurkku.LinearDamping = 0.95;
105        AddCollisionHandler(isomurkku, "marja", SyoMarja);
106        AddCollisionHandler(isomurkku, "pienimurkku", TormaaMurkkuun);
107        isomurkku.Image = OlionKuva;
108        PienetMurkut();
109
110
111
112        ase = new AssaultRifle(30, 10);
113
114        ase.IsVisible = false;
115
116        ase.ProjectileCollision = AmmusOsui;
117
118        isomurkku.Add(ase);
119
120
121        Marjat();
122       
123
124        Mouse.ListenMovement(0.1, Tahtaa, "tähtää");
125
126
127        IsMouseVisible = true;
128
129        Camera.Follow(isomurkku);
130
131        Camera.Zoom(2.0);
132        // TODO: Kirjoita ohjelmakoodisi tähän
133
134        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
135
136        //Level.CreateBorders();
137        PhysicsObject ylareuna = Level.CreateTopBorder(0.0, false);
138
139        PhysicsObject alareuna = Level.CreateBottomBorder(0.0, false);
140
141        PhysicsObject oikeareuna = Level.CreateRightBorder(0.0, false);
142
143        PhysicsObject vasenreuna = Level.CreateLeftBorder(0.0, false);
144
145
146        luoElamaLaskuri();
147        LuoAikaLaskuri2();
148
149
150        Keyboard.Listen(Key.A, ButtonState.Down,
151          LiikutaPelaajaa, null, new Vector(-500, 0));
152        Keyboard.Listen(Key.D, ButtonState.Down,
153          LiikutaPelaajaa, null, new Vector(500, 0));
154        Keyboard.Listen(Key.W, ButtonState.Down,
155          LiikutaPelaajaa, null, new Vector(0, 500));
156        Keyboard.Listen(Key.S, ButtonState.Down,
157          LiikutaPelaajaa, null, new Vector(0, -500));
158
159        LisaaSyontinappaimet();
160    }
161   
162    void LisaaSyontinappaimet()
163    {
164        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", ase, true);
165        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", ase, false);
166    }
167
168    void Tahtaa(AnalogState hiirenLiike)
169    {
170        Vector suunta = Mouse.PositionOnWorld - isomurkku.Position;
171        isomurkku.Angle = suunta.Angle;
172    }
173    void PienetMurkut()
174    {
175        PieniMurkku(Level.Left, Level.Top);
176        PieniMurkku(Level.Right, Level.Top);
177        PieniMurkku(Level.Right, Level.Bottom);
178        PieniMurkku(Level.Left, Level.Bottom);
179
180       
181
182    }
183
184    void PieniMurkku(double x, double y)
185    {
186        PhysicsObject pienimurkku = new PhysicsObject(50.0, 50.0);
187        Add(pienimurkku);
188        pienimurkku.Image = OlionKuva;
189
190        pienimurkku.X = x;
191        pienimurkku.Y = y;
192        pienimurkku.Tag =  "pienimurkku";
193
194        pienimurkku.Image = OlionKuva2;
195
196        FollowerBrain seuraajanAivot = new FollowerBrain(isomurkku);
197
198        seuraajanAivot.Speed = 150;                 // Millä nopeudella kohdetta seurataan
199        seuraajanAivot.DistanceFar = 6000;           // Etäisyys jolla aletaan seurata kohdetta
200        seuraajanAivot.DistanceClose = 100;         // Etäisyys jolloin ollaan lähellä kohdetta
201        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
202        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
203
204        pienimurkku.Brain = seuraajanAivot;
205    }
206
207
208    void LiikutaPelaajaa(Vector vektori)
209    {
210        isomurkku.Push(vektori);
211
212
213    }
214
215
216
217
218    void AsetaOhjaimet()
219    {
220
221    }
222
223    void FollowerBrain()
224    {
225
226       
227    }
228
229    void Marjat()
230    {
231        for (int i = 0; i < 20; i++)
232        {
233
234            Marja();
235           
236        }
237
238    }
239
240    void Marja()
241    {
242        PhysicsObject pallo = new PhysicsObject(15.0, 15.0);
243        Add(pallo);
244        pallo.Color = Color.Red;
245        pallo.Shape = Shape.Circle;
246        pallo.Tag = "marja";
247        pallo.X = RandomGen.NextDouble(Level.Left, Level.Right);
248        pallo.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
249
250       
251    }
252    void Törmäys()
253    {
254
255    }
256
257    void SyoMarja(PhysicsObject tormaaja, PhysicsObject kohde)
258    {
259        kohde.Destroy();
260        MessageDisplay.Add("Sait elämän!");
261
262        elamalaskuri.Value += 10;
263
264        Marja();
265
266    }
267   
268    void TormaaMurkkuun(PhysicsObject tormaaja, PhysicsObject isomurkku)
269    {
270        MessageDisplay.Add("Sinuun osui!");
271        elamalaskuri.Value -= 2;
272    }
273   
274    void LuoLopetusValikko()
275    {
276        MultiSelectWindow LopetusValikko = new MultiSelectWindow("Pelin Lopetusvalikko",
277"Yritä uudelleen", "Lopeta");
278        Add(LopetusValikko);
279
280        LopetusValikko.AddItemHandler(0, AloitaPeli);
281
282        LopetusValikko.AddItemHandler(1, Exit);
283
284    }
285    void YritaUudelleen()
286    {
287
288    }
289
290    void LuoAikaLaskuri()
291    {
292        Timer aikaLaskuri = new Timer();
293        aikaLaskuri.Interval = 2.5;
294        aikaLaskuri.Timeout += UusiVihollinen;
295        aikaLaskuri.Start();
296
297       
298    }
299
300    void UusiVihollinen()
301    {
302       
303
304        PieniMurkku(Level.Left, Level.Top);
305        PieniMurkku(Level.Right, Level.Top);
306        PieniMurkku(Level.Right, Level.Bottom);
307        PieniMurkku(Level.Left, Level.Bottom);
308       
309    }
310
311    void AmmusOsui(PhysicsObject ammus, PhysicsObject pienimurkku)
312    {
313        pienimurkku.Destroy();
314        ammus.Destroy();
315    }
316
317    void AmmuAseella(AssaultRifle ase, bool ammuttiinkoSpaceNappaimella)
318    {
319        PhysicsObject ammus = ase.Shoot();
320
321       
322
323
324        if (ammus != null)
325        {
326            isomurkku.Animation = new Animation(syontikuvat);
327            isomurkku.Animation.Start();
328            if (ammuttiinkoSpaceNappaimella)
329            {
330                Keyboard.Listen(Key.Space, ButtonState.Released, delegate { isomurkku.Animation.Stop(); }, null);
331                Mouse.Disable(MouseButton.Left);
332                LisaaSyontinappaimet();
333            }
334            else
335            {
336                Mouse.Listen(MouseButton.Left, ButtonState.Released, delegate { isomurkku.Animation.Stop(); }, null);
337                Keyboard.Disable(Key.Space);
338                LisaaSyontinappaimet();
339            }
340            ammus.MaximumLifetime = TimeSpan.FromSeconds(0.05);
341            ammus.IsVisible = false;
342            ase.AttackSound.Stop();
343        }
344    }
345
346
347    void LuoAikaLaskuri2()
348    {
349        peliaikaLaskuri = new Timer();
350        peliaikaLaskuri.Start();
351
352        Label aikaNaytto = new Label();
353        aikaNaytto.TextColor = Color.White;
354        aikaNaytto.DecimalPlaces = 1;
355        aikaNaytto.BindTo(peliaikaLaskuri.SecondCounter);
356        aikaNaytto.X = Screen.Left+50;
357        aikaNaytto.Y = Screen.Top - 100;
358        Add(aikaNaytto);
359    }
360
361
362
363
364
365
366}
367
368
Note: See TracBrowser for help on using the repository browser.