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

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