source: 2014/24/NooraH/Diamond/Diamond/Diamond/Diamond.cs @ 5019

Revision 5019, 12.1 KB checked in by noaialha, 8 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 Diamond : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 400;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    PlatformCharacter pelaaja2;
17
18    Image pelaajanKuva = LoadImage("Hahmo1");
19    Image tahtiKuva = LoadImage("Diamond");
20    Image pahiskuva = LoadImage("Pahis");
21    Image hahmokuva;
22    Image hahmokuva2;
23    Image Siilikuva = LoadImage("Siili");
24    Image Piikki = LoadImage("Piikki");
25    Image Maalikuva = LoadImage("Maali");
26
27    Image[] hahmokuvat = LoadImages("Hympi", "Hahmo2", "Pink", "häntukka", "Muvail");
28
29    SoundEffect maaliAani = LoadSoundEffect("maali");
30
31    IntMeter pisteLaskuri;
32
33    int pelaajienMaara;
34
35    public override void Begin()
36    {
37        LuoAlkuvalikko();
38       
39    }
40
41    void LuoAlkuvalikko()
42    {
43        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Lopeta");
44        Add(alkuValikko);
45        alkuValikko.AddItemHandler(0, ValitsePelaajienMaara);
46        alkuValikko.AddItemHandler(1, Exit);
47    }
48
49    void ValitsePelaajienMaara()
50    {
51        MultiSelectWindow alkuValikko = new MultiSelectWindow("Valitse pelaajien määrä", "1 pelaaja", "2 pelaajaa");
52        Add(alkuValikko);
53        alkuValikko.AddItemHandler(0, delegate { pelaajienMaara = 1; ValitseHahmo(); });
54        alkuValikko.AddItemHandler(1, delegate { pelaajienMaara = 2; ValitseHahmo(); });
55    }
56
57    void ValitseHahmo()
58    {
59        MultiSelectWindow hahmoValikko = new MultiSelectWindow("Valitse ensimmäisen pelaajan hahmo", "Hympi ", "Korsi", "Pink", "häntukka", "Muvail");
60        Add(hahmoValikko);
61
62        for (int i = 0; i < hahmokuvat.Length; i++)
63        {
64            int indeksi = i;
65            hahmoValikko.Buttons[i].Image = hahmokuvat[i];
66            hahmoValikko.Buttons[i].TextScale *= 3;
67            hahmoValikko.Buttons[i].TextColor = Color.Red;
68            hahmoValikko.AddItemHandler(indeksi, delegate
69            {
70                hahmokuva = hahmokuvat[indeksi];
71
72                if (pelaajienMaara == 2) ValitseHahmo2();
73                else AloitaPeli();
74            });
75        }
76    }
77
78    void ValitseHahmo2()
79    {
80        MultiSelectWindow hahmoValikko = new MultiSelectWindow("Valitse toisen pelaajan hahmo", "Hympi ", "Korsi", "Pink", "häntukka", "Muvail");
81        Add(hahmoValikko);
82
83        for (int i = 0; i < hahmokuvat.Length; i++)
84        {
85            int indeksi = i;
86            hahmoValikko.Buttons[i].Image = hahmokuvat[i];
87            hahmoValikko.Buttons[i].TextScale *= 3;
88            hahmoValikko.Buttons[i].TextColor = Color.Red;
89            hahmoValikko.AddItemHandler(indeksi, delegate
90            {
91                hahmokuva2 = hahmokuvat[indeksi];
92                AloitaPeli();
93            });
94        }
95    }
96
97    void AloitaPeli()
98    {
99        ClearAll();
100        LuoKentta();
101        LuoPistelaskuri();
102        LisaaNappaimet();
103
104        if (pelaajienMaara == 1) Camera.Follow(pelaaja1);
105        else Camera.Follow(pelaaja1, pelaaja2);
106        Camera.ZoomFactor = 2.5;
107        Camera.StayInLevel = true;
108    }
109
110    void LuoKentta()
111    {
112        Gravity = new Vector(0, -1000);
113
114        TileMap kentta = TileMap.FromLevelAsset("kentta1");
115        kentta.SetTileMethod('t', LisaaTaso3);
116        kentta.SetTileMethod('T', LisaaTaso4);
117        kentta.SetTileMethod('*', LisaaDiamond);
118        kentta.SetTileMethod('N', LisaaPelaaja);
119        kentta.SetTileMethod('n', LisaaPelaaja2);
120        kentta.SetTileMethod('P', LisaaPahis);
121        kentta.SetTileMethod('u', LisaaTaso5);
122        kentta.SetTileMethod('s', LisaaTaso6);
123        kentta.SetTileMethod('R', LisaaTayte1);
124        kentta.SetTileMethod('r', LisaaTayte2);
125        kentta.SetTileMethod('S', LisaaSiili);
126        kentta.SetTileMethod('M', LisaaMaali);
127        kentta.SetTileMethod('I', LisaaPiikki);
128        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
129        Level.CreateBorders();
130        Level.Background.CreateGradient(Color.Gray, Color.LightGray);
131    }
132
133    void LisaaTaso3(Vector paikka, double leveys, double korkeus)
134    {
135        LisaaTaso(paikka, leveys, korkeus, LoadImage("Tiili"));
136    }
137
138    void LisaaTaso4(Vector paikka, double leveys, double korkeus)
139    {
140        LisaaTaso(paikka, leveys, korkeus, LoadImage("Tiili3"));
141    }
142    void LisaaTaso5(Vector paikka, double leveys, double korkeus)
143    {
144        PhysicsObject taso = LisaaTaso(paikka, leveys, korkeus, LoadImage("Portti"));
145        taso.Tag = "painovoima";
146    }
147
148    void LisaaTaso6(Vector paikka, double leveys, double korkeus)
149    {
150        LisaaTaso(paikka, leveys, korkeus, LoadImage("Sieni"));
151    }
152
153    PhysicsObject LisaaTaso(Vector paikka, double leveys, double korkeus, Image kuva)
154    {
155        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
156        taso.Position = paikka;
157        taso.Image = kuva;
158        taso.Color = Color.Teal;
159        Add(taso);
160        return taso;
161    }
162
163    void LisaaDiamond(Vector paikka, double leveys, double korkeus)
164    {
165        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys * 0.5, korkeus * 0.7);
166        tahti.IgnoresCollisionResponse = true;
167        tahti.Position = paikka;
168        tahti.Image = tahtiKuva;
169        tahti.Tag = "Diamond";
170        Add(tahti);
171    }
172
173    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
174    {
175        pelaaja1 = new PlatformCharacter(leveys-2, korkeus-2);
176        pelaaja1.Position = paikka;
177        pelaaja1.Mass = 4.0;
178        pelaaja1.Image = hahmokuva;
179        AddCollisionHandler(pelaaja1, "Diamond", TormaaTahteen);
180        AddCollisionHandler(pelaaja1, "vaara", PelaajaKuolee);
181        AddCollisionHandler(pelaaja1, "painovoima", painovoimamuuttuu);
182        AddCollisionHandler(pelaaja1, "Maali", TormaaMaaliin);
183        Add(pelaaja1);
184    }
185
186    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
187    {
188        if (pelaajienMaara == 1) return;
189
190        pelaaja2 = new PlatformCharacter(leveys - 2, korkeus - 2);
191        pelaaja2.Position = paikka;
192        pelaaja2.Mass = 4.0;
193        pelaaja2.Image = hahmokuva2;
194        AddCollisionHandler(pelaaja2, "Diamond", TormaaTahteen);
195        AddCollisionHandler(pelaaja2, "vaara", PelaajaKuolee);
196        AddCollisionHandler(pelaaja2, "painovoima", painovoimamuuttuu);
197        AddCollisionHandler(pelaaja2, "Maali", TormaaMaaliin);
198        Add(pelaaja2);
199    }
200
201    void LisaaNappaimet()
202    {
203        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
204        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
205
206        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
207        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
208        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
209        Keyboard.Listen(Key.Down, ButtonState.Pressed, Hyppaaalas, "Pelaaja hyppää alas", pelaaja1, hyppyNopeus);
210
211        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
212        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
213        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
214        Keyboard.Listen(Key.S, ButtonState.Pressed, Hyppaaalas, "Pelaaja hyppää alas", pelaaja2, hyppyNopeus);
215
216        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
217
218        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
219        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
220        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
221        ControllerOne.Listen(Button.B, ButtonState.Pressed, Hyppaaalas, "Pelaaja hyppääalas", pelaaja1, hyppyNopeus);
222
223        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
224    }
225
226    void Liikuta(PlatformCharacter hahmo, double nopeus)
227    {
228        hahmo.Walk(nopeus);
229    }
230
231    void Hyppaa(PlatformCharacter hahmo, double nopeus)
232    {
233        hahmo.Jump(nopeus);
234    }
235
236    void Hyppaaalas(PlatformCharacter hahmo, double nopeus)
237    {
238        hahmo.ForceJump(-nopeus);
239    }
240
241    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
242    {
243        pisteLaskuri.Value++;
244        tahti.Destroy();
245    }
246
247    void LisaaPahis(Vector paikka, double leveys, double korkeus)
248    {
249
250        PlatformCharacter Pahis = new PlatformCharacter(leveys * 2, korkeus * 2);
251        Add(Pahis);
252        Pahis.Position = paikka;
253        Pahis.Image = pahiskuva;
254        Pahis.Tag = "vaara";
255        Timer ajastin = new Timer();
256        ajastin.Interval = 2;
257        ajastin.Timeout += delegate
258        {
259            Pahis.Jump(850);
260        };
261        ajastin.Start();
262    }
263    void PelaajaKuolee(PhysicsObject hahmo, PhysicsObject vaara)
264    {
265        AloitaPeli();
266    }
267
268    void painovoimamuuttuu(PhysicsObject hahmo, PhysicsObject taso)
269    {
270        Gravity = new Vector(0, 600);
271        hahmo.Position = taso.Position + new Vector(-45, 0);
272    }
273
274    void LisaaTayte1(Vector paikka, double leveys, double korkeus)
275    {
276        GameObject taute = LuoTayte(paikka, leveys, korkeus, LoadImage("Tiili"));
277        Add(taute);
278    }
279
280    void LisaaTayte2(Vector paikka, double leveys, double korkeus)
281    {
282        GameObject taute = LuoTayte(paikka, leveys, korkeus, LoadImage("Tiili3"));
283        Add(taute);
284    }
285
286    GameObject LuoTayte(Vector paikka, double leveys, double korkeus, Image kuva)
287    {
288        GameObject tayte = new GameObject(leveys, korkeus);
289        tayte.Image = kuva;
290        tayte.Position = paikka;
291        return tayte;
292    }
293   
294
295    void LuoPistelaskuri()
296    {
297        pisteLaskuri = new IntMeter(0);
298
299        Label pisteNaytto = new Label();
300        pisteNaytto.X = Screen.Right - 150;
301        pisteNaytto.Y = Screen.Top - 100;
302        pisteNaytto.TextColor = Color.LightBlue;
303        pisteNaytto.Color = Color.LightCyan;
304        pisteNaytto.IntFormatString = "Timanttia: {0:D1}";
305        pisteNaytto.TextScale = new Vector(1.6, 1.6);
306
307        pisteNaytto.BindTo(pisteLaskuri);
308        Add(pisteNaytto);
309    }
310
311    void LisaaMaali(Vector paikka, double leveys, double korkeus)
312    {
313        PhysicsObject Maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
314        Maali.Position = paikka;
315        Maali.Tag = "Maali";
316        Maali.Image = Maalikuva;
317        Maali.Color = Color.Teal;
318        Add(Maali);
319    }
320
321    void TormaaMaaliin(PhysicsObject hahmo, PhysicsObject tahti)
322    {
323        ClearAll();
324        Label Teksti = new Label("Läpäisit pelin!");
325        Teksti.TextColor = Color.Blue;
326        Add(Teksti);
327        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
328        Teksti.TextScale = new Vector(5, 5);
329        Level.Background.Color = Color.Black;
330    }
331    void LisaaSiili(Vector paikka, double leveys, double korkeus)
332    {
333
334        PlatformCharacter Pahis = new PlatformCharacter(leveys, korkeus);
335        Add(Pahis);
336        Pahis.Position = paikka;
337        Pahis.Image = Siilikuva;
338        Pahis.Tag = "vaara";
339        Timer ajastin = new Timer();
340        ajastin.Interval = RandomGen.NextDouble(1.6,3);
341        ajastin.Timeout += delegate
342        {
343            Pahis.Jump(800);
344        };
345        ajastin.Start();
346    }
347
348    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
349    {
350
351        PhysicsObject Piikki1 = PhysicsObject.CreateStaticObject(leveys, korkeus/2);
352        Add(Piikki1);
353        Piikki1.Position = new Vector(paikka.X,paikka.Y-korkeus*0.25);
354        Piikki1.Image = Piikki;
355        Piikki1.Tag = "vaara";
356    }
357}
Note: See TracBrowser for help on using the repository browser.