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

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