source: 2010/27/juoshako/Br3ak 1t/Peli.cs @ 1235

Revision 1235, 8.0 KB checked in by juoshako, 12 years ago (diff)

Br3ak 1t 100% valmis!

Line 
1using System;
2using Jypeli;
3using System.Collections.Generic;
4using Jypeli.Widgets;
5using Jypeli.Assets;
6
7
8
9/// <summary>
10/// Br3ak1t
11/// Tekijä: Juha-Matti Hakojärvi
12/// </summary>
13public class Laatta : PhysicsObject
14{
15    private bool onkoJoOsuttukerran;
16    public bool OnkoJoOsuttuKerran
17    {
18        get { return onkoJoOsuttukerran; }
19        set { onkoJoOsuttukerran = value; }
20    } 
21    public Laatta(double width, double height)
22        :base(width, height)
23    {
24        MakeStatic();
25    }
26}
27
28
29public class Peli : PhysicsGame
30{
31   
32    const int ruudunLeveys = 50;
33    const int ruudunKorkeus = 50;
34
35    Vector nopeusVasemmalle = new Vector (-800.0, 0);
36    Vector nopeusOikealle = new Vector(800.0, 0);
37
38    PhysicsObject maila;
39    PhysicsObject pallo;
40
41    IntMeter pisteLaskuri;
42
43    SoundEffect osuuLaattaanAani;
44    SoundEffect TuhoaaLaatanAani;
45
46    List<Label> valikonKohdat;
47
48    const double pallonYNopeus = 800;
49
50    protected override void Begin()
51    {
52
53        Valikko();
54       
55    }
56    void AloitaPeli()
57    {
58        ClearAll();
59
60        LuoKentta();
61        LuoLaskuri();
62        AsetaOhjaimet();
63        LataaAanet();
64        //LuoMaila();
65
66
67        Vector impulssi = new Vector(0.0, 500.0);
68        pallo.Hit(impulssi);
69    }
70
71    void LataaAanet()
72    {
73        osuuLaattaanAani = LoadSoundEffect("button-3");
74        TuhoaaLaatanAani = LoadSoundEffect("button-4");
75    }
76
77    void Lopeta()
78    {
79        Exit();
80    }
81
82    protected override void Update(Time time)
83    {
84        if ( pallo != null && Math.Abs(pallo.Velocity.Y) < pallonYNopeus)
85        {
86            pallo.Velocity = new Vector(pallo.Velocity.X, pallo.Velocity.Y * 1.1);
87        }
88
89        base.Update(time);
90    }
91
92    void LuoMaila()
93    {
94        maila = PhysicsObject.CreateStaticObject(300, 30);
95        maila.Shape = Shapes.Rectangle;
96        maila.X = 0;
97        maila.Y = Level.Bottom + 100;
98        maila.CanRotate = false;
99        maila.KineticFriction = 1;
100        maila.Color = Color.Blue;
101        maila.Restitution = 1.0;
102        Add(maila);
103    }
104    void LuoKentta()
105    {
106        TileMap ruudut = TileMap.FromFile ("Kentta.txt");
107        ruudut['='] = LuoPalikka;
108        ruudut['*'] = LuoLaatta;
109        ruudut['.'] = LuoTiili;
110        ruudut.Insert (ruudunLeveys, ruudunKorkeus);
111        Image tausta = LoadImage("n49_chandra_big");
112        Level.Background.Image = tausta;
113        Level.Background.Scale = 4;
114        Level.Background.FitToLevel();
115        Camera.ZoomToLevel();
116
117        Level.BackgroundColor = Color.Black;
118
119        pallo = new PhysicsObject(40, 40);
120        pallo.Shape = Shapes.Circle;
121        pallo.X = 0;
122        pallo.Y = Level.Bottom+110;
123        pallo.Color = Color.Red;
124        pallo.KineticFriction = 0;
125        Add (pallo);
126
127        LuoMaila();
128        MediaPlayer.Play("midnight-ride");
129       
130        AddCollisionHandler(pallo, KasittelePallonTormays);
131        Mouse.IsCursorVisible = false;MediaPlayer.Play("midnight-ride");
132       
133    }
134    PhysicsObject LuoPalikka()
135    {
136        PhysicsObject palikka = PhysicsObject.CreateStaticObject (50.0, 50.0);
137        palikka.Shape = Shapes.Rectangle;
138        palikka.Color = Color.Gray;
139        palikka.Restitution = 1.0;
140        palikka.Tag = "palikka";
141        palikka.Image = LoadImage ("Palikka");
142        return palikka;
143    }
144    PhysicsObject LuoLaatta()
145    {
146        Laatta laatta = new Laatta(48, 48);
147        laatta.Tag = "laatta";     
148        laatta.Image = LoadImage("Laatta");
149        laatta.Restitution = 1.0;
150        return laatta;
151    }
152    PhysicsObject LuoTiili()
153    {
154        PhysicsObject tiili = PhysicsObject.CreateStaticObject(50.0, 50.0);
155        tiili.Tag = "tiili";
156        tiili.Color = Color.Red;
157        tiili.Shape = Shapes.Rectangle;
158        return tiili;
159    }
160
161   
162    void KasittelePallonTormays(PhysicsObject pallo, PhysicsObject kohde)
163    {
164        if (kohde.Tag.ToString() == "laatta")
165        {
166            bool tuhotaanko = ((Laatta)kohde).OnkoJoOsuttuKerran;
167            if (tuhotaanko)
168            {
169                Timer.SingleShot(0.1, kohde.Destroy);
170                pisteLaskuri.Value++;
171                TuhoaaLaatanAani.Play();
172            }
173            else
174            {
175                ((Laatta)kohde).OnkoJoOsuttuKerran = true;
176                kohde.Image = LoadImage("Laatta (vastavärit)");
177                osuuLaattaanAani.Play();
178            }
179
180           
181        }
182        if (kohde.Tag.ToString() == "tiili")
183        {
184            MessageDisplay.Add("Peli loppui, paina ESC palataksesi päävalikkoon.");
185            MessageDisplay.TextColor = Color.Red;
186            PeliPaattyi();
187        }
188
189    }
190
191    void AsetaOhjaimet()
192    {
193        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
194        Keyboard.Listen (Key.Left, ButtonState.Down, AsetaNopeus, "Liikuta mailaa vasemmalle", maila, nopeusVasemmalle);
195        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero); 
196        Keyboard.Listen (Key.Right, ButtonState.Down, AsetaNopeus, "Liikuta mailaa oikealle", maila, nopeusOikealle);
197        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
198
199        //Keyboard.Listen (Key.Escape, ButtonState.Pressed, Exit, "Poistu");
200        Keyboard.Listen (Key.F1, ButtonState.Down, ShowControlHelp, "Näytä ohjeet");
201    }
202    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
203    {
204       
205        if (( nopeus.X < 0 ) && ( maila.Left-50 < Level.Left))
206        {
207            maila.Velocity = Vector.Zero;
208            return;
209        }
210            if (( nopeus.X > 0 ) && (maila.Right+50 > Level.Right))
211            {
212                maila.Velocity = Vector.Zero;
213                return;
214            }
215            maila.Velocity = nopeus;
216       
217    }
218    void LuoLaskuri()
219    {
220        pisteLaskuri = new IntMeter(0);
221        Label pisteNaytto = new Label();
222        pisteNaytto.X = Screen.Left + 100;
223        pisteNaytto.Y = Screen.Top -100;
224        pisteNaytto.TextColor = Color.Red;
225
226        pisteNaytto.BindTo(pisteLaskuri);
227        Add(pisteNaytto);
228
229        Label pisteTeksti = new Label("Pisteitä");
230        pisteTeksti.X = Screen.Left + 50;
231        pisteTeksti.Y = Screen.Top - 100;
232        pisteTeksti.TextColor = Color.Red;
233        Add(pisteTeksti);
234
235        IntMeter laskuri = new IntMeter(0);
236        laskuri.MaxValue = 120;
237        laskuri.UpperLimit += LaskuriYlarajassa;
238    }
239    void PeliPaattyi()
240    {
241        pallo.Destroy();
242        maila.Destroy();
243    }
244    void Valikko()
245    {
246        ClearAll();
247       
248        Mouse.IsCursorVisible = true;
249        valikonKohdat = new List<Label>();
250        Image tausta = LoadImage("Menu");
251        Level.Background.Image = tausta;
252        Label kohta1 = new Label("Aloita uusi peli");
253        kohta1.Position = new Vector(0, 40);
254        valikonKohdat.Add(kohta1);
255
256        Label kohta2 = new Label("Lopeta");
257        kohta2.Position = new Vector(0, -40);
258        valikonKohdat.Add(kohta2);
259
260        foreach (Label valikonKohta in valikonKohdat)
261        {
262            Add(valikonKohta);
263        }
264        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
265        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
266
267        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
268        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
269    }
270    void ValikossaLiikkuminen(AnalogState hiirenTila)
271    {
272        foreach (Label kohta in valikonKohdat)
273        {
274            if (Mouse.IsCursorOn(kohta))
275            {
276                kohta.TextColor = Color.Red;
277            }
278            else
279            {
280                kohta.TextColor = Color.Black;
281            }
282        }
283    }
284    void LaskuriYlarajassa(int arvo)
285    {
286        MessageDisplay.TextColor = Color.White;
287        MessageDisplay.Add("Pääsit kentän läpi!");
288    }
289
290}
Note: See TracBrowser for help on using the repository browser.