source: 2013/24/PetroI/ApinaEtsii/ApinaEtsii/ApinaEtsii/ApinaEtsii.cs @ 4086

Revision 4086, 7.2 KB checked in by pelakaik, 7 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 ApinaEtsii : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 20;
14
15    Apina pelaaja1;
16    Image vihollinenKuva = LoadImage("vihu");
17    Image viidakonKuva = LoadImage("viidakkoKuva");
18    Animation anim;
19    int kenttaNro = 1;
20
21    List<Label> valikonKohdat;
22
23    SoundEffect maaliAani = LoadSoundEffect("maali");
24
25    public override void Begin()
26    {
27        Image[] imagesForAnim = LoadImages("apina", "apina1");
28        anim = new Animation(imagesForAnim);
29        //LuoKentta("kentta1");
30        //LisaaNappaimet();
31        Valikko();
32       
33       
34    }
35
36
37    void SeuraavaKentta()
38    {
39
40        ClearAll();
41
42        if (kenttaNro == 1) LuoKentta("kentta1");
43        else if (kenttaNro == 2) LuoKentta("kentta2");
44        else if (kenttaNro == 3) LuoKentta("kentta3");
45        else if (kenttaNro > 3) Exit();
46
47        Luoelamalaskuri();
48        LisaaNappaimet();
49
50        Camera.Follow(pelaaja1);
51        Camera.ZoomFactor = 3;
52        Camera.StayInLevel = true;
53    }
54
55    void LuoKentta(string kenttanimi)
56    {
57        TileMap kentta = TileMap.FromLevelAsset(kenttanimi);
58       
59        kentta.SetTileMethod('#', LisaaTaso);
60        kentta.SetTileMethod('M', Lisaamaali);
61        kentta.SetTileMethod('K', LisaaKakku);
62        kentta.SetTileMethod('N', LisaaPelaaja);
63        kentta.SetTileMethod('P', LisaaVihollinen);
64        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
65        Level.CreateBorders();
66        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
67        Level.Background.Image = viidakonKuva;
68        Level.Background.TileToLevel();
69       
70        Gravity = new Vector(0, -1000);
71    }
72
73
74   void Lisaamaali(Vector paikka, double leveys, double korkeus)
75   {
76       PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
77       maali.Position = paikka;
78       maali.Tag = "maali";
79       maali.Color = Color.Gold;
80       Add(maali);
81   }
82    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
83    {
84        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
85        vihu.Image = vihollinenKuva;
86        vihu.Position = paikka;
87        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
88        tasoAivot.Speed = 100;
89        vihu.Brain = tasoAivot;
90        vihu.Tag = "pahis";
91        Add(vihu);
92    }
93
94
95    void LisaaTaso(Vector paikka, double leveys, double korkeus)
96    {
97        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
98        taso.Position = paikka;
99        taso.Color = Color.Green;
100        Add(taso);
101    }
102
103    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
104    {
105        pelaaja1 = new Apina(leveys, korkeus);
106        pelaaja1.Position = paikka;
107        pelaaja1.Mass = 4.0;
108        pelaaja1.Image = LoadImage("apina");
109        pelaaja1.AnimWalk = anim;
110        AddCollisionHandler(pelaaja1, "pahis", TormaaPahikseen);
111        AddCollisionHandler(pelaaja1, "maali", PaasiMaaliin);
112        AddCollisionHandler(pelaaja1, "kakku", SaitKakun);
113        pelaaja1.Destroyed += delegate { Begin(); };
114        Add(pelaaja1);
115    }
116
117    void SaitKakun(PhysicsObject obj, PhysicsObject kakku)
118    {
119        MessageWindow ikkuna = new MessageWindow("Voitit Pelin");
120        Add(ikkuna);
121    }
122
123
124    void PaasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
125    {
126        kenttaNro++;
127        SeuraavaKentta();
128    }
129
130
131    void TormaaPahikseen(PhysicsObject apina, PhysicsObject vihollinen)
132    {
133        if (!(apina is Apina)) return;
134        Apina pelaaja = (Apina)apina;
135        pelaaja.ElamaLaskuri.Value--;
136
137    }
138
139    void LisaaNappaimet()
140    {
141        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
142        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
143
144        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
145        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
146        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
147
148        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
149
150        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
151        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
152        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
153
154        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
155    }
156
157    void Liikuta(PlatformCharacter hahmo, double nopeus)
158    {
159        hahmo.Walk(nopeus);
160    }
161
162    void Hyppaa(PlatformCharacter hahmo, double nopeus)
163    {
164        hahmo.Jump(nopeus);
165    }
166
167    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
168    {
169        maaliAani.Play();
170
171    }
172    void Luoelamalaskuri()
173    {
174
175        Label pisteNaytto = new Label();
176        pisteNaytto.X = Screen.Left + 100;
177        pisteNaytto.Y = Screen.Top - 100;
178        pisteNaytto.TextColor = Color.Black;
179        pisteNaytto.Color = Color.White;
180
181        pisteNaytto.BindTo(pelaaja1.ElamaLaskuri);
182        Add(pisteNaytto);
183    }
184
185    void LisaaKakku(Vector paikka, double leveys, double korkeus)
186    {
187        PhysicsObject kakku = PhysicsObject.CreateStaticObject(leveys, korkeus);
188        kakku.Image = LoadImage("kakku");
189        kakku.Tag = "kakku";
190        kakku.Position = paikka;
191        Add(kakku);
192
193    }
194
195    void Valikko()
196    {
197        ClearAll();
198        Mouse.IsCursorVisible = true;
199        valikonKohdat = new List<Label>();
200
201        Label kohta1 = new Label("Aloita uusi peli");
202        kohta1.Position = new Vector(0, 40);
203        valikonKohdat.Add(kohta1);
204
205        Label kohta2 = new Label("Lopeta peli");
206        kohta2.Position = new Vector(0, -40);
207        valikonKohdat.Add(kohta2);
208
209        foreach (Label valikonKohta in valikonKohdat)
210        {
211            Add(valikonKohta);
212        }
213
214        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, SeuraavaKentta, null);
215        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
216        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
217    }
218
219    void ValikossaLiikkuminen(AnalogState hiirenTila)
220    {
221        foreach (Label kohta in valikonKohdat)
222        {
223            if (Mouse.IsCursorOn(kohta))
224            {
225                kohta.TextColor = Color.Red;
226            }
227            else
228            {
229                kohta.TextColor = Color.Black;
230            }
231
232        }
233    }
234}
235
236class Apina : PlatformCharacter
237{
238    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
239    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
240
241    public Apina(double leveys, double korkeus)
242        : base(leveys, korkeus)
243    {
244        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
245    }
246
247}
Note: See TracBrowser for help on using the repository browser.