source: 2011/24/VeikkaH/Pallopeli/Pallopeli/Pallopeli/Peli.cs @ 2054

Revision 2054, 11.0 KB checked in by veilhalo, 9 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//
11//lifetime event
12//
13//
14public class Peli : PhysicsGame
15{
16    /*
17    Äänet: maali, keraa, syo
18     */
19    #region esittelyt
20    SoundEffect tahtiAani = LoadSoundEffect("maali");
21    SoundEffect keraaAani = LoadSoundEffect("keraa");
22    SoundEffect syoAani = LoadSoundEffect("syo");
23
24    Image hahmoKuva = LoadImage("hahmo");
25    Image hahmo2Kuva = LoadImage("hahmo2");
26    Image palloKuva = LoadImage("pallo");
27    Image tahtiKuva = LoadImage("tahti");
28    Image kuutioKuva = LoadImage("kuutio");
29    Image eriKuutioKuva = LoadImage("erikuutio");
30    Image eriStopKuva = LoadImage("eristop");
31
32    double alkuLiike = 1;
33    int palloLaskuri = 1;
34    bool onKuutioita = false;
35
36    Timer kuutioAika = new Timer();
37
38    PhysicsObject hahmo;
39    PhysicsObject taulu;
40    PhysicsObject kuutio;
41
42    IntMeter pisteLaskuri;
43
44    FollowerBrain kuutionAivot = new FollowerBrain();
45
46    List<PhysicsObject> pallot = new List<PhysicsObject>();
47    List<PhysicsObject> kaikki = new List<PhysicsObject>();
48    List<Label> valikonKohdat;
49    #endregion
50
51    public override void Begin()
52    {
53        IsFullScreen = true;
54        Level.CreateBorders(1, true);
55        Level.Height -= 60;
56        Camera.ZoomToLevel();
57        Level.BackgroundColor = Color.Black;
58        MessageDisplay.TextColor = Color.White;
59        luoTaulu();
60        luoHahmo();
61        luoLaskuri();
62        for (int i = 0; i < 100; i++)
63        {
64            luoPallo();
65            luoTahti();
66        }
67        for (int k = 0; k < 1; k++)
68        {
69            luoErikoisuus("kuutio");
70            luoErikoisuus("stop");
71        }
72        pisteLaskuri.Reset();
73        Valikko();
74    }
75    void luoLaskuri()
76    {
77        pisteLaskuri = new IntMeter(0);
78        pisteLaskuri.MaxValue = 100;
79        pisteLaskuri.UpperLimit += tahdetKeratty;
80
81        Label pisteNaytto = new Label();
82        pisteNaytto.X = 0;
83        pisteNaytto.Y = Screen.Bottom + 20;
84        pisteNaytto.TextColor = Color.Red;
85        pisteNaytto.HorizontalAlignment = HorizontalAlignment.Left;
86        pisteNaytto.Title = "Pisteet";
87        pisteNaytto.BindTo(pisteLaskuri);
88        Add(pisteNaytto);
89    }
90    void tahdetKeratty(int arvo)
91    {
92        Widget voitto = new Widget(100, 100, Shape.Circle);
93        Add (voitto);
94        Label voitit = new Label("Voitit!");
95        Add(voitit);
96    }
97    void luoPallo()
98    {
99        PhysicsObject pallo;
100        pallo = new PhysicsObject(RandomGen.NextDouble(10, 100), RandomGen.NextDouble(10, 100), Shape.Circle, CollisionShapeQuality.Best);
101        pallo.X = RandomGen.NextDouble(Level.Left + pallo.Width, Level.Right - pallo.Width);
102        pallo.Y = RandomGen.NextDouble(Level.Bottom + pallo.Height, Level.Top - pallo.Height);
103        pallo.Restitution = 1;
104        pallo.KineticFriction = 0;
105        pallo.Color = Color.Red;
106        pallo.Image = palloKuva;
107        pallo.Tag = "pallo" + palloLaskuri;
108        Add(pallo);
109        pallo.Hit((new Vector(RandomGen.NextDouble(-1, 1), RandomGen.NextDouble(-1, 1)).Normalize()) * RandomGen.NextDouble(0, alkuLiike * 1000));
110        palloLaskuri++;
111        pallot.Add(pallo);
112        kaikki.Add(pallo);
113    }
114    void luoTahti()
115    {
116        PhysicsObject tahti;
117        tahti = new PhysicsObject(10, 10);
118        tahti.X = RandomGen.NextDouble(Level.Left + tahti.Width, Level.Right - tahti.Width);
119        tahti.Y = RandomGen.NextDouble(Level.Bottom + tahti.Height, Level.Top - tahti.Height);
120        tahti.Restitution = 1;
121        tahti.KineticFriction = 0;
122        tahti.Color = Color.Yellow;
123        tahti.Image = tahtiKuva;
124        tahti.Tag = "tahti";
125        tahti.Mass = 0.1;
126        Add(tahti);
127        kaikki.Add(tahti);
128    }
129    void luoHahmo()
130    {
131        hahmo = new PhysicsObject(50, 50, Shape.Circle, CollisionShapeQuality.Best);
132        hahmo.X = 0;
133        hahmo.Y = 0;
134        hahmo.Restitution = 1;
135        hahmo.KineticFriction = 0;
136        hahmo.Color = Color.Blue;
137        hahmo.Image = hahmoKuva;
138        hahmo.Mass = 1;
139        hahmo.LinearDamping = 0.9;
140        AddCollisionHandler(hahmo, osu);
141        Add(hahmo);
142
143        Vector ylos = new Vector(0, 1000);
144        Vector alas = new Vector(0, -1000);
145        Vector oikealle = new Vector(1000, 0);
146        Vector vasemmalle = new Vector(-1000, 0);
147
148        Keyboard.Listen(Key.Up, ButtonState.Down, aseta, "Liiku ylös", hahmo, ylos);
149        Keyboard.Listen(Key.Up, ButtonState.Released, aseta, null, hahmo, Vector.Zero);
150        Keyboard.Listen(Key.Down, ButtonState.Down, aseta, "Liiku alas", hahmo, alas);
151        Keyboard.Listen(Key.Down, ButtonState.Released, aseta, null, hahmo, Vector.Zero);
152        Keyboard.Listen(Key.Right, ButtonState.Down, aseta, "Liiku oikealle", hahmo, oikealle);
153        Keyboard.Listen(Key.Right, ButtonState.Released, aseta, null, hahmo, Vector.Zero);
154        Keyboard.Listen(Key.Left, ButtonState.Down, aseta, "Liiku vasemmalle", hahmo, vasemmalle);
155        Keyboard.Listen(Key.Left, ButtonState.Released, aseta, null, hahmo, Vector.Zero);
156
157        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohje");
158        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
159
160        Keyboard.Listen(Key.D1, ButtonState.Pressed, aseta, "Liiku vasemmalle", hahmo, vasemmalle);
161        }
162    void luoErikoisuus(string tyyppi)
163    {
164        if (tyyppi == "kuutio")
165        {
166            PhysicsObject eriKuutio;
167            eriKuutio = new PhysicsObject(50, 50);
168            eriKuutio.X = RandomGen.NextDouble(Level.Left + eriKuutio.Width, Level.Right - eriKuutio.Width);
169            eriKuutio.Y = RandomGen.NextDouble(Level.Bottom + eriKuutio.Height, Level.Top - eriKuutio.Height);
170            eriKuutio.Restitution = 1;
171            eriKuutio.KineticFriction = 0;
172            eriKuutio.Color = Color.Cyan;
173            eriKuutio.Image = eriKuutioKuva;
174            eriKuutio.Tag = "erikuutio";
175            eriKuutio.Mass = 0.1;
176            Add(eriKuutio);
177            kaikki.Add(eriKuutio);
178        }
179        else if (tyyppi == "stop")
180        {
181            PhysicsObject eriStop;
182            eriStop = new PhysicsObject(50, 50);
183            eriStop.X = RandomGen.NextDouble(Level.Left + eriStop.Width, Level.Right - eriStop.Width);
184            eriStop.Y = RandomGen.NextDouble(Level.Bottom + eriStop.Height, Level.Top - eriStop.Height);
185            eriStop.Restitution = 1;
186            eriStop.KineticFriction = 0;
187            eriStop.Color = Color.Red;
188            eriStop.Image = eriStopKuva;
189            eriStop.Tag = "eristop";
190            eriStop.Mass = 0.1;
191            Add(eriStop);
192            kaikki.Add(eriStop);
193        }
194    }
195    void luoKuutio()
196    {
197        onKuutioita = true;
198        kuutio = new PhysicsObject(100, 100, Shape.Rectangle, CollisionShapeQuality.Best);
199        kuutio.X = RandomGen.NextDouble(Level.Left + kuutio.Width, Level.Right - kuutio.Width);
200        kuutio.Y = RandomGen.NextDouble(Level.Bottom + kuutio.Height, Level.Top - kuutio.Height);
201        kuutio.Restitution = 1;
202        kuutio.KineticFriction = 0;
203        kuutio.Color = Color.Cyan;
204        kuutio.Image = kuutioKuva;
205        kuutio.Mass *= 10;
206        kuutio.Brain = kuutionAivot;
207        kuutionAivot.Active = true;
208        kuutio.MaximumLifetime = new TimeSpan(0, 0, 30);//Huom.
209        kuutioAika.Interval = 30;                       //30 ja 30 samoiksi!!!!!
210        kuutionAivot.Speed *= 20;
211        uusiKohde();
212
213        AddCollisionHandler(kuutio, syo);
214        Add(kuutio);
215    }
216    void poistaKuutio()
217    {
218       
219    }
220    void aseta (PhysicsObject hahmoAseta, Vector liike2)
221    {
222        hahmoAseta.Push(liike2);
223    }
224    void osu(PhysicsObject hahmo, PhysicsObject kohde)
225    {
226        bool alhaalla = false;
227
228        switch (kohde.Tag.ToString())
229        {
230            case "tahti":
231
232                if (Keyboard.GetKeyState(Key.Up) == ButtonState.Down ||
233                    Keyboard.GetKeyState(Key.Down) == ButtonState.Down ||
234                    Keyboard.GetKeyState(Key.Left) == ButtonState.Down ||
235                    Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
236                {
237                    alhaalla = true;
238                }
239                else
240                {
241                    alhaalla = false;
242                }
243
244                if (alhaalla == true)
245                {
246                    tahtiAani.Play();
247                    kohde.Destroy();
248                    pisteLaskuri.Value++;
249                }
250                break;
251
252            case "erikuutio":
253
254                if (onKuutioita == false)
255                {
256                    //keraaAani.Play();
257                    kohde.Destroy();
258                    luoKuutio();
259                    return;
260                }
261                else
262                {
263                    MessageDisplay.Add("Odota ensin edellisen Rohmukuution poistumista");
264                }
265                break;
266            case "eristop":
267                foreach (PhysicsObject kaikkiOb in kaikki)
268                {
269                    kaikkiOb.Stop();
270                }
271                kohde.Destroy();
272                break;
273            default:
274                break;
275        }
276    }
277    void luoTaulu ()
278    {
279        taulu = PhysicsObject.CreateStaticObject(Level.Width, 30, Shape.Rectangle, CollisionShapeQuality.Best);
280        taulu.Restitution = 1;
281        taulu.KineticFriction = 0;
282        taulu.X = 0;
283        taulu.Y = Level.Bottom - 15;
284        taulu.Color = Color.DarkGray;
285        Add(taulu);
286    }
287    void syo(PhysicsObject kuutio, PhysicsObject ruoka)
288    {
289        if ((ruoka == kuutionAivot.Target))
290        {
291            //syoAani.Play();
292            ruoka.Destroy();
293            uusiKohde();
294        }
295    }
296    void uusiKohde()
297    {
298        if (pallot.Count == 0)
299        {
300            kuutio.Destroy();
301            onKuutioita = false;
302            return;
303        }
304        kuutionAivot.Target = pallot[pallot.Count - 1];
305        pallot.RemoveAt(pallot.Count - 1);
306    }
307    void Valikko()
308    {
309        /*
310        ClearAll();
311        valikonKohdat = new List<Label>();
312
313        Label kohta1 = new Label("Pelaa");
314        kohta1.Position = new Vector(0, 40);
315        valikonKohdat.Add(kohta1);
316
317        Label kohta2 = new Label("Lopeta");
318        kohta2.Position = new Vector(0, -40);
319        valikonKohdat.Add(kohta2);
320
321        foreach (Label valikonKohta in valikonKohdat)
322        {
323            Add(valikonKohta);
324        }
325
326        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
327        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
328
329        Mouse.IsCursorVisible = true;
330        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
331        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
332        */
333    }
334}
Note: See TracBrowser for help on using the repository browser.