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

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