source: 2015/26/FransM/Pixels/Pixels/Pixels/Pixels.cs @ 6460

Revision 6460, 9.0 KB checked in by frmaenpa, 5 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 Pixels : PhysicsGame
10{
11    int ruudunkoko = 60;
12    Image taustakuva = LoadImage("Taustakuva");
13    Image tasoKuva = LoadImage("Maa");
14    Image maapalakuva = LoadImage("Maapala");
15    Image maaruohokuva = LoadImage("Maapalaruoholla");
16    Image kivikuva = LoadImage("Kivi");
17    Image nappikuva = LoadImage("NAPPI");
18    Image porakuva = LoadImage("Pora");
19    Image kivi2kuva = LoadImage("Kivi2");
20    Image seinakuva = LoadImage("seinä");
21    Image alinkuva = LoadImage("Alin");
22    Image ruohokuva = LoadImage("Maapalaruoholla");
23    Image alempikuva = LoadImage("Alempi");
24    Image kivi3kuva = LoadImage("Kivi3");
25    Image pommikuva = LoadImage("TNT");
26    Image plutoniumkuva = LoadImage("plutonium");
27    Image kukkakuva = LoadImage("Kukka");
28    Image seinakuva2 = LoadImage("seinä2");
29
30    Inventory inventory;
31
32    public override void Begin()
33    {
34        LuoKentta();
35
36        SmoothTextures = false;
37
38        inventory = new Inventory();
39        inventory.Left = Screen.Left + 100;
40        Add(inventory);
41
42        for (int i = 0; i < 10; i++)
43        {
44            inventory.AddItem(new PhysicsObject(pommikuva), pommikuva);
45        }
46
47        MediaPlayer.Play("CaveMusicX");
48        MediaPlayer.IsRepeating = true;
49
50        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
51    }
52
53    void LuoKentta()
54    {
55        Level.Background.Image = taustakuva;
56
57        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Maa");
58
59        ruudut.SetTileMethod(Color.FromHexCode("FF0000"), LuoTaso);
60        ruudut.SetTileMethod(Color.FromHexCode("808080"), LuoTaso2);
61        ruudut.SetTileMethod(Color.FromHexCode("000000"), LuoTaso3);
62        ruudut.SetTileMethod(Color.FromHexCode("FFD800"), LuoTaso4);
63        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoTaso5);
64        ruudut.SetTileMethod(Color.FromHexCode("00FF21"), LuoTaso6);
65        ruudut.SetTileMethod(Color.FromHexCode("FF6A00"), LuoTaso7);
66        ruudut.SetTileMethod(Color.FromHexCode("7F3300"), LuoTaso8);
67        ruudut.SetTileMethod(Color.FromHexCode("B6FF00"), LuoTaso9);
68
69        ruudut.Execute(ruudunkoko, ruudunkoko);
70        Level.Background.FitToLevel();
71
72        IsMouseVisible = true;
73        Camera.StayInLevel = true;
74        Mouse.ListenMovement(0.0, delegate(AnalogState h)
75        {
76            if (Mouse.PositionOnScreen.Y > Screen.Top - 100)
77            {
78                Camera.Move(new Vector(0, 10));
79            }
80            else if (Mouse.PositionOnScreen.Y < Screen.Bottom + 100)
81            {
82                Camera.Move(new Vector(0, -10));
83            }
84        }, "");
85
86        IsFullScreen = true;
87    }
88
89    void EsineValitsin(Vector paikka)
90    {
91        int arpa = RandomGen.NextInt(0, 100);
92        if (arpa <= 50)
93        {
94            EsineLuoja(paikka, "TNT");
95        }
96        else if (arpa <= 70)
97        {
98            EsineLuoja(paikka, "plutonium");
99        }
100        else
101        {
102            EsineLuoja(paikka, "Kukka");
103        }
104
105
106    }
107
108    void EsineLuoja(Vector paikka, String tag)
109    {
110        PhysicsObject esine = PhysicsObject.CreateStaticObject(LoadImage(tag));
111        esine.Position = paikka;
112        esine.Tag = "esine";
113        Add(esine, 1);
114    }
115
116    void rajayta(PhysicsObject taso)
117    {
118        bool voikaivaa = false;
119        Vector[] suunnat = { new Vector(-1, 0), new Vector(1, 0), new Vector(0, -1), new Vector(0, 1) };
120
121        foreach (var suunta in suunnat)
122        {
123            GameObject palikka = GetObjectAt(taso.Position + suunta * ruudunkoko);
124            if (palikka == null)
125            {
126                voikaivaa = true;
127                break;
128            }
129
130
131        }
132
133        if (voikaivaa && inventory.Objects.Count > 0)
134        {
135            inventory.Objects.Remove(inventory.Objects[0]);
136
137            Explosion rajahdys = new Explosion(ruudunkoko);
138            rajahdys.Position = taso.Position;
139            rajahdys.ShockwaveReachesObject += PaineaaltoOsuu;
140            Add(rajahdys);
141            taso.Destroy();
142        }
143    }
144
145    void PaineaaltoOsuu(IPhysicsObject olio, Vector shokki)
146    {
147        if (olio.Tag.Equals("esine") && !olio.IsDestroyed)
148        {
149            inventory.AddItem((PhysicsObject)olio, olio.Image);
150        }
151
152        olio.Destroy();
153    }
154
155    void LuoTaso(Vector paikka, double leveys, double korkeus)
156    {
157        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
158        taso.Position = paikka;
159        taso.Image = maapalakuva;
160        taso.CollisionIgnoreGroup = 1;
161        Add(taso);
162
163        Mouse.ListenOn(taso, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso); }, null);
164    }
165
166
167    void LuoTaso2(Vector paikka, double leveys, double korkeus)
168    {
169        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
170        taso2.Position = paikka;
171        taso2.Image = kivikuva;
172        taso2.CollisionIgnoreGroup = 1;
173        Add(taso2);
174        if (RandomGen.NextInt(0, 100) < 20)
175        {
176            EsineValitsin(paikka);
177        }
178
179        Mouse.ListenOn(taso2, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso2); }, null);
180    }
181
182    void LuoTaso3(Vector paikka, double leveys, double korkeus)
183    {
184        PhysicsObject taso3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
185        taso3.Position = paikka;
186        taso3.Image = kivi2kuva;
187        taso3.CollisionIgnoreGroup = 1;
188        Add(taso3);
189
190        if (RandomGen.NextInt(0, 100) < 20)
191        {
192            EsineValitsin(paikka);
193        }
194
195        Mouse.ListenOn(taso3, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso3); }, null);
196    }
197
198    void LuoTaso4(Vector paikka, double leveys, double korkeus)
199    {
200        PhysicsObject taso4 = PhysicsObject.CreateStaticObject(leveys, korkeus);
201        taso4.IgnoresExplosions = true;
202        taso4.Position = paikka;
203        taso4.Image = seinakuva;
204        taso4.CollisionIgnoreGroup = 1;
205        Add(taso4);
206
207
208    }
209
210    void LuoTaso5(Vector paikka, double leveys, double korkeus)
211    {
212        PhysicsObject taso5 = PhysicsObject.CreateStaticObject(leveys, korkeus);
213        taso5.Position = paikka;
214        taso5.Image = alinkuva;
215        taso5.CollisionIgnoreGroup = 1;
216        Add(taso5);
217
218        Mouse.ListenOn(taso5, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso5); }, null);
219    }
220
221    void LuoTaso6(Vector paikka, double leveys, double korkeus)
222    {
223        PhysicsObject taso6 = PhysicsObject.CreateStaticObject(leveys, korkeus);
224        taso6.Position = paikka;
225        taso6.Image = ruohokuva;
226        taso6.CollisionIgnoreGroup = 1;
227        Add(taso6);
228
229        Mouse.ListenOn(taso6, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso6); }, null);
230    }
231
232    void LuoTaso7(Vector paikka, double leveys, double korkeus)
233    {
234        PhysicsObject taso7 = PhysicsObject.CreateStaticObject(leveys, korkeus);
235        taso7.Position = paikka;
236        taso7.Image = alempikuva;
237        taso7.CollisionIgnoreGroup = 1;
238        Add(taso7);
239
240        Mouse.ListenOn(taso7, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso7); }, null);
241    }
242
243    void LuoTaso8(Vector paikka, double leveys, double korkeus)
244    {
245        PhysicsObject taso8 = PhysicsObject.CreateStaticObject(leveys, korkeus);
246        taso8.Position = paikka;
247        taso8.Image = kivi3kuva;
248        taso8.CollisionIgnoreGroup = 1;
249        Add(taso8);
250
251        Mouse.ListenOn(taso8, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso8); }, null);
252    }
253
254    void LuoTaso9(Vector paikka, double leveys, double korkeus)
255    {
256        PhysicsObject taso9 = PhysicsObject.CreateStaticObject(leveys, korkeus);
257        taso9.IgnoresExplosions = true;
258        taso9.Position = paikka;
259        taso9.Image = seinakuva2;
260        taso9.CollisionIgnoreGroup = 1;
261        Add(taso9);
262
263
264    }
265}
266
267class Inventory : Widget
268{
269    /// <summary>
270    /// Tapahtuma, kun esine on valittu.
271    /// </summary>
272    public event Action<PhysicsObject> ItemSelected;
273
274    /// <summary>
275    /// Luo uuden esinevalikon.
276    /// </summary>
277    public Inventory()
278        : base(new VerticalLayout())
279    {
280    }
281
282    /// <summary>
283    /// Lisää esineen.
284    /// </summary>
285    /// <param name="item">Lisättävä esine.</param>
286    ///<param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
287    public void AddItem(PhysicsObject item, Image kuva)
288    {
289        PushButton icon = new PushButton(100, 100, kuva);
290 
291        Add(icon);
292        icon.Clicked += delegate() { SelectItem(item); };
293    }
294
295    void SelectItem(PhysicsObject item)
296    {
297        if (ItemSelected != null)
298        {
299            ItemSelected(item);
300        }
301    }
302}
Note: See TracBrowser for help on using the repository browser.