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

Revision 6448, 8.9 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("");
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            if (Mouse.PositionOnScreen.Y > Screen.Top - 100)
76            {
77                Camera.Move(new Vector(0, 10));
78            }
79            else if (Mouse.PositionOnScreen.Y < Screen.Bottom + 100)
80            {
81                Camera.Move(new Vector(0, -10));
82            }
83        }, "");
84       
85        IsFullScreen = true;
86    }
87
88    void EsineValitsin(Vector paikka)
89    {
90        int arpa = RandomGen.NextInt(0, 100);
91        if (arpa <= 50)
92        {
93            EsineLuoja(paikka, "TNT");
94        }
95        else if (arpa <= 70) 
96        {
97            EsineLuoja(paikka, "plutonium");
98        }
99        else
100        {
101            EsineLuoja(paikka, "Kukka");
102        }
103       
104
105    }
106
107    void EsineLuoja(Vector paikka, String tag)
108    {
109        PhysicsObject esine = PhysicsObject.CreateStaticObject(LoadImage(tag));
110        esine.Position = paikka;
111        esine.Tag = "esine";
112        Add(esine, 1);
113    }
114
115    void rajayta(PhysicsObject taso)
116    {
117        bool voikaivaa = false;
118        Vector[] suunnat = { new Vector(-1, 0), new Vector(1, 0), new Vector(0, -1), new Vector(0, 1) };
119
120        foreach (var suunta in suunnat)
121        {
122            GameObject palikka = GetObjectAt(taso.Position + suunta * ruudunkoko);
123            if (palikka == null)
124            {
125                voikaivaa = true;
126                break;
127            }
128
129     
130        }
131
132        if (voikaivaa && inventory.Objects.Count > 0)
133        {
134            inventory.Objects.Remove(inventory.Objects[0]);
135
136            Explosion rajahdys = new Explosion(ruudunkoko);
137            rajahdys.Position = taso.Position;
138            rajahdys.ShockwaveReachesObject += PaineaaltoOsuu;
139            Add(rajahdys);
140            taso.Destroy();
141        }
142    }
143
144    void PaineaaltoOsuu(IPhysicsObject olio, Vector shokki)
145    {
146        if (olio.Tag.Equals("esine") && !olio.IsDestroyed)
147        {
148            inventory.AddItem((PhysicsObject)olio, olio.Image);
149        }
150
151        olio.Destroy();
152    }
153
154    void LuoTaso(Vector paikka, double leveys, double korkeus)
155    {
156        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
157        taso.Position = paikka;
158        taso.Image = maapalakuva;
159        taso.CollisionIgnoreGroup = 1;
160        Add(taso);
161
162        Mouse.ListenOn(taso, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso); }, null);
163    }
164
165
166    void LuoTaso2(Vector paikka, double leveys, double korkeus)
167    {
168        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(leveys, korkeus);
169        taso2.Position = paikka;
170        taso2.Image = kivikuva;
171        taso2.CollisionIgnoreGroup = 1;
172        Add(taso2);
173        if (RandomGen.NextInt(0, 100) < 20)
174        {
175            EsineValitsin(paikka);
176        }
177
178        Mouse.ListenOn(taso2, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso2); }, null);
179    }
180
181    void LuoTaso3(Vector paikka, double leveys, double korkeus)
182    {
183        PhysicsObject taso3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
184        taso3.Position = paikka;
185        taso3.Image = kivi2kuva;
186        taso3.CollisionIgnoreGroup = 1;
187        Add(taso3);
188
189        if (RandomGen.NextInt(0, 100) < 20)
190        {
191            EsineValitsin(paikka);
192        }
193
194        Mouse.ListenOn(taso3, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso3); }, null);
195    }
196
197    void LuoTaso4(Vector paikka, double leveys, double korkeus)
198    {
199        PhysicsObject taso4 = PhysicsObject.CreateStaticObject(leveys, korkeus);
200        taso4.IgnoresExplosions = true;
201        taso4.Position = paikka;
202        taso4.Image = seinakuva;
203        taso4.CollisionIgnoreGroup = 1;
204        Add(taso4);
205
206
207    }
208
209    void LuoTaso5(Vector paikka, double leveys, double korkeus)
210    {
211        PhysicsObject taso5 = PhysicsObject.CreateStaticObject(leveys, korkeus);
212        taso5.Position = paikka;
213        taso5.Image = alinkuva;
214        taso5.CollisionIgnoreGroup = 1;
215        Add(taso5);
216
217        Mouse.ListenOn(taso5, MouseButton.Left, ButtonState.Pressed, delegate { rajayta(taso5); }, null);
218    }
219
220    void LuoTaso6(Vector paikka, double leveys, double korkeus)
221
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.Position = paikka;
258        taso9.Image = kivi3kuva;
259        taso9.CollisionIgnoreGroup = 1;
260        Add(taso9);
261    }
262
263}
264
265class Inventory : Widget
266{
267    /// <summary>
268    /// Tapahtuma, kun esine on valittu.
269    /// </summary>
270    public event Action<PhysicsObject> ItemSelected;
271
272    /// <summary>
273    /// Luo uuden esinevalikon.
274    /// </summary>
275    public Inventory()
276        : base(new VerticalLayout())
277    {
278    }
279
280    /// <summary>
281    /// Lisää esineen.
282    /// </summary>
283    /// <param name="item">Lisättävä esine.</param>
284    ///<param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
285    public void AddItem(PhysicsObject item, Image kuva)
286    {
287        PushButton icon = new PushButton(100, 100, kuva);
288 
289        Add(icon);
290        icon.Clicked += delegate() { SelectItem(item); };
291    }
292
293    void SelectItem(PhysicsObject item)
294    {
295        if (ItemSelected != null)
296        {
297            ItemSelected(item);
298        }
299    }
300}
Note: See TracBrowser for help on using the repository browser.