source: 2013/24/BenjaminT/Numerohyppy/Numerohyppy/Numerohyppy/Numerohyppy.cs @ 4145

Revision 4145, 9.3 KB checked in by betiterv, 6 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 Pelaaja : PlatformCharacter
10{
11    public PhysicsObject viimeksiKoskettuLuukku;
12    public Pelaaja(double leveys, double korkeus)
13        : base(leveys, korkeus)
14    {
15    }
16}
17
18public class Numerohyppy : PhysicsGame
19{
20    const double nopeus = 200;
21    const double hyppyNopeus = 750;
22    const int RUUDUN_KOKO = 40;
23    Vector aloituspaikka;
24    Pelaaja pelaaja1;
25
26    Image pelaajanKuva = LoadImage("pelaaja2");
27    Image tahtiKuva = LoadImage("tahti");
28    Image luukkuKuva = LoadImage("luukku2");
29    Image pikkiKuva = LoadImage("pikki");
30    SoundEffect maaliAani = LoadSoundEffect("maali");
31
32    IntMeter pistelaskuri;
33    ScoreList topLista = new ScoreList(10, true, 999);
34
35
36    public override void Begin()
37    {
38        topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
39
40        pistelaskuri = new IntMeter(0);
41        AlkuRuutu();
42
43    }
44
45    void AlkuRuutu()
46    {
47        Level.BackgroundColor = Color.DarkBlue;
48        SplashScreen ss = new SplashScreen("NumeroHyppy", "Benjamin Tervonen", "", "Pelin tarina:Hahmo hypelee ja selviytyy loppuun voitaakseen pelin.");
49        ss.NameLabel.TextColor = Color.White;
50        ss.Color = Color.Red;
51        Add(ss);
52        ss.GameStarted += AloitaPeli;
53    }
54
55    void AloitaPeli()
56    {
57        Gravity = new Vector(0, -1000);
58
59        LuoKentta();
60        LisaaNappaimet();
61
62        Camera.Follow(pelaaja1);
63        Camera.ZoomFactor = 3.0;
64        Camera.StayInLevel = true;
65    }
66
67    void LuoKentta()
68    {
69        TileMap kentta = TileMap.FromLevelAsset("kentta1");
70        kentta.SetTileMethod('#', LisaaTaso);
71        kentta.SetTileMethod('*', LisaaTahti);
72        kentta.SetTileMethod('N', LisaaPelaaja);
73        kentta.SetTileMethod('-', LisaaLuukku);
74        kentta.SetTileMethod('/', LisaaPiikki);
75        kentta.SetTileMethod('B', LisaaMaali);
76        kentta.SetTileMethod('+', LisaaNakymatonSeina);
77        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
78        Level.CreateBorders();
79        Level.Background.CreateGradient(Color.Orange, Color.Green);
80        pistelaskuri = new IntMeter(0);
81
82        Label aikaNaytto = new Label();
83        aikaNaytto.BindTo(pistelaskuri);
84        Add(aikaNaytto);
85        aikaNaytto.Position = new Vector(Screen.Left + 50, Screen.Top - 50);
86        aikaNaytto.Color = Color.Black;
87        aikaNaytto.TextColor = Color.White;
88
89        Timer ajastin = new Timer();
90        ajastin.Interval = 1.0;
91        ajastin.Timeout += delegate
92        {
93            pistelaskuri.Value++;
94        };
95        ajastin.Start();
96    }
97
98    void LisaaNakymatonSeina(Vector paikka, double leveys, double korkeus)
99    {
100        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus * 5);
101        seina.Position = paikka;
102        seina.Color = Color.DarkBlue;
103        seina.Tag = "löllö";
104        seina.IsVisible = false;
105        Add(seina);
106    }
107
108    void LisaaTaso(Vector paikka, double leveys, double korkeus)
109    {
110        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
111        taso.Position = paikka;
112        taso.Color = Color.DarkBlue;
113        Add(taso);
114    }
115
116    void LisaaTahti(Vector paikka, double leveys, double korkeus)
117    {
118        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
119        tahti.IgnoresCollisionResponse = true;
120        tahti.Position = paikka;
121        tahti.Image = tahtiKuva;
122        tahti.Tag = "tahti";
123        Add(tahti);
124    }
125
126    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
127    {
128        pelaaja1 = new Pelaaja(leveys, korkeus);
129        pelaaja1.Position = paikka;
130        aloituspaikka = paikka;
131        pelaaja1.Mass = 4.0;
132        pelaaja1.Image = pelaajanKuva;
133        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja1, "löllö", TormaaSeina);
134        AddCollisionHandler(pelaaja1, "maali", TormaaMaaliin);
135        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja1, "luukku", delegate(Pelaaja p, PhysicsObject luukku) { pelaaja1.viimeksiKoskettuLuukku = luukku; });
136        //AddCollisionHandler<PhysicsObject, PhysicsObject>(pelaaja1, "piikki", delegate { ClearAll(); Begin(); });
137        AddCollisionHandler<PhysicsObject, PhysicsObject>(pelaaja1, "piikki", delegate { pelaaja1.Position = aloituspaikka; });
138        Add(pelaaja1);
139    }
140
141    void LisaaLuukku(Vector paikka, double leveys, double korkeus)
142    {
143        PhysicsObject luukku2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
144        luukku2.Position = paikka;
145        luukku2.Image = luukkuKuva;
146        luukku2.Tag = "luukku";
147        Add(luukku2);
148    }
149
150    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
151    {
152        PhysicsObject pikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
153        pikki.Position = paikka;
154        pikki.Image = pikkiKuva;
155        pikki.Tag = "piikki";
156        Add(pikki);
157    }
158
159    void LisaaMaali(Vector paikka, double leveys, double korkeus)
160    {
161        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
162        maali.Position = paikka;
163        maali.Tag = "maali";
164        Add(maali);
165    }
166
167    void TormaaSeina(Pelaaja pelaaja, PhysicsObject kohde)
168    {
169        kohde.Destroy();
170
171        int luku1 = RandomGen.NextInt(100);
172        int luku2 = RandomGen.NextInt(100);
173        InputWindow kysymysIkkuna = new InputWindow(luku1 + " + " + luku2);
174        kysymysIkkuna.TextEntered += delegate
175        {
176            ProcessInput(pelaaja, kysymysIkkuna, luku1 + luku2);
177        };
178        Add(kysymysIkkuna);
179
180    }
181
182    void ProcessInput(Pelaaja pelaaja, InputWindow ikkuna, int kysymys)
183    {
184        string vastaus = ikkuna.InputBox.Text;
185
186        if (vastaus != kysymys.ToString())
187        {
188            pelaaja.viimeksiKoskettuLuukku.Destroy();
189            pelaaja1.IgnoresCollisionResponse = true;
190            Timer.SingleShot(5.0, delegate
191            {
192                if (pelaaja.IsDestroyed == false)
193                {
194                    ClearAll();
195                    Begin();
196                }
197            });
198
199            pelaaja1.Hit(new Vector(0, -1000));
200        }
201    }
202
203    void TormaaLuukku(PhysicsObject tormaaja, PhysicsObject kohde)
204    {
205        kohde.Destroy();
206    }
207
208    void TormaaMaaliin(PhysicsObject tormaaja, PhysicsObject kohde)
209    {
210        ClearAll();
211        Label l = new Label("Voitit pelin, onneksi olkoon!!!");
212        Add(l);
213        Timer.SingleShot(3.0, delegate
214        {
215            Level.Size = new Vector(1024, 768);
216            GameObject g = new GameObject(Level.Width, Level.Height);
217            g.Color = Color.Black;
218            Add(g);
219            Camera.ZoomToLevel();
220
221            Timer t = new Timer();
222            t.Interval = 0.2;
223            t.Timeout += delegate
224            {
225                g.FadeColorTo(Color.White, 0.1);
226                Timer.SingleShot(0.1, delegate { g.FadeColorTo(RandomGen.NextColor(), 0.1); });
227            };
228            t.Start(60);
229            Timer.SingleShot(3.0, delegate
230            {
231                Explosion e = new Explosion(5000);
232                Add(e);
233            });
234        });
235        Timer.SingleShot(8.0, delegate { TopTen(); });
236    }
237
238    void TopTen()
239    {
240        HighScoreWindow topIkkuna = new HighScoreWindow(
241                             "Parhaat pisteet",
242                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
243                             topLista, pistelaskuri.Value);
244        topIkkuna.Closed += TallennaPisteet;
245        Add(topIkkuna);
246    }
247
248    void TallennaPisteet(Window sender)
249    {
250        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
251    }
252
253    void LisaaNappaimet()
254    {
255        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
256        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
257
258        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
259        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
260        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
261
262        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
263
264        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
265        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
266        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
267
268        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
269    }
270
271    void Liikuta(PlatformCharacter hahmo, double nopeus)
272    {
273        hahmo.Walk(nopeus);
274    }
275
276    void Hyppaa(PlatformCharacter hahmo, double nopeus)
277    {
278        hahmo.Jump(nopeus);
279    }
280
281    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
282    {
283        maaliAani.Play();
284        MessageDisplay.Add("Keräsit tähden!");
285        tahti.Destroy();
286    }
287}
288
Note: See TracBrowser for help on using the repository browser.