source: 2013/24/NicoL/Mastermind/Mastermind/Mastermind/Mastermind.cs @ 4146

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