source: 2012/27/HenriM/kaljaadventures/kaljaadventures/kaljaadventures/kaljaadventures.cs @ 3670

Revision 3670, 8.8 KB checked in by henmatma, 11 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 kaljaadventures : PhysicsGame
10{
11    ScoreList topLista = new ScoreList(10, true, 9999);
12    int kenttataso = 1;
13    IntMeter rasvalaskuri;
14    const double nopeus = 200;
15    const double hyppyNopeus = 1000;
16    const int RUUDUN_KOKO = 40;
17    const int KENTTIEN_MAARA = 3; // muuta tätä kun teet lisää kenttiä
18
19    PlatformCharacter pelaaja1;
20
21    Image pelaajanKuva = LoadImage("kalja");
22    Image mursuKuva = LoadImage("vesi");
23    Image soppaKuva = LoadImage("piikki");
24    Image laatikkoKuva = LoadImage("laatikko");
25    Image gravitKuva = LoadImage("gravit");
26
27    Timer aikaLaskuri;
28    double kulunutAika = 0.0;
29
30    DoubleMeter gravitloppuLaskuri;
31    Timer gravitLaskuri;
32
33    public override void Begin()
34    {
35        MediaPlayer.Play("taustamusiikki");
36        if (DataStorage.Exists("pisteet.xml"))
37            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
38        AloitaPeli();
39    }
40
41    void AloitaPeli()
42    {
43        if (kenttataso > KENTTIEN_MAARA)
44        {
45            LopetaPeli();
46            return;
47        }
48        if (aikaLaskuri != null)
49            kulunutAika = aikaLaskuri.SecondCounter.Value;
50       
51        ClearAll();
52
53        rasvalaskuri = new IntMeter(0);
54        rasvalaskuri.LowerLimit += delegate
55        {
56            ++kenttataso; AloitaPeli();
57        };
58
59        Gravity = new Vector(0, -1000);
60
61        LuoKentta(kenttataso);
62        LuoAikaLaskuri();
63        LisaaNappaimet();
64
65        Camera.Follow(pelaaja1);
66        //Camera.ZoomFactor = 1.2;
67        Camera.StayInLevel = true;
68    }
69
70    void LopetaPeli()
71    {
72        ClearAll();
73        String aikaString = String.Format("{0:0.00}", aikaLaskuri.SecondCounter.Value);
74        double aika = double.Parse(aikaString);
75        HighScoreWindow topIkkuna = new HighScoreWindow(
76                             "Parhaat ajat",
77                             "Onneksi olkoon, pääsit listalle ajalla %p! Syötä nimesi:",
78                             topLista, aika);
79        topIkkuna.Closed += TallennaPisteet;
80        Add(topIkkuna);
81
82    }
83
84    void LuoKentta(int kenttanro)
85    {
86        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttanro);
87        kentta.SetTileMethod('#', LisaaTaso);
88        kentta.SetTileMethod('*', LisaaRasva);
89        kentta.SetTileMethod('K', LisaaPelaaja);
90        kentta.SetTileMethod('S', LisaaSoppa);
91        kentta.SetTileMethod('L', LisaaLaatikko);
92        kentta.SetTileMethod('G', LisaaGravit);
93        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
94        Level.CreateBorders();
95        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
96    }
97
98    void LisaaTaso(Vector paikka, double leveys, double korkeus)
99    {
100        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
101        taso.Position = paikka;
102        taso.Color = Color.Green;
103        Add(taso);
104    }
105
106    void LisaaRasva(Vector paikka, double leveys, double korkeus)
107    {
108        PhysicsObject mursunrasva = PhysicsObject.CreateStaticObject(leveys, korkeus);
109        mursunrasva.IgnoresCollisionResponse = true;
110        mursunrasva.Position = paikka;
111        mursunrasva.Image = mursuKuva;
112        mursunrasva.Tag = "mursunrasva";
113        mursunrasva.Width = (double)mursuKuva.Width / (double)mursuKuva.Height * (double)korkeus;
114        rasvalaskuri.Value++;
115        Add(mursunrasva);
116    }
117
118    void LisaaSoppa(Vector paikka, double leveys, double korkeus)
119    {
120        PhysicsObject soppa = PhysicsObject.CreateStaticObject(leveys, korkeus);
121        soppa.Shape = Shape.FromImage(soppaKuva);
122        soppa.IgnoresCollisionResponse = true;
123        soppa.Position = paikka;
124        soppa.Image = soppaKuva;
125        soppa.Tag = "soppa";
126        soppa.Width = (double)soppaKuva.Width / (double)soppaKuva.Height * (double)korkeus;
127        Add(soppa);
128    }
129
130    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
131    {
132        pelaaja1 = new PlatformCharacter(leveys, korkeus);
133        pelaaja1.Position = paikka;
134        pelaaja1.Mass = 4.0;
135        pelaaja1.Image = pelaajanKuva;
136        pelaaja1.Width = (double)pelaajanKuva.Width / (double)pelaajanKuva.Height * (double)korkeus;
137        AddCollisionHandler(pelaaja1, "mursunrasva", TormaaMursuun);
138        AddCollisionHandler(pelaaja1, "mursunrasva", CollisionHandler.AddMeterValue(rasvalaskuri, -1));
139        AddCollisionHandler(pelaaja1, "gravit", TormaaGravit);
140        AddCollisionHandler(pelaaja1, "soppa", TormaaSoppaan);
141        Add(pelaaja1);
142    }
143
144    void LisaaLaatikko(Vector paikka, double leveys, double korkeus)
145    {
146        PhysicsObject laatikko = new PlatformCharacter(leveys, korkeus);
147        laatikko.Position = paikka;
148        laatikko.Image = laatikkoKuva;
149        laatikko.Tag = "laatikko";
150        Add(laatikko);
151    }
152
153    void LisaaGravit(Vector paikka, double leveys, double korkeus)
154    {
155        PhysicsObject gravit = PhysicsObject.CreateStaticObject(leveys, korkeus);
156        gravit.IgnoresCollisionResponse = true;
157        gravit.Position = paikka;
158        gravit.Image = gravitKuva;
159        gravit.Tag = "gravit";
160        Add(gravit);
161    }
162
163    void LisaaNappaimet()
164    {
165        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
166        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
167        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
168
169        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
170        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
171        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
172
173        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
174
175        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
176        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
177        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
178
179        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
180    }
181
182    void Liikuta(PlatformCharacter hahmo, double nopeus)
183    {
184        hahmo.Walk(nopeus);
185    }
186
187    void Hyppaa(PlatformCharacter hahmo, double nopeus)
188    {
189        hahmo.Jump(nopeus);
190    }
191
192    void TormaaMursuun(PhysicsObject hahmo, PhysicsObject mursunrasva)
193    {
194        MessageDisplay.Add("Vesi vähentää alkoholipitoisuuttasi!");
195        mursunrasva.Destroy();
196    }
197
198    void TormaaSoppaan(PhysicsObject hahmo, PhysicsObject soppa)
199    {
200        AloitaPeli();
201    }
202
203    void TormaaGravit(PhysicsObject hahmo, PhysicsObject gravit)
204    {
205        MessageDisplay.Add("Painovoima vaihtuu!");
206        gravit.Destroy();
207        LuoGravityLaskuri();
208        Gravity = new Vector(0, 1000);
209    }
210
211    void LuoAikaLaskuri()
212    {
213        aikaLaskuri = new Timer();
214        aikaLaskuri.SecondCounter.DefaultValue = kulunutAika;
215        aikaLaskuri.Interval = double.MaxValue;
216        aikaLaskuri.Start();
217
218        Label aikaNaytto = new Label();
219        aikaNaytto.TextColor = Color.White;
220        aikaNaytto.Position = new Vector(Screen.RightSafe - 100, Screen.TopSafe - 50);
221        aikaNaytto.DecimalPlaces = 1;
222        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
223        Add(aikaNaytto);
224    }
225
226    void LuoGravityLaskuri()
227    {
228        gravitloppuLaskuri = new DoubleMeter(5);
229
230        gravitLaskuri = new Timer();
231        Label gravitNaytto = new Label();
232
233        gravitLaskuri.Interval = 0.1;
234        gravitLaskuri.Timeout += delegate { gravitLoppui(gravitNaytto); };
235        gravitLaskuri.Start();
236
237        gravitNaytto.TextColor = Color.Blue;
238        gravitNaytto.DecimalPlaces = 1;
239        gravitNaytto.BindTo(gravitloppuLaskuri);
240        Add(gravitNaytto);
241    }
242
243    void gravitLoppui(Label naytto)
244    {
245        gravitloppuLaskuri.Value -= 0.1;
246
247        if (gravitloppuLaskuri.Value <= 0)
248        {
249            Gravity = new Vector(0, -1000);
250            MessageDisplay.Add("Painovoima palautui normaaliksi.");
251            gravitLaskuri.Stop();
252            naytto.Destroy();
253        }
254    }
255
256    void TallennaPisteet(Window sender)
257    {
258        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
259        kenttataso = 1;
260
261        YesNoWindow ikkuna = new YesNoWindow("Haluatko pelata uudestaan?");
262        ikkuna.No += Exit;
263        ikkuna.Yes += AloitaPeli;
264        Add(ikkuna);
265       
266    }
267
268}
Note: See TracBrowser for help on using the repository browser.