source: 2013/27/JesseK/LMRaing2D/LMRaing2D/LMRaing2D/LMRacing2D.cs @ 4481

Revision 4481, 13.2 KB checked in by jehekyyt, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class LMRaing2D : PhysicsGame
10{
11
12    Image Audi = LoadImage("AudiR18");
13    Image Toyota = LoadImage("ToyotaTS031");
14    Image Tausta = LoadImage("TS031R18");
15   
16
17    Racer Pelaaja1;
18    Racer Pelaaja2;
19    Racer Pelaaja3;
20    Racer pelaajaCpu1;
21    Racer pelaajaCpu2;
22    int kenttaNro = 2;
23
24    List<VectorPoint> polku;
25
26
27    Vector[] ReittiPisteet
28        //=
29        //{
30        //new Vector (800, -30),
31        //new Vector (500.0, -30.0),
32        //new Vector ( 0.0, -30.0),
33        //new Vector (-500.0, -30.0),
34        //new Vector (-500.0, -400),
35        //new Vector (-800.0, -400),
36        //new Vector (-800.0, 160),
37        //new Vector (-700, 300),
38        //new Vector (-500, 400),
39
40        //new Vector (-100, 400),
41        //new Vector (500, 200),
42        //new Vector (800, -30)
43
44        //}
45        ;
46
47
48    public override void Begin()
49    {
50        SetWindowSize(1024, 768, false); 
51
52        polku = new List<VectorPoint>();
53        AloitusNaytto();
54        //AloitaKentta("kentta1");
55        //LuoRata();
56         MediaPlayer.Play  ("Music");
57         MediaPlayer.IsRepeating = true;
58    }
59
60    void AloitusNaytto()
61    {
62        ClearAll();
63        MultiSelectWindow alkuValikko = new MultiSelectWindow("F1=Ohjeet              LM Racing 2D          1-3 Pelaajaa",
64        "Aloita kilpailu", "Poistu");
65        Add(alkuValikko);
66        alkuValikko.AddItemHandler(0, delegate { 
67            AloitaKentta("kentta"+kenttaNro); 
68        });
69        alkuValikko.AddItemHandler(1, Exit);
70        Level.Background.Image = Tausta;
71    }
72
73    void AloitaKentta(string kentanNimi)
74    {
75        polku.Clear();
76        ClearAll();
77
78        LuoKentta(kentanNimi);
79        LuoPistelaskuri();
80        Keyboard.Listen(Key.Up, ButtonState.Down, Aja, "Pelaaja1, eteen", Pelaaja1, 5000.0);
81        Keyboard.Listen(Key.Down, ButtonState.Down, Aja, "Pelaaja1, Peruuta", Pelaaja1, -300.0);
82        Keyboard.Listen(Key.Right, ButtonState.Down, Käänny, "Pelaaja1, käänny oikealle", Pelaaja1, -20000.0);
83        Keyboard.Listen(Key.Left, ButtonState.Down, Käänny, "Pelaaja1, käänny vasemmalle", Pelaaja1, 20000.0);
84
85        Keyboard.Listen(Key.W, ButtonState.Down, Aja, "Pelaaja2, eteen", Pelaaja2, 5000.0);
86        Keyboard.Listen(Key.S, ButtonState.Down, Aja, "Pelaaja2, Peruuta", Pelaaja2, -300.0);
87        Keyboard.Listen(Key.D, ButtonState.Down, Käänny, "Pelaaja2, käänny oikealle", Pelaaja2, -20000.0);
88        Keyboard.Listen(Key.A, ButtonState.Down, Käänny, "Pelaaja2, käänny vasemmalle", Pelaaja2, 20000.0);
89
90        Keyboard.Listen(Key.NumPad8, ButtonState.Down, Aja, "Pelaaja3, eteen", Pelaaja3, 5000.0);
91        Keyboard.Listen(Key.NumPad5, ButtonState.Down, Aja, "Pelaaja3, Peruuta", Pelaaja3, -300.0);
92        Keyboard.Listen(Key.NumPad6, ButtonState.Down, Käänny, "Pelaaja3, käänny oikealle", Pelaaja3, -20000.0);
93        Keyboard.Listen(Key.NumPad4, ButtonState.Down, Käänny, "Pelaaja3, käänny vasemmalle", Pelaaja3, 20000.0);
94        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, null);
95
96
97        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
98        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
99    }
100
101
102    void Aja(PhysicsObject Auto, double nopeus)
103    {
104        Auto.Push(Vector.FromAngle(Auto.Angle + Angle.FromDegrees(90)) * nopeus);
105    }
106
107    void Käänny(PhysicsObject Auto, double suunta)
108    {
109        Auto.ApplyTorque(suunta);
110    }
111
112    void LuoRata()
113    {
114        RoadMap tie = new RoadMap(TeeVectorLista(polku));
115        tie.DefaultWidth = 200.0;
116        tie.Insert();
117    }
118
119    List<Vector> TeeVectorLista(List<VectorPoint> lista)
120    {
121        lista.Sort( (emp1, emp2) => emp1.jarjestys.CompareTo(emp2.jarjestys));
122        List<Vector> list = new List<Vector>();
123        foreach (var item in lista)
124        {
125            list.Add(item.vec);
126        }
127        return list;
128    }
129
130
131
132    void LuoKentta(string kentanNimi)
133    {
134
135
136        Level.BackgroundColor = Color.DarkGreen;
137
138       
139
140       if(kentanNimi.Equals("kentta1"))
141       {
142                   PhysicsObject Varikkomuuri = PhysicsObject.CreateStaticObject(800, 50);
143        Add(Varikkomuuri);
144        Varikkomuuri.X = 0;
145        Varikkomuuri.Y = -160;
146        Varikkomuuri.Color = Color.DarkGray;
147        PhysicsObject Muuri1 = PhysicsObject.CreateStaticObject(50, 300);
148        Add(Muuri1);
149        Muuri1.X = -600;
150        Muuri1.Y = -150;
151        Muuri1.Color = Color.DarkGray;
152        PhysicsObject VMpala1 = PhysicsObject.CreateStaticObject(50, 50);
153        Add(VMpala1);
154        VMpala1.X = -400;
155        VMpala1.Y = -230;
156        VMpala1.Color = Color.DarkGray;
157        PhysicsObject VMpala2 = PhysicsObject.CreateStaticObject(50, 50);
158        Add(VMpala2);
159        VMpala2.X = -400;
160        VMpala2.Y = -350;
161        VMpala2.Color = Color.DarkGray;
162        PhysicsObject Muuri2 = PhysicsObject.CreateStaticObject(800, 50);
163        Add(Muuri2);
164        Muuri2.X = -200;
165        Muuri2.Y = 100;
166        Muuri2.Color = Color.DarkGray;
167        PhysicsObject Muuri3 = PhysicsObject.CreateStaticObject(70, 70);
168        Add(Muuri3);
169        Muuri3.X = 400;
170        Muuri3.Y = 100;
171        Muuri3.Color = Color.DarkGray;
172        Muuri3.Shape = Shape.Circle;
173        PhysicsObject Varikkomuuri2 = PhysicsObject.CreateStaticObject(300, 50);
174        Add(Varikkomuuri2);
175        Varikkomuuri2.X = 700;
176        Varikkomuuri2.Y = -160;
177        Varikkomuuri2.Color = Color.DarkGray;
178        PhysicsObject Varikkomuuri3 = PhysicsObject.CreateStaticObject(800, 50);
179        Add(Varikkomuuri3);
180        Varikkomuuri3.X = 0;
181        Varikkomuuri3.Y = -400;
182        Varikkomuuri3.Color = Color.DarkGray;
183        PhysicsObject Varikkomuuri4 = PhysicsObject.CreateStaticObject(50, 300);
184        Add(Varikkomuuri4);
185        Varikkomuuri4.X = 550;
186        Varikkomuuri4.Y = -285;
187        Varikkomuuri4.Color = Color.DarkGray;
188
189        PhysicsObject maaliViiva = PhysicsObject.CreateStaticObject(100, 400);
190        maaliViiva.Position = new Vector(100, 0);
191        maaliViiva.Color = Color.Transparent;
192        maaliViiva.Tag = "maali";
193        maaliViiva.IgnoresCollisionResponse = true;
194        Add(maaliViiva);
195
196
197        polku.Add(new VectorPoint(800,      -30,0));
198        polku.Add(new VectorPoint(500.0,    -30.0, 1));
199        polku.Add(new VectorPoint(0.0,      -30.0, 2));
200        polku.Add(new VectorPoint(-500.0,    -30.0, 3));
201        polku.Add(new VectorPoint(-500.0,    -400, 4));
202        polku.Add(new VectorPoint(-800.0,    -400, 5));
203        polku.Add(new VectorPoint(-800.0,     160, 6));
204        polku.Add(new VectorPoint(-700,      300, 7));
205        polku.Add(new VectorPoint(-500,     400, 8));
206        polku.Add(new VectorPoint(-100,      400, 9));
207        polku.Add(new VectorPoint(500,   200, 10));
208        polku.Add(new VectorPoint(800, -    30, 11));
209
210        Camera.ZoomToAllObjects(200);
211
212
213        Pelaaja1 = LuoAuto(new Vector(50, -230), Audi, false);
214        Pelaaja2 = LuoAuto(new Vector(100, -230), Audi, false);
215        Pelaaja3 = LuoAuto(new Vector(0, -230), Audi, false);
216        pelaajaCpu1 = LuoAutoCPU(new Vector(100, 0), Toyota);
217        pelaajaCpu2 = LuoAutoCPU(new Vector(0, 0), Toyota);
218       }
219       else
220       {
221        ColorTileMap kentta = new ColorTileMap(kentanNimi);
222        kentta.ColorTolerance = 0;
223        kentta.SetTileMethod(Color.Black, LuoSeina);
224        kentta.SetTileMethod(Color.Blue, LuoTarkistusPiste);
225       
226       
227        for (int i = 0; i < 10; i++)
228        {
229            VectorPoint vec = new VectorPoint(i);
230            kentta.SetTileMethod("00FF0" + i, delegate(Vector paikka, double leveys, double korkeus) { vec.vec = paikka; LisaaReittiPiste(vec); });
231        }
232        kentta.Optimize(Color.Black);
233        kentta.Execute(40, 40);
234
235        Pelaaja1 = LuoAuto(new Vector(50, -230), Audi, false);
236        Pelaaja2 = LuoAuto(new Vector(100, -230), Audi, false);
237        Pelaaja3 = LuoAuto(new Vector(0, -230), Audi, false);
238        pelaajaCpu1 = LuoAutoCPU(new Vector(500, -600), Toyota);
239        pelaajaCpu2 = LuoAutoCPU(new Vector(400, -600), Toyota);
240        Camera.ZoomToAllObjects(200);
241
242        Level.BackgroundColor = Color.Gray;
243       }
244
245        LuoRata();
246
247
248
249
250       
251
252
253       
254
255
256    }
257
258
259    void LisaaReittiPiste(VectorPoint dum)
260    {
261        polku.Add(dum);
262    }
263
264    void LuoSeina(Vector paikka, double leveys, double korkeus)
265    {
266        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
267        seina.Position = paikka;
268        seina.Color = Color.Black;
269        Add(seina);
270
271    }
272   
273    void LuoTarkistusPiste(Vector paikka, double leveys, double korkeus)
274    {
275        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
276        seina.Position = paikka;
277        seina.Color = Color.Blue;
278        seina.IgnoresCollisionResponse = true;
279        Add(seina);
280    }
281
282
283
284    Racer LuoAuto(Vector paikka, Image kuva, bool cpu)
285    {
286        Racer Auto = new Racer(40, 90, TeeVectorLista(polku), cpu);
287        Auto.Image = kuva;
288        Auto.Position = paikka;
289        Auto.AngularDamping = 0.9;
290        Auto.LinearDamping = 0.9;
291
292        Auto.Kierrokset.UpperLimit += delegate { 
293            MessageDisplay.Add("Peli päättyi. Onnea voittajalle!   Valmistaudu uuteen peliin (5s.)");
294
295            Pelaaja1.Destroy();
296            Pelaaja2.Destroy();
297            Pelaaja3.Destroy();
298            pelaajaCpu1.Destroy();
299            pelaajaCpu2.Destroy();
300
301            Timer.SingleShot(5.0, delegate
302            {
303                IsPaused = false;
304                kenttaNro++;
305                if (kenttaNro == 3)
306                {
307                    kenttaNro = 1;
308                    Begin();
309                    return;
310                }
311                AloitaKentta("kentta2");
312               
313            }
314            );
315        };
316        Add(Auto);
317        return Auto;
318    }
319
320    Racer LuoAutoCPU(Vector paikka, Image kuva)
321    {
322        Racer Auto = LuoAuto(paikka, kuva, true);
323        Auto.AngularDamping = 0.9;
324        Auto.LinearDamping = 0.9;
325        PathFollowerBrain polkuAivot = new PathFollowerBrain();
326        polkuAivot.Path = TeeVectorLista(polku);
327        polkuAivot.Loop = true;
328        polkuAivot.Speed = RandomGen.NextDouble(500, 700);
329        Auto.Brain = polkuAivot;
330
331        return Auto;
332    }
333
334    IntMeter pisteLaskuri;
335
336    void LuoPistelaskuri()
337    {
338        int juokseva =0;
339
340        LuoLaskuri(Pelaaja1.Kierrokset,    Screen.Right - 70, Screen.Top - (10+ juokseva++*30),    "Pelaaja1" + " {0}");
341        LuoLaskuri(Pelaaja2.Kierrokset,    Screen.Right - 70, Screen.Top - (10 + juokseva++ * 30), "Pelaaja2" + " {0}");
342        LuoLaskuri(Pelaaja3.Kierrokset,    Screen.Right - 70, Screen.Top - (10 + juokseva++ * 30), "Pelaaja3" + " {0}");
343        LuoLaskuri(pelaajaCpu1.Kierrokset, Screen.Right - 70, Screen.Top - (10 + juokseva++ * 30), "Al1"      + " {0}");
344        LuoLaskuri(pelaajaCpu2.Kierrokset, Screen.Right - 70, Screen.Top - (10 + juokseva++ * 30), "Al2"      + " {0}");
345    }
346
347
348    void LuoLaskuri(IntMeter kierrokset, double x, double y, string format)
349    {
350
351        Label pisteNaytto = new Label();
352        pisteNaytto.X = x;
353        pisteNaytto.Y = y;
354        pisteNaytto.TextColor = Color.Red;
355       
356        pisteNaytto.Color = Color.Transparent; ;
357        pisteNaytto.BindTo(kierrokset);
358        pisteNaytto.IntFormatString = format;
359
360        Add(pisteNaytto);
361    }
362
363
364    protected override void Update(Time time)
365    {
366        base.Update(time);
367    }
368
369
370}
371
372public class Racer : PhysicsObject
373{
374    IntMeter kierrokset;
375    int nykyinenPoint = 0;
376    List<Vector> tarkistusPisteet;
377
378    bool cpu;
379
380    public IntMeter Kierrokset { get { return kierrokset; } }
381
382    public Racer(double leveys, double korkeus, List<Vector> tarkistusPisteet, bool cpu)
383        : base(leveys, korkeus)
384    {
385        kierrokset = new IntMeter(0, 0, 10);
386        this.IsUpdated = true;
387        this.tarkistusPisteet = tarkistusPisteet;
388        this.cpu = cpu;
389        //this.IsUpdated = true;
390    }
391
392    Vector Seuraava()
393    {
394        if (nykyinenPoint >= tarkistusPisteet.Count - 1)
395        {
396            nykyinenPoint = 0;
397            kierrokset.Value++;
398        }
399        else nykyinenPoint++;
400        return tarkistusPisteet[nykyinenPoint];
401    }
402
403
404    public override void Update(Time time)
405    {
406        if (tarkistusPisteet.Count > 0)
407        {
408            if (Vector.Distance(Position, tarkistusPisteet[nykyinenPoint]) <= 200) Seuraava();
409        }
410
411        if(cpu)
412            Angle += ((Velocity.Angle - Angle.FromDegrees(90)) - Angle) * 0.3;
413       
414        base.Update(time);
415    }
416
417   
418}
419
420public class VectorPoint
421{
422    public int jarjestys;
423    public Vector vec;
424
425    public VectorPoint(int jarjestys)
426    {
427        this.jarjestys = jarjestys;
428    }
429
430    public VectorPoint(double x, double y, int jarjestys)
431    {
432        vec = new Vector(x, y);
433        this.jarjestys = jarjestys;
434    }
435
436   
437}
Note: See TracBrowser for help on using the repository browser.