source: 2013/24/JoonasE/Mastermind/Mastermind/Mastermind/Mastermind.cs @ 4122

Revision 4122, 13.8 KB checked in by joalerho, 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 Maali : PhysicsObject
10
11{
12    public bool pelaajaMaalissa = false;
13    public Maali(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16        IsUpdated = true;
17    }
18
19    public List<GameObject> PelaajatLahella(List<GameObject> oliot, double maxEtaisyys)
20    {
21        List<GameObject> pelaajatLahella = oliot.FindAll(x => x is Pelaaja && Vector.Distance(x.Position, this.Position) < maxEtaisyys);
22        return pelaajatLahella;
23    }
24
25    public override void Update(Time time)
26    {
27
28        base.Update(time);
29    }
30}
31
32public class Pelaaja : PlatformCharacter
33{
34    public bool onkoMaalissa = false;
35    public Vector aloituspaikka;
36
37    public Pelaaja(double leveys, double korkeus)
38        : base(leveys, korkeus)
39    {
40    }
41}
42
43public class Mastermind : PhysicsGame
44{
45   
46   
47
48    int kenttaNro = 1;
49
50    const double nopeus = 200;
51    const double hyppyNopeus = 750;
52    const int RUUDUN_KOKO = 40;
53
54    List<Pelaaja> pelaajat;
55    Pelaaja pelaaja1;
56    Pelaaja pelaaja2;
57
58    bool pelaaja1Maalissa = false;
59    bool pelaaja2Maalissa = false;
60
61    Animation pelaajanKuva2;
62    Animation pelaajanKuva;
63    Animation maaliAnim;
64    Image tahtiKuva = LoadImage("tahti");
65    Image maa = LoadImage("block");
66    Image vaara = LoadImage("Danger block");
67    Image tausta = LoadImage("Tausta");
68    Image pääTausta = LoadImage("Taustakuva");
69    Image nappula = LoadImage("nappula");
70    Image taustuliini = LoadImage("taustablur");
71   
72
73    SoundEffect maaliAani = LoadSoundEffect("maali");
74
75    public override void Begin()
76    {
77        IsFullScreen = true;
78        Level.Size = new Vector(1000, 800);
79        Level.Background.Image = pääTausta;
80        Camera.ZoomToLevel();
81        //Level.Background.TextureWrapSize = new Vector(Level.Width, Level.Height);
82        Level.Background.FitToLevel();
83        PääValikko();
84
85        MediaPlayer.Play("musa");
86        MediaPlayer.IsRepeating = true;
87
88    }
89
90    void PääValikko()
91    {
92        MultiSelectWindow alkuValikko = new MultiSelectWindow("", "Aloita","Kentät", "Lopeta");
93        alkuValikko.AddItemHandler(0, AloitaAlusta);
94        alkuValikko.AddItemHandler(1, KysyKentta);
95        alkuValikko.AddItemHandler(2, Exit);
96
97        foreach (var item in alkuValikko.Buttons)
98        {
99            item.Image = nappula;
100        }
101        //alkuValikko.Buttons[0].Image = nappula;
102        //alkuValikko.Buttons[1].Image = nappula;
103        //alkuValikko.Buttons[2].Image = nappula;
104
105        alkuValikko.Image = tausta;
106        Add(alkuValikko);
107
108
109       
110    }
111
112
113    void KysyKentta()
114    {
115        MultiSelectWindow kenttaValikko = new MultiSelectWindow("", "Taso 1", "Taso 2", "Taso 3", "Taso 4", "Taso 5", "Taso 6", "Taso 7", "Taso 8", "Taso 9", "Taso 10", "Taso 11", "Taso 12", "Taso 13", "Taso 14", "Taso 15",
116            "Taso 16", "Taso 17", "Taso 18", "Taso 19", "Taso 20", "Taso 21", "Taso 22", "Taso 23", "Taso 24", "Taso 25", "Taso 26", "Taso 27", "Taso 28", "Taso 29", "Taso 30");
117
118        RowLayout layout = new RowLayout();
119        layout.TargetWidth = 1000;
120        kenttaValikko.Layout = layout;
121       
122       
123        kenttaValikko.ItemSelected += KenttaValittu;
124        Add(kenttaValikko);
125
126        kenttaValikko.Image = tausta;
127        foreach (var item in kenttaValikko.Buttons)
128        {
129            item.Image = nappula;
130        }
131    }
132
133
134    void KenttaValittu(int valinta)
135    {
136        kenttaNro = valinta+1;
137        SeuraavaKentta();
138    }
139
140
141    void AloitaAlusta()
142    {
143        ClearAll();
144        //Gravity = new Vector(0, -1000);
145       
146
147        SeuraavaKentta();
148     
149        // Camera.StayInLevel = true;
150        Camera.Follow(pelaaja1, pelaaja2);//, pelaaja2);
151    }
152
153
154    void SeuraavaKentta()
155    {
156        ClearAll();
157        pelaajat = new List<Pelaaja>();
158        pelaajat.Clear(); pelaajanKuva2 = LoadAnimation("stillblue");
159        pelaajanKuva = LoadAnimation("still");
160        maaliAnim = LoadAnimation("maali");
161
162        Gravity = new Vector(0, -1000);
163
164        if (kenttaNro == 1) LuoKentta("kentta1");
165        else if (kenttaNro == 2) LuoKentta("kentta2");
166        else if (kenttaNro == 3) LuoKentta("kentta3");
167        else if (kenttaNro == 4) LuoKentta("kentta4");
168        else if (kenttaNro == 5) LuoKentta("kentta5");
169        else if (kenttaNro == 6) LuoKentta("kentta6");
170        else if (kenttaNro == 7) LuoKentta("kentta7");
171        else if (kenttaNro == 8) LuoKentta("kentta8");
172        else if (kenttaNro == 9) LuoKentta("kentta9");
173        else if (kenttaNro == 10) LuoKentta("kentta10");
174        else if (kenttaNro == 11) LuoKentta("kentta11");
175        else if (kenttaNro == 12) LuoKentta("kentta12");
176        else if (kenttaNro == 13) LuoKentta("kentta13");
177        else if (kenttaNro == 14) LuoKentta("kentta14");
178        else if (kenttaNro == 15) LuoKentta("kentta15");
179        else if (kenttaNro == 16) LuoKentta("kentta16");
180        else if (kenttaNro == 17) LuoKentta("kentta17");
181        else if (kenttaNro == 18) LuoKentta("kentta18");
182        else if (kenttaNro == 19) LuoKentta("kentta19");
183        else if (kenttaNro == 20) LuoKentta("kentta20");
184        else if (kenttaNro == 21) LuoKentta("kentta21");
185        else if (kenttaNro == 22) LuoKentta("kentta22");
186        else if (kenttaNro == 23) LuoKentta("kentta23");
187        else if (kenttaNro == 24) LuoKentta("kentta24");
188        else if (kenttaNro == 25) LuoKentta("kentta25");
189        else if (kenttaNro == 26) LuoKentta("kentta26");
190        else if (kenttaNro == 27) LuoKentta("kentta27");
191        else if (kenttaNro == 28) LuoKentta("kentta28");
192        else if (kenttaNro == 29) LuoKentta("kentta29");
193        else if (kenttaNro == 30) LuoKentta("kentta30");
194        else if (kenttaNro > 30) Exit();
195        LisaaNappaimet();
196        Camera.Follow(pelaaja1, pelaaja2);
197
198    }
199
200    void LuoKentta(string kenttaTiedostonNimi)
201    {
202        pelaaja1 = new Pelaaja(1, 1);
203        pelaaja2 = new Pelaaja(1, 1);
204        pelaajat.Add(pelaaja1);
205        pelaajat.Add(pelaaja2);
206
207        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi);
208        kentta.SetTileMethod('#', LisaaTaso);
209        kentta.SetTileMethod('*', LisaaTahti);
210        kentta.SetTileMethod('V', LisaaVTaso);
211        kentta.SetTileMethod('G', LisaaMaali, pelaaja1);
212        kentta.SetTileMethod('g', LisaaMaali, pelaaja2);
213        kentta.SetTileMethod('A', LisaaPelaaja, pelaaja1, pelaajanKuva);
214        kentta.SetTileMethod('B', LisaaPelaaja, pelaaja2, pelaajanKuva2);
215        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
216        Level.CreateBorders();
217        Level.Background.Image = taustuliini;
218        Level.Background.TileToLevel();
219        Level.BackgroundColor = Color.Gray;
220
221    }
222
223    void LisaaTaso(Vector paikka, double leveys, double korkeus)
224    {
225        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
226        taso.Position = paikka;
227        taso.Color = Color.Green;
228        taso.Image = maa;
229        Add(taso);
230    }
231
232
233    void LisaaTahti(Vector paikka, double leveys, double korkeus)
234    {
235        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
236        tahti.IgnoresCollisionResponse = true;
237        tahti.Position = paikka;
238        tahti.Image = tahtiKuva;
239        tahti.Tag = "tahti";
240        Add(tahti);
241    }
242
243    void LisaaMaali(Vector paikka, double leveys, double korkeus, Pelaaja pelaaja)
244    {
245        Maali maali = new Maali(leveys, korkeus);
246        maali.MakeStatic();
247        maali.Position = paikka;
248        maali.Animation = maaliAnim;
249        maali.Animation.Start();
250        maali.Tag = "maali";
251        Timer ajastin = new Timer();
252        ajastin.Interval = 0.5;
253        ajastin.Timeout +=
254             delegate
255             {
256                 List<GameObject> pelaajat = maali.PelaajatLahella(GetObjects(x => true), leveys * 2);
257                 if (pelaajat.Count == 0)
258                 {
259                     pelaaja.onkoMaalissa = false;
260                     return;
261                 }
262                 Pelaaja p = (Pelaaja)pelaajat[0];
263                 if (p == pelaaja)
264                 {
265                     pelaaja.onkoMaalissa = true;
266                     if (this.pelaajat.TrueForAll(x => x.onkoMaalissa))
267                     {
268                         MessageDisplay.Add("Kenttä selvitetty!");
269                         ajastin.Stop();
270                         // kenttaNro++;
271                         KenttäValikko();
272                         //SeuraavaKentta();
273
274                         return;
275                     }
276                 }
277             };
278        ajastin.Start();
279        Add(maali);
280
281    }
282
283    void LisaaPelaaja(Vector paikka, double leveys, double korkeus, Pelaaja pelaaja, Animation animaatio) //, PlatformCharacter pelaaja, Animation paikallaan, Animation kavely)
284    {
285        pelaaja.Size = new Vector(leveys * 0.8, korkeus * 0.8);
286        pelaaja.aloituspaikka = paikka;
287        pelaaja.Position = paikka;
288        pelaaja.Mass = 4.0;
289        pelaaja.Animation = animaatio;
290        pelaaja.Animation.Start();
291        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja, "vaara", TormaaVaaraan);
292        // AddCollisionHandler(pelaaja, "maali", maaliinPaasy);
293        Add(pelaaja);
294    }
295
296    //void LisaaPelaaja2(Vector paikka, double leveys, double korkeus) //, PlatformCharacter pelaaja, Animation paikallaan, Animation kavely)
297    //{
298    //    pelaaja2 = new Pelaaja(leveys * 0.8, korkeus * 0.8);
299    //    pelaaja2.Position = paikka;
300    //    pelaaja2.Mass = 4.0;
301    //    pelaaja2.Animation = pelaajanKuva2;
302    //    pelaaja2.Animation.Start();
303    //    AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja2, "tahti", TormaaTahteen);
304    //    AddCollisionHandler(pelaaja2, "maali", maaliinPaasy);
305    //    Add(pelaaja2);
306    //}
307
308    void LisaaVTaso(Vector paikka, double leveys, double korkeus)
309    {
310        PhysicsObject vtaso = PhysicsObject.CreateStaticObject(leveys, korkeus);
311        vtaso.Position = paikka;
312        vtaso.Color = Color.Purple;
313        vtaso.Image = vaara;
314        vtaso.Tag = "vaara";
315        Add(vtaso);
316
317    }
318
319    //void maaliinPaasy(PhysicsObject tormaaja, PhysicsObject kohde)
320    //{
321    //    if (tormaaja == pelaaja1)
322    //    {
323    //        pelaaja1Maalissa = true;
324    //    }
325    //    if (tormaaja == pelaaja2)
326    //    {
327    //        pelaaja2Maalissa = true;
328    //    }
329    //    if (pelaaja1Maalissa == true && pelaaja2Maalissa == true)
330    //    {
331    //        //MessageDisplay.Add("Selvitit kentän!");
332    //    }
333
334    //}
335
336
337
338    void LisaaNappaimet()
339    {
340        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
341        Keyboard.Listen(Key.Escape, ButtonState.Pressed, VäliValikko, "Valikko");
342
343        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
344        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
345        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
346
347        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
348        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
349        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
350
351        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
352
353        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
354        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
355        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
356
357        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
358    }
359
360    void Liikuta(Pelaaja hahmo, double nopeus)
361    {
362        hahmo.Walk(nopeus);
363    }
364
365    void Hyppaa(Pelaaja hahmo, double nopeus)
366    {
367        hahmo.Jump(nopeus);
368    }
369
370    void TormaaVaaraan(Pelaaja pelaaja, PhysicsObject vtaso)
371    {
372        //AloitaAlusta();
373        pelaajat.ForEach(x => x.Position = x.aloituspaikka);
374        MessageDisplay.Add("Yritä uudestaan!");
375       
376    }
377
378    void VäliValikko()
379    {
380        MultiSelectWindow väliValikko = new MultiSelectWindow("Välivalikko", "Jatka", "Aloita alusta", "Lopeta");
381        väliValikko.Image = LoadImage("norsu");
382        //alkuValikko.AddItemHandler(0, AloitaAlusta);
383        väliValikko.AddItemHandler(1, AloitaAlusta);
384        väliValikko.AddItemHandler(2, delegate {
385            ClearAll();
386            Begin();
387        });
388
389        väliValikko.Buttons[0].Image = nappula;
390        väliValikko.Buttons[1].Image = nappula;
391        väliValikko.Buttons[2].Image = nappula;
392
393        väliValikko.Image = tausta;
394        Add(väliValikko);
395    }
396
397    void KenttäValikko()
398    {
399        MultiSelectWindow kenttäValikko = new MultiSelectWindow("Kenttä selvitetty!", "Seuraava", "Uudestaan", "Lopeta");
400        kenttäValikko.AddItemHandler(0, delegate { ++kenttaNro; SeuraavaKentta(); });
401        kenttäValikko.AddItemHandler(1, AloitaAlusta);
402        kenttäValikko.AddItemHandler(2, delegate { 
403            ClearAll(); 
404            Begin(); } 
405            );
406
407        kenttäValikko.Buttons[0].Image = nappula;
408        kenttäValikko.Buttons[1].Image = nappula;
409        kenttäValikko.Buttons[2].Image = nappula;
410
411        kenttäValikko.Image = tausta;
412        Add(kenttäValikko);
413    }
414}
Note: See TracBrowser for help on using the repository browser.