source: 2016/27/TaneliL/viikko27peli/viikko27peli/viikko27peli/viikko27peli.cs @ 8000

Revision 8000, 14.2 KB checked in by TaLiimat, 3 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 viikko27peli : PhysicsGame
10{
11
12    private Animation pelaajanKavely;
13    private Animation pelaajanHyppy;
14    private Animation pelaajanOdottelu;
15    private Animation pelajaanPutoaminen;
16    private Animation pelaajanKiipeily;
17
18    Image tikkaatKuva = LoadImage("Tikkaat");
19    Image palloKuva = LoadImage("jalkapallo");
20    Image AJpaa = LoadImage("AJ");
21    Image JouniPaa = LoadImage("Jouni");
22    Image mlgPalloKuva = LoadImage("mlgpallo");
23    Image paksuPalikkaKuva = LoadImage("Paksupalikka");
24    Image ohutPalikkaKuva = LoadImage("Ohutpalikka");
25    Image aarteenKuva = LoadImage("Aarrearkku");
26    Image oviKuva = LoadImage("Ovi");
27
28    PlatformCharacter pelaaja;
29
30    GameObject kiipeilija;
31
32    Timer pommiAjastin;
33
34    IntMeter pisteet;
35    int kenttaNro = 1;
36
37    public override void Begin()
38    {
39        pelaajanKavely = LoadAnimation("kavely");
40        pelaajanHyppy = LoadAnimation("hyppy");
41        pelaajanOdottelu = LoadAnimation("odottelu");
42        pelajaanPutoaminen = LoadAnimation("putoaminen");
43        pelaajanKiipeily = LoadAnimation("kiipeily");
44
45        Window.Width = 1280;
46        Window.Height = 720;
47
48        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Parhaat pisteet", "Kuinka Pelata", "Lopeta");
49        alkuValikko.AddItemHandler(0, seuraavaTaso);
50        //alkuValikko.AddItemHandler(1, ParhaatPisteet);
51        alkuValikko.AddItemHandler(2, kuinkaPelata);
52        alkuValikko.AddItemHandler(3, Exit);
53        Add(alkuValikko);
54
55
56        //seuraavaTaso();
57
58        //luoMaailma();
59        //nappaimet();
60    }
61
62    void seuraavaTaso()
63    {
64        ClearAll();
65
66        if (kenttaNro == 1) luoMaailma("Kentta1");
67        else if (kenttaNro == 2) luoMaailma("Kentta2");
68        //else if (kenttaNro == 3) LuoKentta("kentta3");
69        //else if (kenttaNro > 3) Exit();
70
71        nappaimet();
72
73    }
74
75    void nappaimet()
76    {
77        Keyboard.Listen(Key.W, ButtonState.Pressed, pelaajaHyppaa, null, 700.0);
78        Keyboard.Listen(Key.A, ButtonState.Down, liikutaPelaajaa, null, -200.0);
79        Keyboard.Listen(Key.D, ButtonState.Down, liikutaPelaajaa, null, 200.0);
80        Keyboard.Listen(Key.E, ButtonState.Pressed, kiipea, null);
81        Keyboard.Listen(Key.T, ButtonState.Pressed, luoKonsoli, "");
82        //Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
83        Keyboard.Listen(Key.Space, ButtonState.Pressed, ammuAseella, "Ammu", pelaaja);
84
85        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
86        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
87    }
88
89    void luoMaailma(string kenttaTiedostonNimi)
90    {
91        ColorTileMap kentta = ColorTileMap.FromLevelAsset(kenttaTiedostonNimi);
92        kentta.SetTileMethod(Color.YellowGreen, luoPelaaja);
93        kentta.SetTileMethod(Color.Red, luoPiikki);
94        kentta.SetTileMethod(Color.Gold, luoKerailyEsine);
95        kentta.SetTileMethod(Color.DarkGray, luoOhutPalikka);
96        kentta.SetTileMethod(Color.Black, luoPaksuPalikka);
97        kentta.SetTileMethod(Color.Blue, luoTikkaat);
98        kentta.SetTileMethod(Color.White, luoMaali);
99        kentta.Execute(60, 60);
100
101        Gravity = new Vector(0.0, -800.0);
102
103        Camera.Follow(pelaaja);
104        Camera.Zoom(1.25);
105
106        luoPisteet();
107    }
108
109    void kuinkaPelata()
110    {
111        MultiSelectWindow howTo = new MultiSelectWindow("Kuinka Pelata", "ok");
112        Add(howTo);
113        Label tekstiKentta1 = new Label("Liiku käyttämällä WASD, Avaakonsoli painamalla T");
114        howTo.Add(tekstiKentta1);
115        tekstiKentta1.Y = 50.0;
116        Label tekstiKentta2 = new Label("Kaytä komentoa \"jouni\" luodaksesi peliä edistävän palikan");
117        howTo.Add(tekstiKentta2);
118        tekstiKentta1.Y = 25.0;
119        howTo.AddItemHandler(0, Begin);
120    }
121
122    void luoPelaaja(Vector paikka, double leveys, double korkeus)
123    {
124
125        pelaaja = new PlatformCharacter(40, 70);
126        pelaaja.Position = paikka;
127        pelaaja.Color = Color.YellowGreen;
128        pelaaja.Restitution = 1;
129        pelaaja.Tag = "pelaaja";
130        pelaaja.CanRotate = false;
131        pelaaja.AnimWalk = new Animation(pelaajanKavely);
132        pelaaja.AnimWalk.FPS = 25;
133        pelaaja.AnimJump = new Animation(pelaajanHyppy);
134        pelaaja.AnimJump.FPS = 37;
135        pelaaja.AnimIdle = new Animation(pelaajanOdottelu);
136        pelaaja.LoopJumpAnim = true;
137        pelaaja.AnimFall = new Animation(pelajaanPutoaminen);
138        pelaaja.LoopFallAnim = true;
139        AddCollisionHandler(pelaaja, pelaajaTormaa);
140        Add(pelaaja);
141    }
142
143    void luoPaksuPalikka(Vector paikka, double leveys, double korkeus)
144    {
145        PhysicsObject paksuPalikka = PhysicsObject.CreateStaticObject(60, 60);
146        paksuPalikka.Position = paikka;
147        paksuPalikka.Tag = "paksu";
148        paksuPalikka.Image = paksuPalikkaKuva;
149        paksuPalikka.Color = Color.Black;
150        Add(paksuPalikka);
151    }
152
153    void luoOhutPalikka(Vector paikka, double leveys, double korkeus)
154    {
155        PhysicsObject ohutPalikka = PhysicsObject.CreateStaticObject(60, 10);
156        ohutPalikka.Position = paikka;
157        ohutPalikka.Tag = "ohut";
158        ohutPalikka.Color = Color.DarkGray;
159        ohutPalikka.Image = ohutPalikkaKuva;
160        Add(ohutPalikka);
161    }
162
163    void luoPiikki(Vector paikka, double leveys, double korkeus)
164    {
165        PhysicsObject piikit = PhysicsObject.CreateStaticObject(60, 60);
166        piikit.Position = paikka + new Vector(0, 2);
167        piikit.Tag = "piikki";
168        piikit.Color = Color.Red;
169        Add(piikit);
170    }
171    void luoKerailyEsine(Vector paikka, double leveys, double korkeus)
172    {
173        PhysicsObject kerailyEsine = PhysicsObject.CreateStaticObject(60, 60);
174        kerailyEsine.Position = paikka;
175        kerailyEsine.Tag = "aarre";
176        kerailyEsine.Color = Color.Gold;
177        kerailyEsine.Image = aarteenKuva;
178        Add(kerailyEsine);
179    }
180
181    void luoMaali(Vector paikka, double leveys, double korkeus)
182    {
183        PhysicsObject maali = PhysicsObject.CreateStaticObject(55, 80);
184        maali.Tag = "maali";
185        maali.Position = paikka + new Vector(0, 10);
186        maali.Color = Color.White;
187        maali.Image = oviKuva;
188        Add(maali);
189
190    }
191
192    void luoTikkaat(Vector paikka, double leveys, double korkeus)
193    {
194        PhysicsObject tikkaat = PhysicsObject.CreateStaticObject(60, 4 * 60);
195        tikkaat.IgnoresCollisionResponse = true;
196        tikkaat.Position = paikka;
197        tikkaat.Bottom = paikka.Y - korkeus / 2;
198        tikkaat.Tag = "tikas";
199        tikkaat.Color = Color.Blue;
200        tikkaat.Image = tikkaatKuva;
201        Add(tikkaat, -1);
202    }
203
204    void liikutaPelaajaa(double suunta)
205    {
206        pelaaja.Walk(suunta);
207    }
208    void pelaajaHyppaa(double nopeus)
209    {
210        pelaaja.Jump(nopeus);
211    }
212
213    void kiipea()
214    {
215        List<GameObject> tikkaat = GetObjectsWithTag("tikas");
216        bool voiKiiveta = false;
217
218        foreach (var tikas in tikkaat)
219        {
220            if (Vector.Distance(pelaaja.Position, new Vector(tikas.X, tikas.Bottom + 30)) < 30)
221            {
222                voiKiiveta = true;
223                break;
224            }
225        }
226
227        if (!voiKiiveta)
228            return;
229        if (kiipeilija != null)
230            return;
231
232        kiipeilija = new GameObject(pelaaja.Width, pelaaja.Height);
233        kiipeilija.Color = pelaaja.Color;
234        kiipeilija.Animation = new Animation(pelaajanKiipeily);
235        kiipeilija.Animation.FPS = 5;
236        kiipeilija.Position = pelaaja.Position;
237        Add(kiipeilija, 1);
238
239        Camera.Follow(kiipeilija);
240
241        pelaaja.IsVisible = false;
242
243        kiipeilija.MoveTo(pelaaja.Position + new Vector(0, 4 * 60), 300, delegate
244          {
245              pelaaja.Position = kiipeilija.Position;
246              pelaaja.IsVisible = true;
247              kiipeilija.Destroy();
248              kiipeilija = null;
249              Camera.Follow(pelaaja);
250          });
251    }
252
253    void luoPisteet()
254    {
255        pisteet = new IntMeter(0);
256
257        Label pisteNaytto = new Label();
258        pisteNaytto.X = Screen.Left + 100;
259        pisteNaytto.Y = Screen.Top - 100;
260        pisteNaytto.TextColor = Color.Black;
261        pisteNaytto.Color = Color.White;
262        pisteNaytto.BindTo(pisteet);
263        Add(pisteNaytto);
264    }
265
266    void ammuAseella(PlatformCharacter pelaaja)
267    {
268        if (pelaaja.Weapon == null)
269        {
270            return;
271        }
272        PhysicsObject ammus = pelaaja.Weapon.Shoot();
273
274        if (ammus != null)
275        {
276
277        }
278    }
279
280    void ammusOsui(PhysicsObject ammus, PhysicsObject kohde)
281    {
282        ammus.Destroy();
283
284        if (kohde.Tag == "ohut")
285        {
286            kohde.Destroy();
287        }
288    }
289
290    void pelaajaTormaa(PhysicsObject pelaaja, PhysicsObject kohde)
291    {
292        if (kohde.Tag == "piikki")
293        {
294            pelaaja.Destroy();
295            seuraavaTaso();
296
297        }
298
299        if (kohde.Tag == "aarre")
300        {
301            kohde.Destroy();
302            pisteet.Value += 10;
303        }
304
305        if (kohde.Tag == "maali")
306        {
307            kenttaNro++;
308            seuraavaTaso();
309        }
310
311        if (kohde.Tag == "mlg")
312        {
313            Explosion mlgRajahdys = new Explosion(100);
314            mlgRajahdys.Position = kohde.Position;
315            mlgRajahdys.UseShockWave = true;
316            Add(mlgRajahdys, 1);
317
318        }
319        if (kohde.Tag == "aj")
320        {
321            pelaajaPomppaa();
322        }
323
324    }
325
326    void pelaajaPomppaa()
327    {
328        Vector pomppu = new Vector(0, 1000);
329        pelaaja.Hit(pomppu);
330    }
331
332    void luoKonsoli()
333    {
334        InputWindow konsoli = new InputWindow("Konsoli");
335        konsoli.TextEntered += ProcessInput;
336        Add(konsoli);
337    }
338
339    void ProcessInput(InputWindow ikkuna)
340    {
341        string vastaus = ikkuna.InputBox.Text;
342        // tehdään jotain vastauksella
343        if (vastaus == "pallo")
344        {
345            luoPallo();
346        }
347
348        if (vastaus == "ase")
349        {
350            luoAse();
351        }
352
353        if (vastaus == "pommi")
354        {
355            luoPommi();
356        }
357
358        if (vastaus == "mlgpallo")
359        {
360            luoMlgPallo();
361        }
362
363        if (vastaus == "megahyppy")
364        {
365            megaHyppy();
366        }
367
368        if (vastaus == "aj")
369        {
370            luoAj();
371        }
372
373        if (vastaus == "jouni")
374        {
375            luoJouni();
376        }
377
378        if (vastaus == "commands show profiles keys = clear")
379        {
380            lisaaOhjeet();
381        }
382
383        if (vastaus == "restart")
384        {
385            seuraavaTaso();
386        }
387
388        if (vastaus == "painovoima-")
389        {
390            Gravity = new Vector(0, 600);
391        }
392
393        if (vastaus == "painovoima+")
394        {
395            Gravity = new Vector(0, -800);
396        }
397        if (vastaus == "pause")
398        {
399            Pause();
400            if (IsPaused) Keyboard.Disable(Key.W);
401            else Keyboard.Enable(Key.W);
402        }
403
404        if (vastaus == "01010011 01101001 01101101 01101111")
405        {
406            salainenKonsoli();
407        }
408    }
409
410    void luoPallo()
411    {
412        PhysicsObject pallo = new PhysicsObject(20, 20);
413        pallo.Shape = Shape.Circle;
414        pallo.Position = pelaaja.Position;
415        pallo.Mass = 1;
416        pallo.Restitution = 1;
417        pallo.Image = palloKuva;
418        Add(pallo);
419    }
420
421    void luoMlgPallo()
422    {
423        PhysicsObject mlgPallo = new PhysicsObject(70, 70);
424        mlgPallo.Shape = Shape.Circle;
425        mlgPallo.Position = pelaaja.Position + new Vector(70, 0);
426        mlgPallo.Tag = "mlg";
427        mlgPallo.Image = mlgPalloKuva;
428        mlgPallo.IgnoresExplosions = true;
429        Add(mlgPallo);
430    }
431
432    void luoAse()
433    {
434        pelaaja.Weapon = new AssaultRifle(10, 10);
435        pelaaja.Weapon.ProjectileCollision = ammusOsui;
436    }
437
438    void luoPommi()
439    {
440        PhysicsObject pommi = new PhysicsObject(20, 20);
441        pommi.Shape = Shape.Circle;
442        pommi.Position = pelaaja.Position;
443        Vector impulssi = new Vector(500.0, 0.0);
444        pommi.Hit(impulssi);
445        Add(pommi);
446    }
447
448    void megaHyppy()
449    {
450        Vector megaHyppy = new Vector(0, 2000);
451        pelaaja.Hit(megaHyppy);
452    }
453
454    void luoAj()
455    {
456        PhysicsObject aj = new PhysicsObject(40, 40);
457        aj.Image = AJpaa;
458        aj.Tag = "aj";
459        aj.Restitution = 2.5;
460        aj.Position = pelaaja.Position + new Vector(50, 0);
461        Add(aj);
462    }
463
464    void luoJouni()
465    {
466        PhysicsObject jouni = new PhysicsObject(40, 40);
467        jouni.Position = pelaaja.Position + new Vector(20, 0);
468        jouni.Image = JouniPaa;
469        Add(jouni);
470    }
471
472    void lisaaOhjeet()
473    {
474        Widget ruutu = new Widget(700, 400);
475
476        Label tekstiKentta1 = new Label("ase, pallo, mlgpallo, pommi, aj, jouni, restart, painovoima");
477        ruutu.Add(tekstiKentta1);
478        tekstiKentta1.Y = 50.0;
479        Timer.SingleShot(6, ruutu.Destroy);
480        Add(ruutu);
481    }
482
483    void salainenKonsoli()
484    {
485        InputWindow salainenKonsoli = new InputWindow("Salainen Konsoli");
486        salainenKonsoli.Color = Color.Pink;
487        salainenKonsoli.BorderColor = Color.Gold;
488        salainenKonsoli.InputBox.BorderColor = Color.Gold;
489        salainenKonsoli.TextEntered += salaisetKoodit;
490        Add(salainenKonsoli);
491    }
492
493    void salaisetKoodit(InputWindow ikkuna)
494    {
495        string vastaus = ikkuna.InputBox.Text;
496
497        if (vastaus == "Simo")
498        {
499            SimoTaikaa();
500        }
501    }
502
503    void SimoTaikaa()
504    {
505        for (int i = 0; i < 100; i++) Add(new PhysicsObject(30, 30, Shape.Star) { Position = pelaaja.Position, Velocity = RandomGen.NextVector(100, 800), Color = Color.HotPink, IgnoresCollisionResponse = true, IgnoresGravity = true, AngularVelocity = 100.0, LifetimeLeft = TimeSpan.FromSeconds(10) });
506    }
507}
Note: See TracBrowser for help on using the repository browser.