source: 2016/24/JustusL/Object_Ball/Object_Ball/Object_Ball/Object_Ball.cs @ 7724

Revision 7724, 11.2 KB checked in by juleppaa, 3 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 Object_Ball : PhysicsGame
10{
11    Image kaarikuva = LoadImage("kaarikakka");
12    Image kursori = LoadImage("palikka kursori");
13    Image Maali = LoadImage("maali_objectBall");
14    Image tauste = LoadImage("ruutu");
15
16    double RUUDUN_KOKO = 150;
17
18    Image[] painikeKuvat = LoadImages("kaariosa", "kyna", "palikka");
19
20    bool liikkes;
21
22    Label hiiri;
23    PhysicsObject pallo;
24    PhysicsObject maali;
25   
26
27
28    GameObject haamu;
29
30    Timer ajastin;
31
32    int tyokalu = -1;
33    Vector hiirenEdellinenPaikka = Vector.Zero;
34
35
36    public override void Begin()
37    {
38
39       
40        liikkes = false;
41        haamu = null;
42        Gravity = new Vector(0, -70);
43
44        Level.Width = 10000;
45        Level.Height = 10000;
46        Level.CreateBorders();
47
48        //Level.Background.Image = tauste;
49        //Level.Background.TileToLevel();
50
51        GameObject tausta = new GameObject(Level.Width, Level.Height);
52        tausta.Image = tauste;
53        tausta.TextureWrapSize = new Vector(300, 300);
54        Add(tausta, -3);
55      Camera.Follow(pallo);
56        Palikat();
57        Ohjaimet();
58        LuoSlider();
59        LuoKauppa();
60        Grafiikat();
61
62
63        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
64
65        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
66       /* ruudut.SetTileMethod(Color.Green, );
67        ruudut.SetTileMethod(Color.Black, LuoTaso);
68        ruudut.SetTileMethod(Color.Yellow, LuoTahti);
69
70        //3. Execute luo kentän
71        //   Parametreina leveys ja korkeus
72        ruudut.Execute(20, 20);*/
73    }
74
75    void LuoKauppa()
76    {
77        for (int i = 0; i < painikeKuvat.Length; i++)
78        {
79            LuoKauppaPainike(painikeKuvat[i], i);
80        }
81
82    }
83
84    void LuoKauppaPainike(Image kuvake, int paikka)
85    {
86        var kuva = new PushButton(kuvake);
87        kuva.Size = new Vector(1, 1) * RUUDUN_KOKO;
88        kuva.X = Window.ClientBounds.Width / 2 - 100;
89        kuva.Y = Window.ClientBounds.Height / 2 - (200 + RUUDUN_KOKO * paikka);
90        kuva.Color = Color.Green;
91        Add(kuva);
92
93        /*
94        liukusaadin.X = Window.ClientBounds.Width / 2 - 100;
95        liukusaadin.Y = Screen.TopSafe - 80;
96         * */
97
98
99        kuva.Clicked += delegate
100        {
101            tyokalu = paikka;
102
103            if (tyokalu == 0 || tyokalu == 2)
104            {
105                if (haamu != null) haamu.Destroy();
106                haamu = new GameObject(100, 100);
107                Add(haamu);
108                if (tyokalu == 0) haamu.Image = kaarikuva;
109                if (tyokalu == 2) haamu.Color = Color.Black;
110            }
111        };
112
113    }
114
115    void Ohjaimet()
116    {
117        IsMouseVisible = true;
118        Mouse.IsCursorVisible = false;
119
120        Mouse.Listen(MouseButton.Middle, ButtonState.Down, SeuraajaKamera, "Move Camera");
121        Mouse.ListenWheel(Zoomaa, null);
122
123        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, HiiriPainettu, null);
124        Mouse.Listen(MouseButton.Left, ButtonState.Down, HiiriAlhaalla, null);
125
126        Keyboard.Listen(Key.Escape, ButtonState.Pressed, PauseValikko, "Pause");
127        Keyboard.Listen(Key.Enter, ButtonState.Pressed, PalloLiikkeelle, "Start");
128
129        Keyboard.Listen(Key.NumPad1, ButtonState.Down, MuutaKulmaa, null, 1);
130        Keyboard.Listen(Key.NumPad3, ButtonState.Down, MuutaKulmaa, null, -1);
131        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaSkaalaa, null, new Vector(1,0));
132        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaSkaalaa, null, new Vector(-1, 0));
133        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaSkaalaa, null, new Vector(0, 1));
134        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaSkaalaa, null, new Vector(0, -1));
135    }
136
137    void HiiriPainettu()
138    {
139        if (tyokalu == 0 && !liikkes)
140        {
141           
142            PhysicsObject kaari = PhysicsObject.CreateStaticObject(haamu.Width, haamu.Height);
143            kaari.Shape = Shape.FromImage(kaarikuva);
144            kaari.Angle = haamu.Angle;
145            kaari.Image = kaarikuva;
146            kaari.Position = Mouse.PositionOnWorld;
147            Add(kaari);
148        }
149        if (tyokalu == 2 && !liikkes)
150        {
151            PhysicsObject kuutio = PhysicsObject.CreateStaticObject(haamu.Width, haamu.Height);
152            kuutio.Shape = Shape.Rectangle;
153            kuutio.Angle = haamu.Angle;
154            kuutio.Color = Color.Black;
155            kuutio.Position = Mouse.PositionOnWorld;
156            Add(kuutio);
157
158        }
159        hiirenEdellinenPaikka = Mouse.PositionOnWorld;
160    }
161
162    void HiiriAlhaalla()
163    {
164        if (Mouse.PositionOnScreen.X > Screen.Right - 180)
165        {
166            hiirenEdellinenPaikka = Mouse.PositionOnWorld;
167            return;
168        }
169
170       
171        if (tyokalu == 1)
172        {
173            if (haamu != null) haamu.Destroy();
174            Vector suunta = Mouse.PositionOnWorld - hiirenEdellinenPaikka;
175           
176            int pallojenMaara = 1 + (int)Math.Round(suunta.Magnitude / 5.0);
177
178            for (int i = 0; i < pallojenMaara; i++)
179            {
180                PhysicsObject piste = PhysicsObject.CreateStaticObject(5, 5);
181                piste.Position = hiirenEdellinenPaikka + suunta * (i / (float)pallojenMaara);
182                piste.Color = Color.Black;
183                piste.Shape = Shape.Circle;
184                Add(piste);
185            }
186        }
187     
188
189        hiirenEdellinenPaikka = Mouse.PositionOnWorld;
190    }
191
192    void MuutaKulmaa( int muutos)
193    {
194        if(tyokalu == 0 || tyokalu == 2)
195        {
196            haamu.Angle += Angle.FromDegrees(muutos);
197        }
198    }
199    void MuutaSkaalaa(Vector skaala)
200    {
201        if (haamu != null && (haamu.Size+skaala).X > 0 && (haamu.Size + skaala).Y > 0)
202        {
203            haamu.Size += skaala;
204        }
205    }
206    void Palikat()
207    {
208        pallo = new PhysicsObject(25.0, 25.0);
209        pallo.Shape = Shape.Circle;
210        pallo.Color = Color.Red;
211        pallo.IgnoresPhysicsLogics = true;
212        Add(pallo);
213        AddCollisionHandler(pallo, "maali", Voitto);
214        AddCollisionHandler(pallo, "tahti", Kerays);
215
216       
217
218        maali = PhysicsObject.CreateStaticObject(70, 70);
219        maali.Tag = "maali";
220        maali.Image = Maali;
221        maali.X = 700;
222        maali.Y = -400;
223
224        Add(maali);
225
226        LuoTahti();
227        LuoTahti();
228
229
230    }
231    void LuoTahti()
232    {
233        PhysicsObject tahti = PhysicsObject.CreateStaticObject(25, 25);
234        tahti.Shape = Shape.Star;
235        tahti.Color = Color.HotPink;
236        tahti.Tag = "tahti";
237        tahti.X = 100;
238
239        Add(tahti);
240    }
241
242    void Kerays(PhysicsObject pallo, PhysicsObject tahti)
243    {
244        tahti.Destroy();
245        MessageDisplay.Add("Moi!");
246       IntMeter pisteLaskuri = new IntMeter(0);
247
248        Label pisteNaytto = new Label();
249        pisteNaytto.X = Screen.Left + 100;
250        pisteNaytto.Y = Screen.Top - 100;
251        pisteNaytto.TextColor = Color.Black;
252        pisteNaytto.Color = Color.White;
253        pisteNaytto.BindTo(pisteLaskuri);
254        Add(pisteNaytto);
255
256        pisteLaskuri.Value++;
257    }
258
259
260
261    void Grafiikat()
262    {
263       hiiri = new Label(50, 50);
264       hiiri.Image = kursori;
265       
266        Mouse.ListenMovement(0.0, HiirenSeuraus, null);
267        Add(hiiri);
268
269
270    }
271    void HiirenSeuraus(AnalogState hiirenTila)
272    {
273        hiiri.Position = Mouse.PositionOnWorld;
274        hiiri.Position = Mouse.PositionOnScreen;
275        Camera.StayInLevel = true;
276        if (haamu != null)
277        {
278            haamu.Position = Mouse.PositionOnWorld;
279        }
280
281    }
282    void PalloLiikkeelle()
283    {
284        //Add(pallo);
285        Camera.Follow(pallo);
286        Keyboard.Disable(Key.Enter);
287        pallo.IgnoresPhysicsLogics = false;
288        if (haamu != null) haamu.Destroy();
289        //tyokalu = -1;
290
291        liikkes = true;
292
293        ajastin = new Timer();
294        ajastin.Interval = 0.5;
295        ajastin.Timeout += TarkistaNopeus;
296        ajastin.Start();
297
298    }
299
300    void TarkistaNopeus()
301    {
302        if (pallo.Velocity.Magnitude < 0.04)
303        {
304
305            Havio();
306        }
307    }
308
309    void SeuraajaKamera()
310    {
311        Camera.X = Mouse.PositionOnWorld.X * 0.5;
312        Camera.Y = Mouse.PositionOnWorld.Y * 0.5;
313    }
314    void LuoSlider()
315    {
316        DoubleMeter zoomausKerroin = new DoubleMeter(0, -100, 0);
317        zoomausKerroin.Changed += ZoomaaKenttaa;
318
319        Slider liukusaadin = new Slider(50, 20);
320        liukusaadin.BindTo(zoomausKerroin);
321       
322        liukusaadin.X = Window.ClientBounds.Width / 2 - 100;
323        liukusaadin.Y = Screen.TopSafe - 80;
324
325        liukusaadin.Color = Color.Pink;
326        liukusaadin.Knob.Color = Color.Black;
327        liukusaadin.Track.Color = Color.Blue;
328        liukusaadin.BorderColor = Color.Red;
329        Add(liukusaadin);
330    }
331
332
333    void ZoomaaKenttaa(double vanhaArvo, double uusiArvo)
334    {
335        Camera.ZoomFactor = 1 + uusiArvo;
336    }
337    void Zoomaa()
338    {
339        Camera.ZoomFactor += Mouse.WheelChange * 0.05;
340    }
341    void PauseValikko()
342    {
343        Pause();
344        MultiSelectWindow pausevalikko = new MultiSelectWindow("Pause", "Resume", "Restart", "Options", "Menu", "Quit");
345        pausevalikko.BorderColor = Color.Red;
346        pausevalikko.Font = Font.DefaultBold;
347       
348        pausevalikko.SetButtonTextColor(Color.DarkGray);
349        pausevalikko.SetButtonColor(Color.Transparent);
350        pausevalikko.Color = Color.Transparent;
351        pausevalikko.QuestionLabel.TextColor = Color.DarkRed;
352       
353        Add(pausevalikko);
354        pausevalikko.AddItemHandler(0, Pause);
355        pausevalikko.AddItemHandler(1, Uudestaan);
356        pausevalikko.AddItemHandler(2, Asetukset);
357        pausevalikko.AddItemHandler(4, ConfirmExit);
358
359    }
360    void Asetukset()
361    {
362        MultiSelectWindow asetukset = new MultiSelectWindow("Options", "Back", "Sound", "Graphic");
363        Add(asetukset);
364        asetukset.AddItemHandler(0, delegate
365        {
366            Pause();
367            PauseValikko();
368        });
369
370
371    }
372    void Havio()
373    {
374        ajastin.Stop();
375        MultiSelectWindow havio = new MultiSelectWindow("YOU LOST!!!", "Try again", "Menu", "Quit");
376        Add(havio);
377
378        havio.AddItemHandler(0, Uudestaan);
379        havio.AddItemHandler(2, ConfirmExit);
380    }
381
382
383    void Voitto(PhysicsObject pallo, PhysicsObject maali)
384    {
385        pallo.Destroy();
386        MultiSelectWindow voittoValikko = new MultiSelectWindow("Nice job!","Next", "Again?", "Menu", "Quit");
387        Add(voittoValikko);
388        voittoValikko.AddItemHandler(0, Uudestaan);
389        voittoValikko.AddItemHandler(2, ConfirmExit);
390        /*MessageDisplay.Add("You are good!");
391        Timer.SingleShot(3, Exit);*/
392    }
393
394    void Uudestaan() 
395    {
396        IsPaused = false;
397        ClearAll();
398        tyokalu = -1;
399        Begin();
400    }
401           
402           
403
404}
Note: See TracBrowser for help on using the repository browser.