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

Revision 8057, 18.0 KB checked in by juleppaa, 3 years ago (diff)

valmiihko

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    Image troll = LoadImage("trollface");
16
17
18    double RUUDUN_KOKO = 150;
19
20    Image[] painikeKuvat = LoadImages("kaariosa", "kyna", "palikka");
21
22    bool liikkes;
23    int kenttaNro = 1;
24    IntMeter pisteLaskuri;
25    Label hiiri;
26    PhysicsObject pallo;
27    PhysicsObject maali;
28
29    Vector hiirenLiike = Vector.Zero;
30
31    GameObject haamu;
32
33    Timer ajastin;
34
35    int tyokalu = -1;
36    Vector hiirenEdellinenPaikka = Vector.Zero;
37
38
39    public override void Begin()
40    {
41        ClearAll();
42        AlkuValikko();
43       
44
45       
46    }
47    void AloitaPeli()
48    {
49        liikkes = false;
50        haamu = null;
51        Gravity = new Vector(0, -70);
52
53
54
55        //Level.Background.Image = tauste;
56        //Level.Background.TileToLevel();
57
58
59        //Camera.Follow(pallo);
60        Camera.StopFollowing();
61
62        Ohjaimet();
63        LuoSlider();
64        LuoKauppa();
65        Grafiikat();
66
67
68        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta" + kenttaNro);
69
70        //2. Kerrotaan mitä aliohjelmaa kutsutaan, kun tietyn värinen pikseli tulee vastaan kuvatiedostossa.
71        ruudut.SetTileMethod(Color.Red, LuoPallo);
72        //ruudut.SetTileMethod(, LuoTaso);
73        ruudut.SetTileMethod(new Color(255, 14, 255), LuoTahti);
74        ruudut.SetTileMethod(new Color(0, 255, 0), LuoMaali);
75
76        //3. Execute luo kentän
77        //   Parametreina leveys ja korkeus
78        ruudut.Execute(5, 5);
79
80        Level.Width = 1000;
81        Level.Height = 1000;
82        GameObject tausta = new GameObject(Level.Width, Level.Height);
83        tausta.Image = tauste;
84        tausta.TextureWrapSize = new Vector(300, 300);
85        Add(tausta, -3);
86        Level.CreateBorders();
87
88        pisteLaskuri = new IntMeter(0);
89
90        Label pisteNaytto = new Label();
91        pisteNaytto.IntFormatString = " {0:D1} Stars collected ";
92        pisteNaytto.TextColor = Color.HotPink;
93        pisteNaytto.X = Screen.Right - 100;
94        pisteNaytto.Y = Screen.Top - 108;
95        pisteNaytto.TextColor = Color.HotPink;
96        pisteNaytto.Color = Color.Black;
97        pisteNaytto.BindTo(pisteLaskuri);
98        Add(pisteNaytto);
99    }
100
101    void LuoKauppa()
102    {
103        for (int i = 0; i < painikeKuvat.Length; i++)
104        {
105            LuoKauppaPainike(painikeKuvat[i], i);
106        }
107
108    }
109
110    void LuoKauppaPainike(Image kuvake, int paikka)
111    {
112        var kuva = new PushButton(kuvake);
113        kuva.Size = new Vector(1, 1) * RUUDUN_KOKO;
114        kuva.X = Window.ClientBounds.Width / 2 - 100;
115        kuva.Y = Window.ClientBounds.Height / 2 - (200 + RUUDUN_KOKO * paikka);
116        kuva.Color = Color.Green;
117        Add(kuva);
118
119        /*
120        liukusaadin.X = Window.ClientBounds.Width / 2 - 100;
121        liukusaadin.Y = Screen.TopSafe - 80;
122         * */
123
124
125        kuva.Clicked += delegate
126        {
127            tyokalu = paikka;
128
129            if (tyokalu == 0 || tyokalu == 2)
130            {
131                if (haamu != null) haamu.Destroy();
132                haamu = new GameObject(20, 20);
133                haamu.Color = new Color(0, 0, 0, 128);
134                Add(haamu);
135                if (tyokalu == 0)haamu.Shape = Shape.FromImage(kaarikuva);
136               
137               
138            }
139        };
140
141    }
142
143    void Ohjaimet()
144    {
145        IsMouseVisible = true;
146        Mouse.IsCursorVisible = false;
147
148        Mouse.Listen(MouseButton.Middle, ButtonState.Down, SeuraajaKamera, "Move Camera");
149        Mouse.ListenWheel(Zoomaa, null);
150
151        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, HiiriPainettu, null);
152        Mouse.Listen(MouseButton.Left, ButtonState.Down, HiiriAlhaalla, null);
153
154        Keyboard.Listen(Key.Escape, ButtonState.Pressed, PauseValikko, "Pause");
155        Keyboard.Listen(Key.Enter, ButtonState.Pressed, PalloLiikkeelle, "Start");
156        Keyboard.Listen(Key.NumPad1, ButtonState.Down, MuutaKulmaa, null, 1);
157        Keyboard.Listen(Key.NumPad3, ButtonState.Down, MuutaKulmaa, null, -1);
158        Keyboard.Listen(Key.A, ButtonState.Down, MuutaKulmaa, null, 1);
159        Keyboard.Listen(Key.Z, ButtonState.Down, MuutaKulmaa, null, -1);
160        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaSkaalaa, null, new Vector(1,0));
161        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaSkaalaa, null, new Vector(-1, 0));
162        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaSkaalaa, null, new Vector(0, 1));
163        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaSkaalaa, null, new Vector(0, -1));
164    }
165
166    void HiiriPainettu()
167    {
168        if (tyokalu == 0 && !liikkes)
169        {
170           
171            PhysicsObject kaari = PhysicsObject.CreateStaticObject(haamu.Width, haamu.Height);
172            kaari.Shape = Shape.FromImage(kaarikuva);
173            kaari.Angle = haamu.Angle;
174            kaari.Image = kaarikuva;
175            kaari.Position = Mouse.PositionOnWorld;
176            Add(kaari);
177        }
178        if (tyokalu == 2 && !liikkes)
179        {
180            PhysicsObject kuutio = PhysicsObject.CreateStaticObject(haamu.Width, haamu.Height);
181            kuutio.Shape = Shape.Rectangle;
182            kuutio.Angle = haamu.Angle;
183            kuutio.Color = Color.Black;
184            kuutio.Position = Mouse.PositionOnWorld;
185            Add(kuutio);
186
187        }
188        hiirenEdellinenPaikka = Mouse.PositionOnWorld;
189    }
190
191    void HiiriAlhaalla()
192    {
193        if (Mouse.PositionOnScreen.X > Screen.Right - 180)
194        {
195            hiirenEdellinenPaikka = Mouse.PositionOnWorld;
196            return;
197        }
198
199       
200        if (tyokalu == 1)
201        {
202            if (haamu != null) haamu.Destroy();
203            Vector suunta = Mouse.PositionOnWorld - hiirenEdellinenPaikka;
204           
205            int pallojenMaara = 1 + (int)Math.Round(suunta.Magnitude / 1.0);
206
207            for (int i = 0; i < pallojenMaara; i++)
208            {
209                PhysicsObject piste = PhysicsObject.CreateStaticObject(3, 3);
210                piste.Position = hiirenEdellinenPaikka + suunta * (i / (float)pallojenMaara);
211                piste.Color = Color.Black;
212                piste.Shape = Shape.Circle;
213                Add(piste);
214            }
215        }
216     
217
218        hiirenEdellinenPaikka = Mouse.PositionOnWorld;
219    }
220
221    void MuutaKulmaa( int muutos)
222    {
223        if(tyokalu == 0 || tyokalu == 2)
224        {
225            haamu.Angle += Angle.FromDegrees(muutos);
226        }
227    }
228    void MuutaSkaalaa(Vector skaala)
229    {
230        if (haamu != null && (haamu.Size+skaala).X > 0 && (haamu.Size + skaala).Y > 0)
231        {
232            haamu.Size += skaala;
233        }
234    }
235    void LuoMaali(Vector paikka, double leveys, double korkeus)
236    {
237       
238
239        maali = PhysicsObject.CreateStaticObject(leveys*2, korkeus*2);
240        maali.Tag = "maali";
241        maali.Image = Maali;
242        maali.Position = paikka;
243
244        Add(maali);
245 }
246    void LuoPallo(Vector paikka, double leveys, double korkeus)
247{
248     pallo = new PhysicsObject(leveys, korkeus);
249        pallo.Shape = Shape.Circle;
250        pallo.Color = Color.Red;
251        pallo.IgnoresPhysicsLogics = true;
252        Add(pallo);
253        pallo.Position = paikka;
254        AddCollisionHandler(pallo, "maali", Voitto);
255        AddCollisionHandler(pallo, "tahti", Kerays);
256
257        Add(pallo);
258}
259    void LuoTahti(Vector paikka, double leveys, double korkeus)
260    {
261        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
262        tahti.Shape = Shape.Star;
263        tahti.Color = Color.HotPink;
264        tahti.Tag = "tahti";
265        tahti.Position = paikka;
266        tahti.IgnoresCollisionResponse = true;
267        Add(tahti);
268    }
269
270    void Kerays(PhysicsObject pallo, PhysicsObject tahti)
271    {
272        tahti.Destroy();
273        MessageDisplay.Add(" You collected a star! ");
274       
275        pisteLaskuri.Value++;
276    }
277
278
279
280    void Grafiikat()
281    {
282       hiiri = new Label(50, 50);
283       hiiri.Image = kursori;
284       
285        Mouse.ListenMovement(0.0, HiirenSeuraus, null);
286        Add(hiiri);
287
288
289    }
290    void HiirenSeuraus(AnalogState hiirenTila)
291    {
292        hiirenLiike = hiirenTila.MouseMovement;
293
294        hiiri.Position = Mouse.PositionOnWorld;
295        hiiri.Position = Mouse.PositionOnScreen;
296        Camera.StayInLevel = true;
297        if (haamu != null)
298        {
299            haamu.Position = Mouse.PositionOnWorld;
300        }
301
302    }
303    void PalloLiikkeelle()
304    {
305        //Add(pallo);
306        Camera.Follow(pallo);
307        Keyboard.Disable(Key.Enter);
308        pallo.IgnoresPhysicsLogics = false;
309        if (haamu != null) haamu.Destroy();
310        //tyokalu = -1;
311
312        liikkes = true;
313
314        ajastin = new Timer();
315        ajastin.Interval = 0.5;
316        ajastin.Timeout += TarkistaNopeus;
317        ajastin.Start();
318
319    }
320
321    void TarkistaNopeus()
322    {
323        if (pallo.Velocity.Magnitude < 0.03)
324        {
325
326            Havio();
327        }
328    }
329
330    void SeuraajaKamera()
331    {
332        Camera.Position += -hiirenLiike;
333        //Camera.X = Mouse.PositionOnWorld.X * 0.5;
334        //Camera.Y = Mouse.PositionOnWorld.Y * 0.5;
335    }
336    void LuoSlider()
337    {
338        DoubleMeter zoomausKerroin = new DoubleMeter(0, -100, 0);
339        zoomausKerroin.Changed += ZoomaaKenttaa;
340
341        Slider liukusaadin = new Slider(50, 20);
342        liukusaadin.BindTo(zoomausKerroin);
343       
344        liukusaadin.X = Window.ClientBounds.Width / 2 - 100;
345        liukusaadin.Y = Screen.TopSafe - 80;
346
347        liukusaadin.Color = Color.Pink;
348        liukusaadin.Knob.Color = Color.Black;
349        liukusaadin.Track.Color = Color.Blue;
350        liukusaadin.BorderColor = Color.Red;
351        Add(liukusaadin);
352    }
353
354
355    void ZoomaaKenttaa(double vanhaArvo, double uusiArvo)
356    {
357        Camera.ZoomFactor = 1 + uusiArvo;
358    }
359    void Zoomaa()
360    {
361        Camera.ZoomFactor += Mouse.WheelChange * 0.07;
362    }
363    void YOUAREANIDIOT()
364    {
365        ClearAll();
366
367        Level.Background.Color = Color.Black;
368       
369        Explosion trollface = new Explosion(Screen.Height);
370        trollface.Image = troll;
371        trollface.Position = new Vector (0, 0);
372        trollface.Speed = 10.0;
373       
374        Add(trollface);
375        Keyboard.Listen(Key.LeftAlt, ButtonState.Down, Avaa, null);
376        Keyboard.Listen(Key.RightAlt, ButtonState.Down, Avaa, null);
377        Keyboard.Listen(Key.Escape, ButtonState.Down, Avaa, null);
378
379        Timer trolliajastin = new Timer();
380       
381       trolliajastin.Interval = 4;
382       trolliajastin.Timeout += Avaa;
383       trolliajastin.Start();
384
385    }
386 
387
388    void Avaa()
389    {
390        System.Diagnostics.Process.Start("trolloll");
391   }
392    void PeliOhje()
393    {
394        MultiSelectWindow peliohje = new MultiSelectWindow("\n Collect as many stars as you can and go to goal by making a track. \n You can make the track with blocks and curves which you can resize and change angle \n or you can draw a line with pencil tool. \n \n Starting playing: \n \n -Choose tool from right edge \n \n if tool = pencil you can draw if tool = curve or block you can rezize it \n (try arrowkeys) \n or you can rotate it \n (clockwise z or numpad 3 and counterclockwise a or numpad 1) \n ", "OK");
395
396        Add(peliohje);
397
398        peliohje.AddItemHandler(0, AlkuValikko);
399    }
400
401    void AlkuValikko()
402    {
403        MultiSelectWindow alkuvalikko = new MultiSelectWindow("Object Ball", "Levels","Info", "Options", "Quit");
404
405        Add(alkuvalikko);
406
407        alkuvalikko.AddItemHandler(0, AloitaPeli);
408        alkuvalikko.AddItemHandler(1, Info);
409        alkuvalikko.AddItemHandler(2, AlkuAsetukset);
410        alkuvalikko.AddItemHandler(3, Poistuminen);
411
412        alkuvalikko.BorderColor = Color.Red;
413        alkuvalikko.Font = Font.DefaultBold;
414        alkuvalikko.SetButtonTextColor(Color.Black);
415        alkuvalikko.SetButtonColor(new Color(1.0, 0, 0, 0.4));
416        alkuvalikko.SelectionColor = Color.DarkRed;
417        alkuvalikko.Color = new Color(255, 255, 255, 0.4);
418        alkuvalikko.QuestionLabel.TextColor = Color.DarkRed;
419
420    }
421    void AlkuAsetukset()
422    {
423        MultiSelectWindow alkuasetukset = new MultiSelectWindow("\n Options", "Back", "Sound", "Saving");
424
425        Add(alkuasetukset);
426
427        alkuasetukset.AddItemHandler(0, AlkuValikko);
428
429        alkuasetukset.BorderColor = Color.Red;
430        alkuasetukset.Font = Font.DefaultBold;
431        alkuasetukset.SetButtonTextColor(Color.Black);
432        alkuasetukset.SetButtonColor(new Color(1.0, 0, 0, 0.4));
433        alkuasetukset.SelectionColor = Color.DarkRed;
434        alkuasetukset.Color = new Color(255, 255, 255, 0.4);
435        alkuasetukset.QuestionLabel.TextColor = Color.DarkRed;
436
437    }
438    void Info()
439    {
440        MultiSelectWindow infovalikko = new MultiSelectWindow("Info", "Back", "Playing", "Credis");
441
442        Add(infovalikko);
443
444        infovalikko.AddItemHandler(0, AlkuValikko);
445        infovalikko.AddItemHandler(1, PeliOhje);
446
447
448       infovalikko.BorderColor = Color.Red;
449       infovalikko.Font = Font.DefaultBold;
450       infovalikko.SetButtonTextColor(Color.Black);
451       infovalikko.SetButtonColor(new Color(1.0, 0, 0, 0.4));
452       infovalikko.SelectionColor = Color.DarkRed;
453       infovalikko.Color = new Color(255, 255, 255, 0.4);
454       infovalikko.QuestionLabel.TextColor = Color.DarkRed;
455    }
456
457    void PauseValikko()
458    {
459        Pause();
460        MultiSelectWindow pausevalikko = new MultiSelectWindow("\n Pause", "Resume", "Restart", "Options", "Menu", "Quit");
461
462        pausevalikko.BorderColor = Color.Red;
463        pausevalikko.Font = Font.DefaultBold;
464        pausevalikko.SetButtonTextColor(Color.Black);
465        pausevalikko.SetButtonColor(new Color(1.0 , 0, 0, 0.4));
466        pausevalikko.SelectionColor = Color.DarkRed;
467        pausevalikko.Color = new Color(255, 255, 255, 0.4);
468        pausevalikko.QuestionLabel.TextColor = Color.DarkRed;
469       
470        Add(pausevalikko);
471        pausevalikko.AddItemHandler(0, Pause);
472        pausevalikko.AddItemHandler(1, Uudestaan);
473        pausevalikko.AddItemHandler(2, Asetukset);
474        pausevalikko.AddItemHandler(3, AlkuValikko);
475        pausevalikko.AddItemHandler(4, Poistuminen);
476
477    }
478    void Asetukset()
479    {
480        MultiSelectWindow asetukset = new MultiSelectWindow("\n Options", "Back", "Sound", "Graphic");
481        Add(asetukset);
482        asetukset.BorderColor = Color.Red;
483        asetukset.Font = Font.DefaultBold;
484        asetukset.SetButtonTextColor(Color.Black);
485        asetukset.SetButtonColor(new Color(1.0, 0, 0, 0.4));
486        asetukset.SelectionColor = Color.DarkRed;
487        asetukset.Color = new Color(255, 255, 255, 0.4);
488        asetukset.QuestionLabel.TextColor = Color.DarkRed;
489        asetukset.AddItemHandler(0, delegate
490        {
491            Pause();
492            PauseValikko();
493        });
494
495
496    }
497    void Havio()
498    {
499        ajastin.Stop();
500        MultiSelectWindow havio = new MultiSelectWindow("YOU LOST!!!", "Try again", "Menu", "Quit");
501        Add(havio);
502        havio.SelectionColor = Color.Black;
503        havio.BorderColor = Color.DarkRed;
504        havio.SetButtonColor(Color.DarkRed);
505        havio.QuestionLabel.TextColor = Color.Red;
506        havio.AddItemHandler(0, Uudestaan);
507        havio.AddItemHandler(1, AlkuValikko);
508        havio.AddItemHandler(2, Poistuminen);
509    }
510
511
512    void Voitto(PhysicsObject pallo, PhysicsObject maali)
513    {
514        pallo.Destroy();
515        string pisteIlmoitus;
516        if (pisteLaskuri.Value != 1)
517        {
518            pisteIlmoitus = "With " + pisteLaskuri.Value + " Stars";
519        }                   
520        else                 
521        {                   
522            pisteIlmoitus = "With " + pisteLaskuri.Value + " Star";
523        }
524       
525        MultiSelectWindow voittoValikko = new MultiSelectWindow("\n Nice job! \n\n Level " + kenttaNro + " Completed \n \n " + pisteIlmoitus, "Next", "Again?", "Menu", "Quit");
526        voittoValikko.BorderColor = Color.Red;
527        voittoValikko.Font = Font.DefaultBold;
528        voittoValikko.SetButtonTextColor(Color.Black);
529        voittoValikko.SetButtonColor(new Color(1.0, 0, 0, 0.4));
530        voittoValikko.SelectionColor = Color.DarkRed;
531        voittoValikko.Color = new Color(255, 255, 255, 0.4);
532        voittoValikko.QuestionLabel.TextColor = Color.DarkRed;
533        Add(voittoValikko);
534        voittoValikko.AddItemHandler(0, SeuraavaKentta);
535        voittoValikko.AddItemHandler(1, Uudestaan);
536
537        voittoValikko.AddItemHandler(3, Poistuminen);
538        /*MessageDisplay.Add("You are good!");
539        Timer.SingleShot(3, Exit);*/
540    }
541    void SeuraavaKentta()
542    {
543        kenttaNro++;
544        Uudestaan();
545    }
546    void Uudestaan() 
547    {
548        IsPaused = false;
549        ClearAll();
550        tyokalu = -1;
551        //if (kenttaNro > 2) ; //Tähän kolmosen kohdalle tulee kenttien lukumäärä
552       // else Begin("kentta" + kenttaNro);
553        AloitaPeli();
554    }
555          void Poistuminen()
556    {
557        MultiSelectWindow lopetusVarmistus = new MultiSelectWindow("Are you idiot?", "\n Yes \n", "\n No\n");
558        lopetusVarmistus.BorderColor = Color.Red;
559        lopetusVarmistus.Font = Font.DefaultBold;
560        lopetusVarmistus.SetButtonTextColor(Color.Black);
561        lopetusVarmistus.SetButtonColor(new Color(1.0, 0, 0, 0.4));
562        lopetusVarmistus.SelectionColor = Color.DarkRed;
563        lopetusVarmistus.Color = new Color(255, 255, 255, 0.4);
564        lopetusVarmistus.QuestionLabel.TextColor = Color.DarkRed;
565        Add(lopetusVarmistus);
566
567        lopetusVarmistus.AddItemHandler(0, YOUAREANIDIOT);
568        lopetusVarmistus.AddItemHandler(1, Exit);
569
570    } 
571           
572
573}
Note: See TracBrowser for help on using the repository browser.