source: 2011/24/VilmaK/Magneetti/Magneetti/Magneetti/Peli.cs @ 2096

Revision 2096, 10.2 KB checked in by vievkang, 10 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 Peli : PhysicsGame
10{
11    PhysicsObject Magneetti;
12    PhysicsObject JattiMagneetti;
13    Image hahmo = LoadImage("örkki");
14    GameObject Risti;
15    Image liikuttaja = LoadImage("risti");
16    IntMeter pisteLaskuri;
17    Image lopputeksti = LoadImage("lopputeksti");
18    List<Label> valikonKohdat;
19    bool pelikaynnissa = false;
20    ScoreList topLista = new ScoreList(10, true, 1000);
21
22    int kenttanro = 1;
23
24
25    public override void Begin()
26    {
27
28        Valikko();
29       
30    }
31
32
33    void Valikko()
34    {
35
36        ClearAll();
37        valikonKohdat = new List<Label>();
38
39        Label ohjeet = new Label("Ohjaa hiirellä ristiä. Risti hylkii magneettia.\n" +
40        "Ohjaa magneetti maaliin osumatta seiniin tai toiseen magneettiin.\n" +
41        "Mitä vähemmän pisteitä, sen parempi.Lopettaaksesi pelin, paina ESC-näppäintä.");
42        ohjeet.Y = +100;
43        ohjeet.Width = 100;
44        //ohjeet.HorizontalSizing = Sizing.FixedSize;
45        ohjeet.SizeMode = TextSizeMode.Wrapped;
46        Add(ohjeet);
47        Label kohta1 = new Label("Aloita uusi peli");
48        kohta1.Position = new Vector(0, 40);
49        valikonKohdat.Add(kohta1);
50
51        Label kohta2 = new Label("Lopeta");
52        kohta2.Position = new Vector(0, -40);
53        valikonKohdat.Add(kohta2);
54
55        foreach (Label valikonKohta in valikonKohdat)
56        {
57            Add(valikonKohta);
58        }
59
60        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
61        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
62
63        Mouse.IsCursorVisible = true;
64        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
65        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
66    }
67
68    void ValikossaLiikkuminen(AnalogState hiirenTila)
69    {
70        foreach (Label kohta in valikonKohdat)
71        {
72            if (Mouse.IsCursorOn(kohta))
73            {
74                kohta.TextColor = Color.Red;
75            }
76            else
77            {
78                kohta.TextColor = Color.Black;
79            }
80
81        }
82    }
83
84    void AloitaPeli()
85    {
86        pelikaynnissa = true;
87        ClearAll();
88        AsetaOhjaimet();
89       // kenttanro = 4;
90        //LuoKentta(4);
91        LuoKentta(kenttanro);
92       
93
94        //Level.CreateBorders();
95
96        // Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
97    }
98
99    void Lopeta()
100    {
101        Exit();
102    }
103
104    #region kentanluonti
105
106    void LuoKentta(int kenttanro)
107    {
108        String kentta;
109        ClearGameObjects();
110        ClearWidgets();
111        switch (kenttanro)
112        {
113            case 1: 
114                kentta = "kentta.txt"; 
115                Level.BackgroundColor = Color.LimeGreen;
116                break;
117            case 2: 
118                kentta = "kentta2.txt"; 
119                Level.BackgroundColor = Color.LimeGreen;
120                break;
121            case 3: 
122                kentta = "kentta3.txt";
123                Level.BackgroundColor = Color.LimeGreen;
124                break;
125            case 4: 
126                kentta = "bonuskentta.txt"; 
127                Level.BackgroundColor = Color.Aqua;
128                break;
129            default: kentta = ""; Exit(); break;
130        }
131
132        if (DataStorage.Exists("pisteet" + kenttanro + ".xml"))
133            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet" + kenttanro + ".xml");
134
135        LuoRisti();
136        LuoLaskuri();
137       
138        TileMap ruudut = TileMap.FromFile(kentta);
139        ruudut.SetTileMethod('x', LuoPalikka);
140        ruudut.SetTileMethod('p', LuoPuu);
141        ruudut.SetTileMethod('o', LuoMaali);
142        ruudut.SetTileMethod('j', LuoJarvi);
143        ruudut.SetTileMethod('k', LuoKukka);
144        ruudut.SetTileMethod('$', LuoMagneetti);
145        ruudut.SetTileMethod('r', LuoRanta);
146        ruudut.SetTileMethod('M', LuoJattiMagneetti);
147        ruudut.SetTileMethod ('R', LuoBonusRanta);
148
149        ruudut.Execute(50, 50);
150        Level.CreateBorders(1.0, false);
151    }
152
153    void LuoBonusRanta(Vector paikka, double leveys, double korkeus)
154    {
155       
156        GameObject BonusRanta = new GameObject(16 * leveys, 3 * korkeus );
157        BonusRanta.Image = LoadImage("bonusranta");
158        BonusRanta.Position = new Vector(paikka.X + BonusRanta.Width/2 - leveys / 2, paikka.Y - BonusRanta.Height/2+ korkeus/2);
159        //BonusRanta.Position = paikka;
160        Add(BonusRanta);
161    }
162
163    void LuoPalikka(Vector paikka, double leveys, double korkeus)
164    {
165        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
166        palikka.Position = paikka;
167        palikka.Tag = "x";
168        palikka.Color = Color.Orange;
169        Add(palikka);
170
171    }
172
173    void LuoPuu(Vector paikka, double leveys, double korkeus)
174    {
175        PhysicsObject puu = PhysicsObject.CreateStaticObject(leveys, korkeus);
176        puu.Image = LoadImage("puu");
177        puu.Position = paikka;
178
179        Add(puu);
180    }
181
182    void LuoMaali(Vector paikka, double leveys, double korkeus)
183    {
184        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
185        maali.Image = LoadImage("maali");
186        maali.Position = paikka;
187        maali.Tag = "o";
188        Add(maali);
189    }
190
191    void LuoJarvi(Vector paikka, double leveys, double korkeus)
192    {
193        GameObject jarvi = new GameObject(leveys * 8, korkeus);
194        jarvi.Image = LoadImage("järvi");
195        jarvi.Position = new Vector(paikka.X + jarvi.Width / 2 - leveys / 2, paikka.Y);
196        Add(jarvi);
197    }
198
199    void LuoKukka(Vector paikka, double leveys, double korkeus)
200    {
201        PhysicsObject kukka = PhysicsObject.CreateStaticObject (leveys, korkeus);
202        kukka.Image = LoadImage("kukka");
203        kukka.Position = paikka;
204        Add(kukka);
205    }
206
207    void LuoMagneetti(Vector paikka, double leveys, double korkeus)
208    {
209        Magneetti = new PhysicsObject(20, 20);
210        Magneetti.Shape = Shape.Circle;
211        Magneetti.Position = paikka;
212        Magneetti.Image = hahmo;
213        Magneetti.CanRotate = false;
214        Magneetti.Restitution = 0.25;
215        AddCollisionHandler(Magneetti, KasitteleMagneetinTormays);
216
217        Add(Magneetti, 1);
218
219    }
220
221    void LuoRanta(Vector paikka, double leveys, double korkeus)
222    {
223        GameObject Ranta = new GameObject(3 * leveys, korkeus);
224        Ranta.Image = LoadImage("beach");
225        Ranta.Position = new Vector(paikka.X + Ranta.Width / 1.5 - leveys / 2, paikka.Y);
226        Add(Ranta);
227
228    }
229
230
231    void LuoJattiMagneetti(Vector paikka, double leveys, double korkeus)
232    {
233        JattiMagneetti = PhysicsObject.CreateStaticObject(50, 50);
234        JattiMagneetti.Image = LoadImage("jättimagneetti");
235        JattiMagneetti.Position = paikka;
236        JattiMagneetti.Tag = "M";
237        Add(JattiMagneetti);
238
239    }
240
241    void LuoRisti()
242    {
243        Risti = new GameObject(200, 200);
244        Risti.Shape = Shape.Circle;
245        Risti.Image = liikuttaja;
246        Add(Risti, 1);
247
248    }
249
250    #endregion
251
252    void AsetaOhjaimet()
253    {
254        Mouse.IsCursorVisible = false;
255        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
256        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta Peli");
257
258    }
259    void KuunteleLiiketta(AnalogState hiirentila)
260    {
261        Risti.X = Mouse.PositionOnWorld.X;
262        Risti.Y = Mouse.PositionOnWorld.Y;
263    }
264
265    void LuoLaskuri()
266    {
267        pisteLaskuri = new IntMeter(0);
268        pisteLaskuri.MinValue = int.MinValue;
269        Label pisteNaytto = new Label();
270        pisteNaytto.X = Screen.Right - 100;
271        pisteNaytto.Y = Screen.Top - 100;
272        pisteNaytto.TextColor = Color.White;
273        pisteNaytto.BindTo(pisteLaskuri);
274        Add(pisteNaytto);
275    }
276
277    void KasitteleMagneetinTormays(PhysicsObject Magneetti, PhysicsObject kohde)
278    {
279        // Seinä
280        if (kohde.Tag.ToString() == "x")
281        {
282            pisteLaskuri.Value++;
283        }
284
285        // Iso magneetti
286        if (kohde.Tag.ToString() == "M")
287        {
288            pisteLaskuri.Value += 100;
289        }
290
291        // Loppu eli maali
292        if (kohde.Tag.ToString() == "o")
293        {
294            GameObject loppu = new GameObject(226, 29);
295            Magneetti.Destroy();
296            loppu.Image = lopputeksti;
297
298            Add(loppu);
299            pisteLaskuri.MaxValue = pisteLaskuri.Value;
300            Label loppupiste = new Label();
301            loppupiste.Y = -40;
302            loppupiste.BindTo(pisteLaskuri);
303            Add(loppupiste);
304            if ((kenttanro == 4 && pisteLaskuri.Value <= 1) || (kenttanro != 4 && pisteLaskuri.Value <= 1000))
305            {
306                HighScoreWindow topIkkuna = new HighScoreWindow("Magneetti",
307                                 "Parhaat pisteet",
308                                 "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
309                                 topLista, pisteLaskuri.Value);
310                topIkkuna.Closed += TallennaPisteet;
311                Add(topIkkuna);
312            }
313            else
314            {
315                HighScoreWindow topIkkuna = new HighScoreWindow("Magneetti",
316                                 "Parhaat pisteet",
317                                 topLista);
318                Add(topIkkuna);
319            }
320        }
321    }
322
323    void TallennaPisteet(Window sender)
324    {
325        DataStorage.Save<ScoreList>(topLista, "pisteet" + kenttanro + ".xml");
326        LuoKentta(++kenttanro);
327    }
328
329    protected override void Update(Time time)
330    {
331
332        // SetWindowSize(1024, 768, false);
333        if (pelikaynnissa)
334        {
335
336            Vector v = Magneetti.Position - Risti.Position;
337            // MessageDisplay.Add(v.X + " " + v.Y);
338            Magneetti.Push(1000 / v.Magnitude * v.Normalize());
339
340            Vector z = JattiMagneetti.Position - Magneetti.Position;
341            Magneetti.Push(1500 / z.Magnitude * z.Normalize());
342        }
343
344        base.Update(time);
345    }
346}
Note: See TracBrowser for help on using the repository browser.