source: 2010/31/lajaniku/PUDOTUS/Peli.cs @ 1655

Revision 1655, 6.4 KB checked in by anlakane, 11 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using System.Collections.Generic;
6public class Peli : PhysicsGame
7{
8
9    List<Label> valikonKohdat;
10
11    PhysicsObject pallo, maali;
12
13    const int ruudunLeveys = 50;
14    const int ruudunKorkeus = 50;
15    DoubleMeter alaspainLaskuri;
16
17    HighScoreList topLista;
18    PhysicsObject[] estetaulukko = new PhysicsObject[100];
19    int esteLaskuri = 0;
20
21    protected override void Begin()
22    {
23        topLista = HighScoreList.LoadOrCreate("topten.dat", 10);
24
25
26
27
28        Valikko();
29    }
30
31    void Valikko()
32    {
33        ClearAll();
34        valikonKohdat = new List<Label>();
35       
36        Label kohta1 = new Label("Aloita uusi peli");
37        kohta1.Position = new Vector(0, 40);
38        valikonKohdat.Add(kohta1);
39
40        Label kohta2 = new Label("Lopeta");
41        kohta2.Position = new Vector(0, -40);
42        valikonKohdat.Add(kohta2);
43
44        foreach (Label valikonKohta in valikonKohdat)
45        {
46            Add(valikonKohta);
47        }
48
49        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
50        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
51
52        Mouse.IsCursorVisible = true;
53        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
54        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
55
56    }
57    void ValikossaLiikkuminen(AnalogState hiirenTila)
58    {
59        foreach (Label kohta in valikonKohdat)
60        {
61            if (Mouse.IsCursorOn(kohta))
62            {
63                kohta.TextColor = Color.Red;
64            }
65            else
66            {
67                kohta.TextColor = Color.Black;
68            }
69        }
70    }
71
72    void AloitaPeli()
73    {
74        ClearAll();
75
76
77        Level.BackgroundColor = Color.White;
78        LuoKentta();
79        //LuoPallo();
80        Camera.ZoomFactor = 1.0;
81        Camera.Follow(pallo);
82        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
83    }
84
85    void Lopeta()
86    {
87        Exit();
88    }
89
90
91    PhysicsObject LuoPallo()
92    {
93        pallo = new PhysicsObject(40.0, 27.0);
94        pallo.Shape = Shapes.Circle;
95        pallo.Color = Color.ForestGreen;
96        AddCollisionHandler(pallo, palloTormasi);
97
98        return pallo;
99    }
100
101    PhysicsObject LuoMaali()
102    {
103        maali = new PhysicsObject(55.0, 55.0);
104        maali.Shape = Shapes.Circle;
105        maali.Color = Color.ForestGreen;
106        return maali;
107    }
108
109    void palloTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
110    {
111        if (kohde == maali)
112        {
113            ClearTimers();
114            MessageDisplay.Add("Voitit!!!");
115            int pisteet = (int)Math.Floor(alaspainLaskuri.Value * 10);
116            topLista.Show(pisteet);
117            topLista.ScreenList.ItemColor = Color.LightGreen;
118            topLista.ScreenList.BackGroundColor = Color.LightBlue;
119        }
120    }
121
122    void LiikutaPelaajaa(Vector vektori)
123    {
124        pallo.Push(vektori);
125    }
126
127    void LuoKentta()
128    {
129        TileMap ruudut = TileMap.FromFile("kentta.txt");
130        ruudut['='] = LuoPalikka;
131        ruudut['x'] = LuoTahti;
132        ruudut['1'] = LuoPallo;
133        ruudut['M'] = LuoMaali;
134
135        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
136        Gravity = new Vector(0.0, -800.0);
137        for (int i = 0; i < 50; i++)
138        {
139            LuoEste(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
140        }
141
142        LuoAikaLaskuri();
143        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0));
144        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000, 0));
145        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaaOhjain, null);
146    }
147
148    void LiikutaPelaajaaOhjain(AnalogState a)
149    {
150        Vector suunta = a.StateVector;
151        pallo.Push(suunta*1000);
152    }
153
154    void LuoEste(double x, double y)
155    {
156        PhysicsObject este = new PhysicsObject(40, 40);
157        este.Color = RandomGen.NextColor();
158        este.Shape = Shapes.Circle;
159        este.Position = new Vector(x, y);
160        este.Restitution = 1.0;
161        Add(este);
162        estetaulukko [esteLaskuri] = este;
163        esteLaskuri++;
164        este.Hit(RandomGen.NextVector(new Vector(-100, -100), new Vector(100, 100)));
165        AddCollisionHandler(este, KasitteleEsteenTormays);
166    }
167
168    void KasitteleEsteenTormays(PhysicsObject este, PhysicsObject kohde)
169    {
170        if (kohde == pallo)
171        {
172            kohde.Hit(new Vector(RandomGen.NextDouble(-1000, 1000), RandomGen.NextDouble(-1000, 1000)));
173        }
174    }
175
176    PhysicsObject LuoPalikka()
177    {
178
179        PhysicsObject palikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
180        palikka.Color = Color.Black;
181
182        return palikka;
183    }
184
185    PhysicsObject LuoTahti()
186    {
187        PhysicsObject tahti = PhysicsObject.CreateStaticObject(25.0, 25.0);
188        tahti.Color = Color.Black;
189        tahti.Restitution = 5.0;
190        return tahti;
191
192    }
193
194    void LuoAikaLaskuri()
195    {
196        alaspainLaskuri = new DoubleMeter(75);
197
198        Timer aikaLaskuri = new Timer();
199        aikaLaskuri.Interval = 0.1;
200        aikaLaskuri.Trigger += LaskeAlaspain;
201        aikaLaskuri.Start();
202
203        Label aikaNaytto = new Label();
204        aikaNaytto.TextColor = Color.Red;
205        aikaNaytto.DecimalPlaces = 1;
206        aikaNaytto.BindTo(alaspainLaskuri);
207        aikaNaytto.X = (200.0);
208        aikaNaytto.Y = (200.0);
209        Add(aikaNaytto);
210    }
211
212    void LaskeAlaspain(Timer timer)
213    {
214        alaspainLaskuri.Value -= 0.1;
215
216        if (alaspainLaskuri.Value <= 0)
217        {
218            MessageDisplay.Add("Aika Loppu :D");
219            timer.Stop();
220            MessageDisplay.X = (300.0);
221            MessageDisplay.Y = (300.0);
222            pallo.Destroy();
223            Explosion rajahdys1 = new Explosion(500.0);
224            rajahdys1.Position = pallo.Position;
225            Add(rajahdys1);
226
227            for (int a = 0; a < esteLaskuri; a++)
228            {
229                Explosion rajahdys2 = new Explosion(500.0);
230                rajahdys2.Position = estetaulukko[a].Position;
231                Remove(estetaulukko[a]);
232                Add(rajahdys2);
233            }
234        }
235    }
236}
Note: See TracBrowser for help on using the repository browser.