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

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