source: esimerkit/2015k/live/live11/CatchHeads/CatchHeads/CatchHeads.cs @ 1483

Revision 1082, 5.5 KB checked in by anlakane, 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
9
10/// @author Antti-Jussi Lakanen
11/// @version 18.2.2015
12///
13/// <summary>
14/// Peli jossa pyydystetään palloja.
15/// </summary>
16public class CatchHeads : PhysicsGame
17{
18    /// <summary>
19    /// Kuinka monta palloa pelissä on aluksi.
20    /// (Huom! Attribuutit (eli luokan muuttujat,
21    /// siis ne jotka näkyvät kaikille aliohjelmille)
22    /// pitää dokumentoida myös tähän tapaan.
23    /// </summary>
24    const int PALLOJEN_MAARA = 10;
25
26    /// <summary>
27    /// Pelin alustustoimenpiteet.
28    /// </summary>
29    public override void Begin()
30    {
31        Image[] kuvat = LoadImages("Baby", "Chell", "Cigur", "Igor", "Infant", "Jango", "Knive", "Leader", "Mum", "Ron", "Ven", "Yar");
32
33        Level.Size = new Vector(1024, 768);
34        Window.Width = 1024;
35        Window.Height = 768;
36
37        Level.Background.Color = Color.Black;
38
39        PhysicsObject pelaaja = new PhysicsObject(100, 100, Shape.Ellipse);
40        pelaaja.Image = LoadImage("King");
41        Add(pelaaja);
42
43        for (int i = 0; i < PALLOJEN_MAARA; i++)
44        {
45            PhysicsObject pallo = new PhysicsObject(60, 60, Shape.Ellipse);
46            pallo.Color = RandomGen.NextColor();
47            pallo.X = RandomGen.NextDouble(Level.Left + pallo.Width / 2, Level.Right - pallo.Width / 2);
48            pallo.Y = RandomGen.NextDouble(Level.Bottom + pallo.Height / 2, Level.Top - pallo.Height / 2);
49            pallo.Tag = "vihu";
50            pallo.Image = kuvat[RandomGen.NextInt(kuvat.Length)];
51            Add(pallo);
52        }
53
54        Timer pienenna = new Timer();
55        pienenna.Interval = 0.2;
56        pienenna.Timeout += delegate { Pienenna(pelaaja, pienenna); };
57        pienenna.Start();
58
59        IntMeter pistelaskuri = LuoLaskuri();
60
61        AddCollisionHandler(pelaaja, "vihu", PelaajaTormasi);
62        // AddCollisionHandler(pelaaja, "vihu", CollisionHandler.ExplodeTarget(50, false));
63        AddCollisionHandler(pelaaja, "vihu", CollisionHandler.IncreaseObjectSize(20, 20));
64        AddCollisionHandler(pelaaja, "vihu", CollisionHandler.AddMeterValue(pistelaskuri, 1));
65
66        Keyboard.Listen(Key.Up, ButtonState.Pressed, Liikuta, "Lyö palloa ylöspäin", pelaaja, new Vector(0, 1000));
67        Keyboard.Listen(Key.Down, ButtonState.Pressed, Liikuta, "Lyö palloa ylöspäin", pelaaja, new Vector(0, -1000));
68        Keyboard.Listen(Key.Left, ButtonState.Pressed, Liikuta, "Lyö palloa ylöspäin", pelaaja, new Vector(-1000, 0));
69        Keyboard.Listen(Key.Right, ButtonState.Pressed, Liikuta, "Lyö palloa ylöspäin", pelaaja, new Vector(1000, 0));
70
71        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
72        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
73
74        Level.CreateBorders();
75        Camera.ZoomToLevel();
76    }
77
78    /// <summary>
79    /// Luodaan pistelaskuri ja sen näyttö ja lisätään
80    /// näyttö ruudulle.
81    /// </summary>
82    /// <returns>Pistelaskuri</returns>
83    public IntMeter LuoLaskuri()
84    {
85        IntMeter pistelaskuri = new IntMeter(0, 0, PALLOJEN_MAARA);
86        pistelaskuri.UpperLimit += PeliPaattyiVoittoon;
87
88        Label pistenaytto = new Label();
89        pistenaytto.Color = Color.Yellow;
90        pistenaytto.TextColor = Color.Brown;
91        pistenaytto.IntFormatString = "Pisteet: {0,2:D}";
92        pistenaytto.X = Screen.Right - pistenaytto.Width;
93        pistenaytto.Y = Screen.Top - pistenaytto.Height / 2;
94        pistenaytto.BindTo(pistelaskuri);
95        Add(pistenaytto);
96
97        return pistelaskuri;
98    }
99
100    /// <summary>
101    /// Pelin päättyminen voittoon.
102    /// Tyhjää kaiken ja lisää R-näppäimen (restart)
103    /// </summary>
104    public void PeliPaattyiVoittoon()
105    {
106        ClearAll();
107        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Poistu pelistä");
108        MessageDisplay.Add("Voitit pelin senkin Master!!!");
109        Keyboard.Listen(Key.R, ButtonState.Pressed, delegate { Keyboard.Disable(Key.R); Begin(); }, null);
110    }
111
112    /// <summary>
113    /// Pienentää pelaajaa ja kun pelaaja on riittävän pieni
114    /// niin lopetetaan pienentäminen
115    /// </summary>
116    /// <param name="pelaaja">Pienennettävä olio.</param>
117    /// <param name="ajastin">Pienennysajastin.</param>
118    public void Pienenna(PhysicsObject pelaaja, Timer ajastin)
119    {
120        if (pelaaja.Width < 10)
121        {
122            ajastin.Stop();
123            pelaaja.Destroy();
124            MessageDisplay.Add("Hävisit pelin :((((((");
125
126            ExplosionSystem es = new ExplosionSystem(LoadImage("bum"), 100);
127            Add(es);
128            es.AddEffect(pelaaja.Position, 100);
129            return;
130        }
131        pelaaja.Size -= new Vector(5, 5);
132    }
133
134    /// <summary>
135    /// Tuhotaan kohde.
136    /// </summary>
137    /// <param name="tormaaja">Törmääjä</param>
138    /// <param name="kohde">Tuhottava kohde.</param>
139    public void PelaajaTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
140    {
141        kohde.Destroy();
142    }
143
144    /// <summary>
145    /// Liikuttaa oliota Hit-metodilla.
146    /// </summary>
147    /// <param name="liikutettava">Liikutettava olio.</param>
148    /// <param name="suunta">Suunta, johon liikutetaan.s</param>
149    public void Liikuta(PhysicsObject liikutettava, Vector suunta)
150    {
151        liikutettava.Hit(suunta);
152    }
153}
Note: See TracBrowser for help on using the repository browser.