source: 2014/26/Pyry-PetteriP/Motopeli/Motopeli/Motopeli/Motopeli.cs @ 5150

Revision 5150, 9.8 KB checked in by pypelli, 5 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 Motopeli : PhysicsGame
10{
11
12    Image autoKuva = LoadImage("auto2");
13    Auto auto1;
14    RoadMap tie;
15    Automobile auto2;
16
17
18    ScoreList topLista = new ScoreList(10, true, 1000);
19
20
21
22    Timer aikaLaskuri;
23
24    bool osuttuOikeaanViivaan = false;
25    bool osuttuAlaViivaan = false;
26    bool osuttuVasempaanViivaan = false;
27
28    Vector[] reittiPisteet = new Vector[]
29    {     
30      new Vector( 0, 300 ),
31      new Vector(400,300 ), // suoran päätös oikealla ylhaalla
32      new Vector(500, 250),
33      new Vector (600,100), 
34      new Vector (600, 0),
35      new Vector (600, -100),
36      new Vector (600, -200),
37      new Vector (550, -210),
38      new Vector (500, -220),
39      new Vector (300, -300),
40      new Vector (100, -300),
41      new Vector (0, -300),
42      new Vector (-200, -100),
43      new Vector (-400, 0),
44      new Vector (-500, 50),
45      new Vector (-510, 80), 
46      new Vector (-520, 110),
47      new Vector (-530, 140),
48      new Vector (-530, 180), 
49      new Vector (-530, 220),
50      new Vector (-500, 250),
51      new Vector (-450, 270),
52      new Vector (-400, 290),
53      new Vector (-350, 300),
54      new Vector (10, 300),
55      };
56
57    List<Automobile> autot;
58
59    public override void Begin()
60    {
61        autot = new List<Automobile>();
62        topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
63        Alkuvalikko();
64    }
65
66    void Alku(Window sender)
67    {
68        Alkuvalikko();
69    }
70
71    void Alkuvalikko()
72    {
73        ClearAll();
74
75        //Level.BackgroundColor = Color.Snow;
76       // Level.Background.CreateStars();
77
78        autot.Clear();
79        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Multplayer", "Parhaat pisteet", "Lopeta");
80        Add(alkuValikko);
81
82        alkuValikko.AddItemHandler(0, AloitaAlusta, 1);
83        alkuValikko.AddItemHandler(1, AloitaAlusta, 2);
84        alkuValikko.AddItemHandler(2, ParhaatAjat);
85        alkuValikko.AddItemHandler(3, Exit);
86
87    }
88
89
90    void AloitaAlusta(int pelaajienMaara)
91    {
92        ClearAll();
93
94
95        SmoothTextures = false;
96
97        Luokentta();
98        LisaaMaaliViiva();
99
100        LisaaRataPisteet(200, 20, 600, 0, "oikea");
101        LisaaRataPisteet(20, 200, 50, -300, "ala");
102        LisaaRataPisteet(200, 20, -530, 160, "vasen");
103
104
105        auto1 = TeeAuto(new Vector(0, 300));
106        autot.Add(auto1);
107
108        if (pelaajienMaara == 2)
109        {
110            auto2 = TeeAuto(new Vector(0, 330));
111            autot.Add(auto2);
112        }
113
114        AsetaOhjaimet(pelaajienMaara);
115
116
117        Camera.ZoomToLevel();
118
119        LisaaAjastimet();
120        LuoAikaLaskuri();
121    }
122
123
124    void ParhaatAjat()
125    {
126        HighScoreWindow topIkkuna = new HighScoreWindow(
127                              "Parhaat ajat",
128                              topLista);
129        topIkkuna.Closed += TallennaAjat;
130        Add(topIkkuna);
131    }
132
133
134    void Luokentta()
135    {
136        tie = new RoadMap(reittiPisteet);
137        tie.DefaultWidth = 200.0;
138        tie.Insert();
139
140       // Level.Background.CreateStars();
141        Level.Background.Color = Color.Green;
142        Level.Size = Screen.Size;
143        Level.CreateBorders(0.5, false);
144    }
145
146
147    Auto TeeAuto(Vector paikka)
148    {
149        Auto auto = new Auto(35.0, 20.0);
150        Add(auto);
151        auto.Position = paikka;
152        auto.Image = autoKuva;
153        auto.AngularDamping = 0.95;
154        //auto.MomentOfInertia = 400;
155        auto.TopSpeed = 10;
156        auto.Acceleration = 200;
157        auto.BrakeDeceleration = 600;
158
159        AddCollisionHandler<Auto, PhysicsObject>(auto, "maali", TuliMaaliin);
160        AddCollisionHandler<Auto, PhysicsObject>(auto, "oikea", delegate { auto.osuttuOikeaanViivaan = true; });
161        AddCollisionHandler<Auto, PhysicsObject>(auto, "ala", delegate { auto.osuttuAlaViivaan = true; });
162        AddCollisionHandler<Auto, PhysicsObject>(auto, "vasen", delegate { auto.osuttuVasempaanViivaan = true; });
163        return auto;
164    }
165
166
167    void AsetaOhjaimet(int pelaajienMaara)
168    {
169        Keyboard.Listen(Key.D, ButtonState.Down, KaannaPelaajaa, null, auto1, -2000.0);
170        Keyboard.Listen(Key.A, ButtonState.Down, KaannaPelaajaa, null, auto1, 2000.0);
171        Keyboard.Listen(Key.W, ButtonState.Down, KaasutaPelaajaa, null, auto1);
172        Keyboard.Listen(Key.S, ButtonState.Down, TaaksepainPelaajaa, null, auto1);
173        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
174        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Alkuvalikko, "Menee Alkuvalikkoon");
175        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaAlusta, "Aloittaa Pelin Alusta", pelaajienMaara);
176
177        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, null);
178        //ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, KaasutaAutolla, "Käytä oikeaa liipasinta kaasupolkimen tavoin.");
179
180        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, KaannaPelaajaa, null, auto1, 2000.0);
181        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, KaannaPelaajaa, null, auto1, -2000.0);
182        ControllerOne.Listen(Button.A, ButtonState.Down, KaasutaPelaajaa, null, auto1);
183        ControllerOne.Listen(Button.X, ButtonState.Down, TaaksepainPelaajaa, null, auto1);
184
185
186
187        if (pelaajienMaara == 1) return;
188
189        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaPelaajaa, null, auto2, -2000.0);
190        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaPelaajaa, null, auto2, 2000.0);
191        Keyboard.Listen(Key.Up, ButtonState.Down, KaasutaPelaajaa, null, auto2);
192        Keyboard.Listen(Key.Down, ButtonState.Down, TaaksepainPelaajaa, null, auto2);
193    }
194
195
196    void LiikutaPelaajaa(Automobile auto, Vector vektori)
197    {
198        auto.Push(vektori);
199    }
200
201    void KaannaPelaajaa(Automobile auto, double kulma)
202    {
203        //moottoripyora.Angle += kulma;
204        auto.ApplyTorque(kulma);
205    }
206
207    void KaasutaPelaajaa(Automobile auto)
208    {
209        auto.Accelerate();
210    }
211
212    void TaaksepainPelaajaa(Automobile auto)
213    {
214        auto.Brake();
215       
216    }
217
218
219    void LuoMerkki(Vector paikka)
220    {
221        PhysicsObject palikka = new PhysicsObject(10.0, 10.0);
222        Add(palikka);
223        palikka.Position = paikka;
224        palikka.Color = Color.Black;
225    }
226
227    //void LuoKaide()
228    //{
229    //    RoadMap kaide = new RoadMap(kaidePisteet);
230    //    kaide.DefaultWidth = 30.0;
231    //    kaide.CreateSegmentFunction = LuoKaiteenPatka;
232    //    kaide.Insert();
233    //}
234
235    //PhysicsObject LuoKaiteenPatka(double width, double height, Shape shape)
236    //{
237    //    PhysicsObject patka = PhysicsObject.CreateStaticObject(width, height, shape);
238    //    patka.Color = Color.Brown;
239    //    Add(patka);
240    //    return patka;
241    //}
242
243
244    void LisaaMaaliViiva()
245    {
246        PhysicsObject maali = PhysicsObject.CreateStaticObject(20, 200);
247        maali.Color = Color.White;
248        maali.Position = new Vector(0, 300);
249        maali.IgnoresCollisionResponse = true;
250        maali.Tag = "maali";
251        Add(maali);
252    }
253
254
255    void LisaaRataPisteet(int leveys, int korkeus, int paikkaX, int paikkaY, string tag)
256    {
257        PhysicsObject viiva = new PhysicsObject(leveys, korkeus);
258        viiva.IsVisible = false;
259        viiva.Position = new Vector(paikkaX, paikkaY);
260        viiva.IgnoresCollisionResponse = true;
261        viiva.Tag = tag;
262        Add(viiva);
263    }
264
265    void LisaaAjastimet()
266    {
267        Timer ajastin = new Timer();
268        ajastin.Interval = 0.1;
269        ajastin.Timeout += AsetaAutojenNopedet;
270        ajastin.Start();
271    }
272
273
274    void AsetaAutojenNopedet()
275    {
276        foreach (Auto auto in autot)
277        {
278            if (tie.IsInside(auto.Position))
279            {
280                auto.MaxVelocity = 1000;
281            }
282
283            else
284            {
285                auto.MaxVelocity = 100;
286            }
287        }
288    }
289
290
291    void LuoAikaLaskuri()
292    {
293        aikaLaskuri = new Timer();
294        aikaLaskuri.Start();
295
296        Label aikaNaytto = new Label();
297        aikaNaytto.TextColor = Color.Black;
298        aikaNaytto.DecimalPlaces = 1;
299        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
300        aikaNaytto.Position = new Vector(Screen.Right - 40, Screen.Top - 40);
301        Add(aikaNaytto);
302    }
303
304
305    void TuliMaaliin(Auto auto, PhysicsObject maali)
306    {
307        if (auto.osuttuAlaViivaan && auto.osuttuOikeaanViivaan && auto.osuttuVasempaanViivaan)
308        {
309            aikaLaskuri.Stop();
310            MessageDisplay.Add("MAALI!");
311            RemoveCollisionHandlers(null, null, "maali", null);
312            HighScoreWindow topIkkuna = new HighScoreWindow(
313                             "Parhaat pisteet",
314                             "Onneksi olkoon, pääsit listalle ajalla {0:0.00}s! Syötä nimesi:",
315                             topLista, aikaLaskuri.CurrentTime);
316            topIkkuna.Closed += TallennaAjat;
317            Add(topIkkuna);
318        }
319    }
320
321
322    void TallennaAjat(Window sender)
323    {
324        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
325        Alkuvalikko();
326    }
327   
328   
329    void LiikutaPelaajaa(AnalogState tatinTila)
330    {
331        Vector tatinAsento = tatinTila.StateVector;
332        if (tatinAsento.X < 0) auto1.ApplyTorque(1500);
333        else auto1.ApplyTorque(-1500);
334   
335    }
336
337    //void KaasutaAutolla(AnalogState liipasimenTila)
338    //{
339    //    double liipasimenAsento = liipasimenTila.State;
340
341    //}
342
343    void LiikutaPelaajaa(Vector vektori, PhysicsObject pelaaja)
344    {
345        pelaaja.Push(vektori);
346    }
347
348
349
350}
Note: See TracBrowser for help on using the repository browser.