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

Revision 4119, 7.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}
18
19public class Numerohyppy : PhysicsGame
20{
21    const double nopeus = 200;
22    const double hyppyNopeus = 750;
23    const int RUUDUN_KOKO = 40;
24
25    Pelaaja pelaaja1;
26
27    Image pelaajanKuva = LoadImage("pelaaja2");
28    Image tahtiKuva = LoadImage("tahti");
29    Image luukkuKuva = LoadImage("luukku2");
30    Image pikkiKuva = LoadImage("pikki");
31    SoundEffect maaliAani = LoadSoundEffect("maali");
32
33    public override void Begin()
34    {
35        Gravity = new Vector(0, -1000);
36
37        LuoKentta();
38        LisaaNappaimet();
39
40        Camera.Follow(pelaaja1);
41        Camera.ZoomFactor = 3.0;
42        Camera.StayInLevel = true;
43    }
44
45    void LuoKentta()
46    {
47        TileMap kentta = TileMap.FromLevelAsset("kentta1");
48        kentta.SetTileMethod('#', LisaaTaso);
49        kentta.SetTileMethod('*', LisaaTahti);
50        kentta.SetTileMethod('N', LisaaPelaaja);
51        kentta.SetTileMethod('-', LisaaLuukku);
52        kentta.SetTileMethod('/', LisaaPiikki);
53        kentta.SetTileMethod('B', LisaaMaali);
54        kentta.SetTileMethod('+', LisaaNakymatonSeina);
55        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
56        Level.CreateBorders();
57        Level.Background.CreateGradient(Color.Orange, Color.Green);
58    }
59
60    void LisaaNakymatonSeina(Vector paikka, double leveys, double korkeus)
61    {
62        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus * 5);
63        seina.Position = paikka;
64        seina.Color = Color.DarkBlue;
65        seina.Tag = "löllö";
66        seina.IsVisible = false;
67        Add(seina);
68    }
69
70    void LisaaTaso(Vector paikka, double leveys, double korkeus)
71    {
72        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
73        taso.Position = paikka;
74        taso.Color = Color.DarkBlue;
75        Add(taso);
76    }
77
78    void LisaaTahti(Vector paikka, double leveys, double korkeus)
79    {
80        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
81        tahti.IgnoresCollisionResponse = true;
82        tahti.Position = paikka;
83        tahti.Image = tahtiKuva;
84        tahti.Tag = "tahti";
85        Add(tahti);
86    }
87
88    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
89    {
90        pelaaja1 = new Pelaaja(leveys, korkeus);
91        pelaaja1.Position = paikka;
92        pelaaja1.Mass = 4.0;
93        pelaaja1.Image = pelaajanKuva;
94        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja1, "löllö", TormaaSeina);
95        AddCollisionHandler(pelaaja1, "maali", TormaaMaaliin);
96        AddCollisionHandler<Pelaaja, PhysicsObject>(pelaaja1, "luukku", delegate(Pelaaja p, PhysicsObject luukku) { pelaaja1.viimeksiKoskettuLuukku = luukku; });
97        AddCollisionHandler<PhysicsObject, PhysicsObject>(pelaaja1, "piikki", delegate { ClearAll(); Begin(); });
98        Add(pelaaja1);
99    }
100
101    void LisaaLuukku(Vector paikka, double leveys, double korkeus)
102    {
103        PhysicsObject luukku2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
104        luukku2.Position = paikka;
105        luukku2.Image = luukkuKuva;
106        luukku2.Tag = "luukku";
107        Add(luukku2);
108    }
109
110    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject pikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
113        pikki.Position = paikka;
114        pikki.Image = pikkiKuva;
115        pikki.Tag = "piikki";
116        Add(pikki);
117    }
118
119    void LisaaMaali(Vector paikka, double leveys, double korkeus)
120    {
121        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
122        maali.Position = paikka;
123        maali.Tag = "maali";
124        Add(maali);
125    }
126
127    void TormaaSeina(Pelaaja pelaaja, PhysicsObject kohde)
128    {
129        kohde.Destroy();
130
131        int luku1 = RandomGen.NextInt(100);
132        int luku2 = RandomGen.NextInt(100);
133        InputWindow kysymysIkkuna = new InputWindow(luku1 + " + " + luku2);
134        kysymysIkkuna.TextEntered += delegate
135        {
136            ProcessInput(pelaaja, kysymysIkkuna, luku1 + luku2);
137        };
138        Add(kysymysIkkuna);
139
140    }
141
142    void ProcessInput(Pelaaja pelaaja, InputWindow ikkuna, int kysymys)
143    {
144        string vastaus = ikkuna.InputBox.Text;
145
146        if (vastaus != kysymys.ToString())
147        {
148            pelaaja.viimeksiKoskettuLuukku.Destroy();
149            pelaaja1.IgnoresCollisionResponse = true;
150            //AddCollisionHandler(pelaaja1, "luukku", TormaaLuukku);
151
152            pelaaja1.Hit(new Vector(0, -1000));
153            //ClearAll();
154            //Begin();
155        }
156        // tehdään jotain vastauksella
157    }
158
159    void TormaaLuukku(PhysicsObject tormaaja, PhysicsObject kohde)
160    {
161        kohde.Destroy();
162    }
163
164    void TormaaMaaliin(PhysicsObject tormaaja, PhysicsObject kohde)
165    {
166        ClearAll();
167        Label l = new Label("Voitit pelin, onneksi olkoon!!!");
168        Add(l);
169        Timer.SingleShot(3.0, delegate
170        {
171            Level.Size = new Vector(1024, 768);
172            GameObject g = new GameObject(Level.Width, Level.Height);
173            g.Color = Color.Black;
174            Add(g);
175            Camera.ZoomToLevel();
176
177            Timer t = new Timer();
178            t.Interval = 0.1;
179            t.Timeout += delegate
180            {
181                g.FadeColorTo(Color.White, 0.05);
182                Timer.SingleShot(0.05, delegate { g.FadeColorTo(RandomGen.NextColor(), 0.05); });
183            };
184            t.Start(60);
185            Timer.SingleShot(3.0, delegate
186            {
187                Explosion e = new Explosion(5000);
188                Add(e);
189            });
190        });
191
192    }
193
194    void LisaaNappaimet()
195    {
196        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
197        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
198
199        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
200        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
201        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
202
203        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
204
205        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
206        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
207        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
208
209        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
210    }
211
212    void Liikuta(PlatformCharacter hahmo, double nopeus)
213    {
214        hahmo.Walk(nopeus);
215    }
216
217    void Hyppaa(PlatformCharacter hahmo, double nopeus)
218    {
219        hahmo.Jump(nopeus);
220    }
221
222    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
223    {
224        maaliAani.Play();
225        MessageDisplay.Add("Keräsit tähden!");
226        tahti.Destroy();
227    }
228}
Note: See TracBrowser for help on using the repository browser.