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

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