source: 2015/24/AleksiS/CandyLand/CandyLand/CandyLand/CandyLand.cs @ 6052

Revision 6052, 9.2 KB checked in by laaljoso, 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 CandyLand : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    PlatformCharacter vihollinen;
17    String kenttaNimi = "kentta1";
18
19    Image taustakuva = LoadImage("CandyLandBackgroundImage");
20    Image pelaajanKuva = LoadImage("tikku-ukko");
21    Image KarkinKuva = LoadImage("YellowCandy");
22    Image vihollisenKuva = LoadImage("CandyThief");
23
24    SoundEffect maaliAani = LoadSoundEffect("maali");
25    Label pisteNaytto;
26    IntMeter pisteLaskuri;
27    DoubleMeter alaspainLaskuri;
28
29    Timer aikaLaskuri;
30
31    EasyHighScore topLista = new EasyHighScore();
32
33
34    MultiSelectWindow alkuValikko;
35
36    public override void Begin()
37    {
38        ClearAll();
39        alkuValikko = new MultiSelectWindow("Candy Land", "Pelaa", "Info", "Lopeta");
40        alkuValikko.ActiveColor = Color.Yellow;
41        Add(alkuValikko);
42        alkuValikko.AddItemHandler(0, Tarina);
43        alkuValikko.AddItemHandler(1, Info);
44        alkuValikko.AddItemHandler(2, Exit);
45    }
46
47    void Pelaa()
48    {
49        ClearAll();
50        Level.Width = Screen.Width;
51        Level.Height = Screen.Height;
52        Camera.Follow(pelaaja1);
53        Gravity = new Vector(0, -1000);
54
55       // Level.Background.Image = taustakuva;
56        GameObject tausta = new GameObject(Level.Width * 0.5, Level.Height);
57        tausta.Image = taustakuva;
58        Add(tausta, -2);
59
60        LuoPisteLaskuri();
61        LuoAikaLaskuri();
62
63        LuoKentta();
64        LisaaNappaimet();
65
66        Camera.Follow(pelaaja1);
67        Camera.ZoomFactor = 1.2;
68        Camera.StayInLevel = true;
69
70    }
71
72    void Tarina()
73
74    {
75        Label a = new Label("Candy Land on sekasorron tilassa. Kaikki karkit ovat loppuneet.");
76        Label b = new Label("Auta Candy Landin asukkaita karkkien keräämisessä ja puolusta kylää Candy Thiefiltä, jotta Candy Landin asukkaat voivat jatkaa elämäänsä normaalisti.");
77
78        a.Position = new Vector(0, Screen.TopSafe - 50);
79        b.Position = new Vector(0, Screen.TopSafe - 80);
80
81
82        Add(a);
83        Add(b);
84
85        MultiSelectWindow aloita = new MultiSelectWindow("", "Aloita peli");
86        aloita.AddItemHandler(0, Pelaa);
87        Add(aloita);
88
89    }
90
91    void Info()
92    {
93        Label a = new Label("Candy Land, versio 1.0");
94        Label b = new Label("Copyright 2015 Aleksis Games by Aleksi Soikkala");
95        Label c = new Label("Pelin tiedot ja päivitykset: http://aleksis-games.webnode.fi/pelit/candyland");
96        Label d = new Label("Aleksis Gamesin nettisivut: http://aleksis-games.webnode.fi");
97
98        a.Position = new Vector(0, Screen.TopSafe - 50);
99        b.Position = new Vector(0, Screen.TopSafe - 80);
100        c.Position = new Vector(0, Screen.TopSafe - 110);
101        d.Position = new Vector(0, Screen.TopSafe - 140);
102
103        Add(a);
104        Add(b);
105        Add(c);
106        Add(d);
107
108        MultiSelectWindow takaisin = new MultiSelectWindow("", "Takaisin");
109        takaisin.AddItemHandler(0, Begin);
110        Add(takaisin);
111    }
112
113
114
115    void LuoKentta()
116    {
117        TileMap kentta = TileMap.FromLevelAsset(kenttaNimi);
118        kentta.SetTileMethod('#', LisaaTaso);
119        kentta.SetTileMethod('*', LisaaTahti);
120        kentta.SetTileMethod('N', LisaaPelaaja);
121        kentta.SetTileMethod('V', LisaaVihollinen);
122        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
123        Level.CreateBorders();
124        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
125    }
126
127
128
129    void LuoPisteLaskuri()
130    {
131        pisteLaskuri = new IntMeter(0, 0, 0);
132        pisteLaskuri.UpperLimit += VoititPelin;
133
134        pisteNaytto = new Label();
135        pisteNaytto.X = Screen.Left + 150;
136        pisteNaytto.Y = Screen.Top - 100;
137        pisteNaytto.TextColor = Color.Black;
138        pisteNaytto.Color = Color.White;
139        pisteNaytto.Title = "Karkit";
140
141
142
143        pisteNaytto.BindTo(pisteLaskuri);
144        Add(pisteNaytto);
145
146
147    }
148
149    void VoititPelin()
150    {
151
152        MessageDisplay.Add("Voitit pelin!");
153        topLista.EnterAndShow(pisteLaskuri.Value);
154        kenttaNimi = "kentta2";
155        topLista.HighScoreWindow.Closed += delegate(Window sender) { Pelaa(); };
156
157    }
158
159        void LuoAikaLaskuri()
160        {
161            alaspainLaskuri = new DoubleMeter (300);
162
163            aikaLaskuri = new Timer();
164            aikaLaskuri.Interval = 0.1;
165            aikaLaskuri.Timeout += LaskeAlaspain;
166            aikaLaskuri.Start();
167
168            Label aikaNaytto = new Label();
169            aikaNaytto.X = Screen.Right - 150;
170            aikaNaytto.Y = Screen.Top - 100;
171            aikaNaytto.TextColor = Color.Black;
172            aikaNaytto.Color = Color.White;
173            aikaNaytto.DecimalPlaces = 1;
174            aikaNaytto.BindTo(alaspainLaskuri);
175            Add(aikaNaytto);
176
177        }
178
179
180    void LaskeAlaspain()
181    {
182        alaspainLaskuri.Value -= 0.1;
183
184        if (alaspainLaskuri.Value <= 0)
185        {
186            MessageDisplay.Add("Aika loppui!");
187            aikaLaskuri.Stop();
188
189
190
191        }
192    }
193
194    void LisaaTaso(Vector paikka, double leveys, double korkeus)
195    {
196        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
197        taso.Position = paikka;
198        taso.Color = Color.Green;
199        Add(taso);
200    }
201
202    void LisaaTahti(Vector paikka, double leveys, double korkeus)
203    {
204        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
205        tahti.IgnoresCollisionResponse = true;
206        tahti.Position = paikka;
207        tahti.Image = KarkinKuva;
208        tahti.Tag = "tahti";
209        Add(tahti);
210        pisteLaskuri.MaxValue++;
211        pisteNaytto.IntFormatString = " {0:D1}/" + pisteLaskuri.MaxValue;
212    }
213
214    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
215    {
216        pelaaja1 = new PlatformCharacter(leveys, korkeus);
217        pelaaja1.Position = paikka;
218        pelaaja1.Mass = 4.0;
219        pelaaja1.Image = pelaajanKuva;
220        pelaaja1.Shape = Shape.FromImage(pelaajanKuva);
221        pelaaja1.Tag = "pelaaja";
222        AddCollisionHandler(pelaaja1, "tahti", KeraaKarkki);
223        AddCollisionHandler(pelaaja1, "vihollinen", delegate(PhysicsObject A, PhysicsObject B)
224        {
225           
226            Label teksti = new Label("Kuolit");
227            Add(teksti);
228
229            GameObject tekstiLaatikko = new GameObject(teksti.Width, teksti.Height);
230            Add(tekstiLaatikko);
231            tekstiLaatikko.Position -= new Vector(0, 100);
232
233            kenttaNimi = "kentta1";
234            pelaaja1.Destroy();
235
236            Timer.SingleShot(5.0, delegate { topLista.EnterAndShow(pisteLaskuri.Value); IsPaused = true; });
237            topLista.HighScoreWindow.Closed += delegate(Window sender) { IsPaused = false;  Begin(); };
238            //Timer.SingleShot(5.0, Begin);
239           
240        });
241        Add(pelaaja1);
242
243    }
244
245    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
246    {
247        vihollinen = new PlatformCharacter(leveys, korkeus);
248        vihollinen.Position = paikka;
249        vihollinen.Mass = 4.0;
250        vihollinen.Image = vihollisenKuva;
251       
252        vihollinen.Tag = "vihollinen";
253        vihollinen.IgnoresGravity = true;
254        Add(vihollinen);
255
256        FollowerBrain aivot = new FollowerBrain("pelaaja");
257        vihollinen.Brain = aivot;
258       
259    }
260
261    void LisaaNappaimet()
262    {
263        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
264        Keyboard.Listen(Key.P, ButtonState.Pressed, TauotaPeli, "Tauko");
265        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
266
267        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
268        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
269        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
270
271        //ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
272
273        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
274        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
275        //ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
276
277        //PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
278    }
279    void TauotaPeli()
280    {
281        MessageDisplay.Add("Peli tauolla");
282        Pause();
283    }
284
285    void Liikuta(PlatformCharacter hahmo, double nopeus)
286    {
287        hahmo.Walk(nopeus);
288    }
289
290    void Hyppaa(PlatformCharacter hahmo, double nopeus)
291    {
292        hahmo.Jump(nopeus);
293    }
294
295    void KeraaKarkki(PhysicsObject hahmo, PhysicsObject tahti)
296    {
297        maaliAani.Play();
298        MessageDisplay.Add("Keräsit karkin!");
299        tahti.Destroy();
300        pisteLaskuri.Value += 1;
301
302    }
303}
Note: See TracBrowser for help on using the repository browser.