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

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